Telegram Bot for downloading MP3 rips of tracks/sets from SoundCloud, Bandcamp, YouTube with tags and artwork.
- Free software: MIT license
- Documentation: https://scdlbot.readthedocs.io
Contents
Send /start
or /help
command to bot or refer directly to the help message.
Please report all bugs and issues and suggest your improvements to issues.
- Telegram Bot API: python-telegram-bot
- SoundCloud: scdl
- Bandcamp: bandcamp-dl
- YouTube, Mixcloud, everything else from the list: youtube-dl
Those should be available in your PATH
:
- Python 3.5+ (pyenv recommended)
- FFmpeg 3.4 if not running on Heroku (fresh builds for Windows and Linux are recommended)
- Heroku CLI is recommended
Install / Update stable from PyPI (recommended)
pip3 install scdlbot
Install / Update unstable from Git source
git clone https://github.com/gpchelkin/scdlbot.git cd scdlbot pip3 install --requirement requirements.txt # Update: git pull pip3 install --requirement requirements.txt # System-wide install link to current sources, recommended: python3 setup.py develop # System-wide install copy of current sources, not recommended: python3 setup.py install
Download or copy config file sample and set up config environment variables in it:
# PyPI-installed: download sample config: curl -o .env https://raw.githubusercontent.com/gpchelkin/scdlbot/master/.env.sample # Git source-installed: copy sample config: cp .env.sample .env # Use your favourite editor: nano .env
TG_BOT_TOKEN
: Telegram Bot API Token, obtain here
SC_AUTH_TOKEN
: SoundCloud Auth Token, obtain hereSTORE_CHAT_ID
: Chat ID for storing audios of inline modeUSE_WEBHOOK
: use webhook for bot updates:1
, use polling (default):0
, more infoAPP_URL
: app URL likehttps://<appname>.herokuapp.com/
, required for webhookPORT
: port for webhook to listen to; Heroku sets this automatically for web dynosBOTAN_TOKEN
: Botan.io tokenNO_FLOOD_CHAT_IDS
: Comma-separated chat IDs with no replying and caption spamBIN_PATH
: Custom directory wherescdl
andbandcamp-dl
binaries are available, e.g.~/.pyenv/shims/
if you use pyenv, default: empty (binaries are availaible in PATH)DL_DIR
: Parent directory for downloads directories, default: /tmp/scdlbotDL_TIMEOUT
: Download timeout in seconds, stop downloading if it takes longer than allowed, default: 300MAX_CONVERT_FILE_SIZE
: Don't try to split and send files over this number of bytes, default: 80000000SYSLOG_ADDRESS
: Syslog server, for examplelogsX.papertrailapp.com:ABCDE
SYSLOG_DEBUG
: Enable verbose debug logging: 1HOSTNAME
: Hostname to show up in Syslog messagesGOOGL_API_KEY
: Goo.gl URL shortener API key
Webhooks: These three links should help. In NGINX use TOKEN1 as TG_BOT_TOKEN without ":" symbol, and port in proxy_pass according to PORT environment variable.
- https://nginx.org/en/linux_packages.html#mainline
- https://github.com/python-telegram-bot/python-telegram-bot/wiki/Webhooks#using-nginx-with-one-domainport-for-all-bots
- https://certbot.eff.org/#ubuntuxenial-nginx
Send the commands from respective filenames in telegram_settings
dir to @BotFather, choose your bot and copy corresponding values in order to use the bot conveniently. Also disable privacy mode if you want to.
Using Heroku Local (preferred)
You will need Heroku CLI installed.
# PyPI-installed: download Procfile: curl -O https://raw.githubusercontent.com/gpchelkin/scdlbot/master/Procfile # For long polling: heroku local worker # For webhook: heroku local web
# PyPI or Git source system-wide installs: export $(cat .env | xargs) scdlbot # or just: env $(cat .env | xargs) scdlbot # Non-installed Git source repository directory: export $(cat .env | xargs) python -m scdlbot # or just: env $(cat .env | xargs) python -m scdlbot
Deploying to Heroku
Register on Heroku, press the button above and configure variables for deploying.
When app is deployed you must set only one dyno working on
"Resources" tab in your app settings depending on which way of getting
updates you have
chosen and set in config variables: worker
for polling or web
for webhook.
You can do the same as the button above but using Heroku
CLI, not much of a fun. Assuming you are in
scdlbot
repository directory:
heroku login # Create app with Python3 buildpack and set it for upcoming builds: heroku create --buildpack heroku/python heroku buildpacks:set heroku/python # Add FFmpeg buildpack needed for youtube-dl: heroku buildpacks:add --index 1 https://github.com/laddhadhiraj/heroku-buildpack-ffmpeg.git --app scdlbot # Deploy app to Heroku: git push heroku master # Set config vars automatically from your .env file heroku plugins:install heroku-config heroku config:push # Or set them one by one: heroku config:set TG_BOT_TOKEN="<TG_BOT_TOKEN>" STORE_CHAT_ID="<STORE_CHAT_ID>" ...
If you use webhook, start web dyno and stop worker dyno:
heroku ps:scale web=1 worker=0 heroku ps:stop worker
If you use polling, start worker dyno and stop web dyno:
heroku ps:scale worker=1 web=0 heroku ps:stop web
Some useful commands:
# Attach to logs: heroku logs -t # Test run ffprobe heroku run "ffprobe -version"
Deploying to Dokku
Use Dokku (your own Heroku) installed on your own server. App is tested and fully ready for deployment with polling (no webhook yet). https://github.com/dokku/dokku-letsencrypt
export DOKKU=<your_dokku_server> scp .env $DOKKU:~ ssh $DOKKU export DOKKU=<your_dokku_server> dokku apps:create scdlbot dokku certs:generate scdlbot scdlbot.$DOKKU dokku config:set scdlbot $(cat .env | xargs) logout git remote add dokku dokku@$DOKKU:scdlbot git push dokku master ssh $DOKKU dokku ps:scale scdlbot worker=1 web=0 dokku ps:restart scdlbot