Music Downloader Telegram Bot aka scdlbot
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
scdlbot Usage in Telegram
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.
Supported sites and mainly used packages
scdlbot is standing on the shoulders of giants:
- Telegram Bot API: python-telegram-bot
- SoundCloud: scdl
- Bandcamp: bandcamp-dl
- YouTube, Yandex.Music, Mixcloud, and almost everything from this list: yt-dlp
Run your own scdlbot
Installation & Configuration
Requirements
Those should be available in your PATH
:
- Python 3.9+ (pyenv and poetry are recommended)
- FFmpeg 4.0+ if not running on Heroku (fresh builds for Windows, macOS and Linux are recommended)
- Heroku CLI is recommended if you want to deploy to Heroku
PyPI (recommended)
Install / Update stable build frompip install --upgrade scdlbot
Git source repository
...or get latest unstable build fromgit clone https://github.com/gpchelkin/scdlbot.git cd scdlbot pip install --editable "./" # or just install directly from Git with pip: pip install "scdlbot @ git+https://github.com/gpchelkin/scdlbot.git@master"
Configure Bot
Download or copy configuration file sample and set up config environment variables in it:
# Skip if you've got Git source: curl -o .env.sample https://raw.githubusercontent.com/gpchelkin/scdlbot/master/.env.sample cp .env.sample .env # Use your favourite editor. Sample config is self-documented: nano .env
Telegram Bot Settings
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.
Disable privacy mode if you want bot to read and check every message in group for links.
Otherwise, it would work only for commands.
Running Locally or on Dedicated Server
Heroku Local
UsingYou will need Heroku CLI installed.
# Skip if you've got Git source: curl -O https://raw.githubusercontent.com/gpchelkin/scdlbot/master/Procfile # For long polling mode (if WEBHOOK_ENABLE="0"): heroku local -e .env worker # For webhook mode (if WEBHOOK_ENABLE="1"): heroku local -e .env web
Using only Bash & Python
export $(grep -v '^#' .env | xargs) python -m scdlbot # or in one line: env $(grep -v '^#' .env | xargs) python -m scdlbot # If you've installed package into your system Python, # you can also replace 'python -m scdlbot' with just 'scdlbot'
Heroku
Deploying toRegister on Heroku, press the Deploy 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.
Manually
You can do the same as the button above but using Heroku
CLI. Assuming you are in
scdlbot
Git repository directory:
# Log into Heroku: heroku login # Create app with Python 3 buildpack and set it for upcoming builds: heroku create --buildpack heroku/python myscdlbot #heroku buildpacks:set heroku/python --app=myscdlbot # Add FFmpeg buildpack needed for youtube-dl & scdl: heroku buildpacks:add --index 1 https://github.com/gpchelkin/heroku-buildpack-ffmpeg-latest.git --app=myscdlbot # Set config vars automatically from your local .env file: heroku plugins:install heroku-config heroku config:push --file=.env --app=myscdlbot # or set them manually like this: heroku config:set TG_BOT_TOKEN="<TG_BOT_TOKEN>" TG_BOT_OWNER_CHAT_ID="<TG_BOT_OWNER_CHAT_ID>" ... # Deploy app to Heroku: #heroku git:remote --app=myscdlbot git push heroku master
Then, if you want to use webhook, start web dyno and stop worker dyno:
heroku ps:scale web=1 worker=0 heroku ps:stop worker
If you want to 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"
Dokku
Deploying toUse 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