Metadata-Version: 2.1
Name: scdlbot
Version: 0.9.24
Summary: Telegram Bot for downloading MP3 rips of tracks/sets from SoundCloud, Bandcamp, YouTube with tags and artwork
Home-page: https://github.com/gpchelkin/scdlbot
License: MIT
Keywords: scdlbot,telegram,bot,soundcloud,bandcamp,youtube,audio,music,download
Author: George Pchelkin
Author-email: george@pchelk.in
Requires-Python: >=3.5,<4.0
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet
Classifier: Topic :: Multimedia :: Sound/Audio
Requires-Dist: Celery (==4.3.0)
Requires-Dist: bandcamp-downloader (==0.0.8.post12)
Requires-Dist: boltons (==19.3.0)
Requires-Dist: logentries (==0.17)
Requires-Dist: mutagen (==1.42.0)
Requires-Dist: patool (==1.12)
Requires-Dist: plumbum (==1.6.7)
Requires-Dist: pydub (==0.23.1)
Requires-Dist: pyshorteners (==0.6.1)
Requires-Dist: python-telegram-bot (==10.1.0)
Requires-Dist: python-telegram-handler (==2.2)
Requires-Dist: scdl (==1.6.12)
Requires-Dist: youtube-dl (==2019.10.29)
Project-URL: Documentation, https://scdlbot.readthedocs.io
Project-URL: Repository, https://github.com/gpchelkin/scdlbot
Description-Content-Type: text/x-rst

=============================
Music Downloader Telegram Bot
=============================


.. image:: https://img.shields.io/badge/Telegram-@scdlbot-blue.svg
        :target: https://t.me/scdlbot
        :alt: Telegram Bot

.. image:: https://travis-ci.com/gpchelkin/scdlbot.svg?branch=master
        :target: https://travis-ci.com/gpchelkin/scdlbot
        :alt: Travis CI Build Status

.. image:: https://readthedocs.org/projects/scdlbot/badge/?version=latest
        :target: https://scdlbot.readthedocs.io/?badge=latest
        :alt: Documentation Status

.. image:: https://img.shields.io/github/license/gpchelkin/scdlbot.svg
        :target: https://raw.githubusercontent.com/gpchelkin/scdlbot/master/LICENSE
        :alt: GitHub License

.. image:: https://img.shields.io/pypi/v/scdlbot.svg
        :target: https://pypi.org/project/scdlbot
        :alt: PyPI Version

.. image:: https://codeclimate.com/github/gpchelkin/scdlbot/badges/issue_count.svg
        :target: https://codeclimate.com/github/gpchelkin/scdlbot
        :alt: Code Climate Issue Count

.. image:: https://api.codacy.com/project/badge/Grade/7dfb6d8e7a094987b303e9283fc7368c
        :target: https://www.codacy.com/app/gpchelkin/scdlbot
        :alt: Codacy Build Status

.. image:: https://codebeat.co/badges/57243b9d-2269-4f31-a35b-6aedd11626d2
        :target: https://codebeat.co/projects/github-com-gpchelkin-scdlbot-master
        :alt: Codebeat Quality

.. image:: https://bettercodehub.com/edge/badge/gpchelkin/scdlbot?branch=master
        :target: https://bettercodehub.com
        :alt: Better Code Hub Compliance



Telegram Bot for downloading MP3 rips of tracks/sets from SoundCloud, Bandcamp, YouTube with tags and artwork.


* Free software: `MIT License <LICENSE>`__
* Documentation: https://scdlbot.readthedocs.io


.. contents:: :depth: 2


Bot Usage
---------

Send ``/start`` or ``/help`` command to bot or refer directly to the `help message <scdlbot/messages/help.tg.md>`__.

Please report all bugs and issues and suggest your improvements to `issues <https://github.com/gpchelkin/scdlbot/issues>`__.

Supported sites and mainly used packages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  `Telegram Bot API <https://core.telegram.org/bots/api>`__:
   `python-telegram-bot <https://github.com/python-telegram-bot/python-telegram-bot>`__
-  `SoundCloud <https://soundcloud.com>`__:
   `scdl <https://github.com/flyingrub/scdl>`__
-  `Bandcamp <https://bandcamp.com>`__:
   `bandcamp-dl <https://github.com/iheanyi/bandcamp-dl>`__
-  `YouTube <https://www.youtube.com/>`__,
   `Mixcloud <https://www.mixcloud.com/>`__, everything else from the `list <https://rg3.github.io/youtube-dl/supportedsites.html>`__:
   `youtube-dl <https://rg3.github.io/youtube-dl>`__

Development
-----------

Installation
~~~~~~~~~~~~

Requirements
^^^^^^^^^^^^

Those should be available in your ``PATH``:

-  `Python 3.5+ <https://www.python.org/>`__
   (`pyenv <https://github.com/pyenv/pyenv>`__ recommended)
-  `FFmpeg 3.4 <https://ffmpeg.org/download.html>`__ if not running on Heroku
   (fresh builds for `Windows <https://ffmpeg.zeranoe.com/builds/>`__
   and `Linux <https://johnvansickle.com/ffmpeg/>`__ are recommended)
-  `Heroku CLI <https://cli.heroku.com/>`__ is recommended

Install / Update stable from `PyPI <https://pypi.org/project/scdlbot>`__ (recommended)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

    pip3 install scdlbot

Install / Update unstable from `Git source <https://github.com/gpchelkin/scdlbot>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

    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

Configuration
~~~~~~~~~~~~~

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

Required
^^^^^^^^

-  ``TG_BOT_TOKEN``: Telegram Bot API Token, `obtain
   here <https://t.me/BotFather>`__

Optional
^^^^^^^^

-  ``SC_AUTH_TOKEN``: SoundCloud Auth Token, `obtain
   here <https://flyingrub.github.io/scdl/>`__
-  ``STORE_CHAT_ID``: Chat ID for storing audios of inline mode
-  ``USE_WEBHOOK``: use webhook for bot updates: ``1``, use polling
   (default): ``0``, `more info <https://core.telegram.org/bots/api#getting-updates>`__
-  ``APP_URL``: app URL like
   ``https://<appname>.herokuapp.com/``, required for webhook
-  ``PORT``: port for webhook to listen to; Heroku sets this automatically
   for web dynos
-  ``BOTAN_TOKEN``: `Botan.io <http://botan.io/>`__
   `token <http://appmetrica.yandex.com/>`__
-  ``NO_FLOOD_CHAT_IDS``: Comma-separated chat IDs with no replying
   and caption spam
-  ``BIN_PATH``: Custom directory where ``scdl`` and ``bandcamp-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/scdlbot
-  ``DL_TIMEOUT``: Download timeout in seconds, stop downloading if it takes longer than allowed, default: 300
-  ``MAX_CONVERT_FILE_SIZE``: Don't try to split and send files over this number of bytes, default: 80000000
-  ``SYSLOG_ADDRESS``: Syslog server, for example ``logsX.papertrailapp.com:ABCDE``
-  ``SYSLOG_DEBUG``: Enable verbose debug logging: 1
-  ``HOSTNAME``: Hostname to show up in Syslog messages
-  ``GOOGL_API_KEY``: `Goo.gl URL shortener <https://goo.gl>`__
   `API key <https://developers.google.com/url-shortener/v1/getting_started#APIKey>`__

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

Telegram Bot Settings
^^^^^^^^^^^^^^^^^^^^^

Send the commands from respective filenames in ``telegram_settings`` dir to `@BotFather <https://t.me/BotFather>`__, choose your bot and copy corresponding values in order to use the bot conveniently. Also disable privacy mode if you want to.


Running Locally or at Dedicated Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Using `Heroku Local <https://devcenter.heroku.com/articles/heroku-local#run-your-app-locally-using-the-heroku-local-command-line-tool>`__ (preferred)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

You will need `Heroku CLI <https://cli.heroku.com/>`__ 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

Using Python only
^^^^^^^^^^^^^^^^^

::

    # For PyPI or Git source system-wide installs:
    export $(cat .env | xargs)
    scdlbot

    # or in one line:
    env $(cat .env | xargs) scdlbot

    # For non-installed Git source repository directory:
    export $(cat .env | xargs)
    python -m scdlbot
    # or in one line:
    env $(cat .env | xargs) python -m scdlbot


Deploying to `Heroku <https://heroku.com/>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

|Deploy|

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 <https://core.telegram.org/bots/api#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 <https://cli.heroku.com/>`__, 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 <https://github.com/dokku/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

.. |Deploy| image:: https://www.herokucdn.com/deploy/button.svg
    :target: https://heroku.com/deploy

