Update README.md

This commit is contained in:
2021-12-04 20:49:34 +01:00
parent ec5722ab55
commit 393b8797f9
4 changed files with 178 additions and 1 deletions

View File

@ -1 +1,52 @@
# discord-nice-embed-maker-for-my-yoy
# discord-embed
Discord will only create embeds for videos and images if they are smaller than 8MB. We can "abuse" this by using the [twitter:image HTML meta tag](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup).
This is useful when you send a video and want it to be playable in Discord.
## How it works
This program will create a .html that you will send instead of a .mp4 file. Discord will parse the HTML and create an embed for you. The embed will be the same as the one you would get if you send a .mp4 file.
## Installation
This implies that you have experience with Nginx. Don't be afraid to contact me if you need help.
* Install latest version of [git](https://git-scm.com/), [Python](https://www.python.org/), [Poetry](https://python-poetry.org/docs/#installation) and Nginx.
* Clone the repository or download the [source code](https://github.com/TheLovinator1/discord-nice-embed-maker-for-my-yoy/archive/refs/heads/master.zip) directly from GitHub.
* Install the dependencies using [Poetry](https://python-poetry.org/docs/#installation).
* `poetry install`
* Rename .env.example to .env and fill in the required values.
* Copy discord-embed.service to /etc/systemd/system/discord-embed.service.
* `sudo cp discord-embed.service /etc/systemd/system/discord-embed.service`
* Change lovinator to your username.
* Change DOMAIN to the domain where we will serve the files.
* There is a bundled nginx config file that can be used to serve the site.
* `sudo cp nginx.conf /etc/nginx/`
* Start Nginx at boot.
* `sudo systemctl enable --now nginx`
* Create directory for uploaded files.
* `sudo mkdir /Uploads`
* Check what user is running Nginx, Arch is using http. Others could be www-data:
* ps aux | grep nginx
* Change permissions of /Uploads directory. Change lovinator to your username and http to the user running Nginx.
* `sudo chown -R lovinator:http /Uploads`
* Create log folder.
* `sudo mkdir /var/log/discord-embed`
* Change permissions of /var/log/discord-embed directory. Change lovinator to your username.
* `sudo chown -R lovinator:lovinator /var/log/discord-embed`
* Start the services.
* `sudo systemctl enable --now discord-embed.service`
* `sudo systemctl enable --now discord-embed.socket`
* Check if the services are running.
* `sudo systemctl status discord-embed.service`
* `sudo systemctl status discord-embed.socket`
* Check logs for errors.
* `cat /var/log/discord-embed/error.log` and `cat /var/log/discord-embed/access.log`
## Need help?
* Email: [tlovinator@gmail.com](mailto:tlovinator@gmail.com)
* Discord: TheLovinator#9276
* Steam: [TheLovinator](https://steamcommunity.com/id/TheLovinator/)
* Send an issue: [discord-embed/issues](https://github.com/TheLovinator1/discord-embed/issues)

17
discord-embed.service Normal file
View File

@ -0,0 +1,17 @@
[Unit]
Description=discord-embed
Requires=discord-embed.socket
After=network.target
[Service]
Type=notify
# Change lovinator to your username
User=lovinator
Group=lovinator
ExecStart=/home/lovinator/.local/bin/poetry run gunicorn --workers=3 --threads=3 -k uvicorn.workers.UvicornWorker --bind unix:/run/discord-embed.sock --access-logfile /var/log/discord-embed/access.log --error-logfile /var/log/discord-embed/error.log main:app
WorkingDirectory=/home/lovinator/discord-embed
Environment="DOMAIN=https://i.lovinator.space/"
Restart=on-failure
[Install]
WantedBy=multi-user.target

11
discord-embed.socket Normal file
View File

@ -0,0 +1,11 @@
[Unit]
Description=Socket that Nginx will use to communicate with Gunicorn.
[Socket]
ListenStream=/run/discord-embed.sock
# Change this to the user that runs nginx. On Arch it is http, on others it is www-data. You can check with "ps aux | grep nginx"
SocketUser=http
[Install]
WantedBy=sockets.target

98
nginx.conf Normal file
View File

@ -0,0 +1,98 @@
worker_processes auto;
events {
multi_accept on;
worker_connections 1024;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 4096;
types_hash_bucket_size 64;
server_tokens off;
client_max_body_size 0M;
set_real_ip_from 192.168.1.31;
# MIME
include mime.types;
default_type application/octet-stream;
# Log Format
log_format cloudflare '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_cf_ray $http_cf_connecting_ip $http_x_forwarded_for $http_x_forwarded_proto $http_true_client_ip $http_cf_ipcountry $http_cf_visitor $http_cdn_loop';
# Logging
access_log /var/log/nginx/access.log cloudflare;
error_log /var/log/nginx/error.log warn;
# Load configs
include /etc/nginx/conf.d/*.conf;
keepalive_timeout 65;
server {
listen 80;
# This is the URL where we will upload images to
server_name upload.lovinator.space;
root /usr/share/nginx/html;
# discord-embed needs to be running before we can use it
location / {
proxy_pass http://unix:/run/discord-embed.sock;
}
# logging
access_log /var/log/nginx/lovinator.space.access.log cloudflare;
error_log /var/log/nginx/lovinator.space.error.log warn;
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
}
server {
listen 80;
# This is the URL that the images will be served from
server_name i.lovinator.space;
# Where the images and videos are stored. Should be the same as "Environment="DOMAIN=https://i.lovinator.space/"" in discord-embed.service
root /Uploads;
location / {
try_files $uri $uri/ $uri.html;
}
# logging
access_log /var/log/nginx/lovinator.space.access.log cloudflare;
error_log /var/log/nginx/lovinator.space.error.log warn;
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
}
}