dt
django-telegrambot
pypi i django-telegrambot
dt

django-telegrambot

Simple app for Telegram bot in Django

by django-telegrambot

1.0.1 (see all)License:BSD
pypi i django-telegrambot
Readme

=============================

django-telegrambot

.. image:: https://badge.fury.io/py/django-telegrambot.png :target: https://badge.fury.io/py/django-telegrambot

.. image:: https://travis-ci.org/JungDev/django-telegrambot.png?branch=master :target: https://travis-ci.org/JungDev/django-telegrambot

A simple app to develop Telegram bots with Django

Documentation

The full documentation is at https://django-telegrambot.readthedocs.org.

Changelog

  • IMPORTANT ver 1.0.0 : If you upgrade from a previous version, you MUST change how to include django_telegrambot.urls and modify your settings.py.

Quickstart

Install django-telegrambot::

pip install django-telegrambot

Configure your installation

Add django_telegrambot in INSTALLED_APPS ::

   #settings.py
   INSTALLED_APPS = (
       ...
       'django_telegrambot',
       ...
   )

And set your bots::

    #settings.py
    #Django Telegram Bot settings

    DJANGO_TELEGRAMBOT = {

        'MODE' : 'WEBHOOK', #(Optional [str]) # The default value is WEBHOOK,
                            # otherwise you may use 'POLLING'
                            # NB: if use polling you must provide to run
                            # a management command that starts a worker

        'WEBHOOK_SITE' : 'https://mywebsite.com',
        'WEBHOOK_PREFIX' : '/prefix', # (Optional[str]) # If this value is specified,
                                      # a prefix is added to webhook url

        #'WEBHOOK_CERTIFICATE' : 'cert.pem', # If your site use self-signed
                         #certificate, must be set with location of your public key
                         #certificate.(More info at https://core.telegram.org/bots/self-signed )

        'BOTS' : [
            {
               'TOKEN': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', #Your bot token.

               #'ALLOWED_UPDATES':(Optional[list[str]]), # List the types of
                               #updates you want your bot to receive. For example, specify
                               #``["message", "edited_channel_post", "callback_query"]`` to
                               #only receive updates of these types. See ``telegram.Update``
                               #for a complete list of available update types.
                               #Specify an empty list to receive all updates regardless of type
                               #(default). If not specified, the previous setting will be used.
                               #Please note that this parameter doesn't affect updates created
                               #before the call to the setWebhook, so unwanted updates may be
                               #received for a short period of time.

               #'TIMEOUT':(Optional[int|float]), # If this value is specified,
                               #use it as the read timeout from the server

               #'WEBHOOK_MAX_CONNECTIONS':(Optional[int]), # Maximum allowed number of
                               #simultaneous HTTPS connections to the webhook for update
                               #delivery, 1-100. Defaults to 40. Use lower values to limit the
                               #load on your bot's server, and higher values to increase your
                               #bot's throughput.

               #'POLL_INTERVAL' : (Optional[float]), # Time to wait between polling updates from Telegram in
                               #seconds. Default is 0.0

               #'POLL_CLEAN':(Optional[bool]), # Whether to clean any pending updates on Telegram servers before
                               #actually starting to poll. Default is False.

               #'POLL_BOOTSTRAP_RETRIES':(Optional[int]), # Whether the bootstrapping phase of the `Updater`
                               #will retry on failures on the Telegram server.
                               #|   < 0 - retry indefinitely
                               #|     0 - no retries (default)
                               #|   > 0 - retry up to X times

               #'POLL_READ_LATENCY':(Optional[float|int]), # Grace time in seconds for receiving the reply from
                               #server. Will be added to the `timeout` value and used as the read timeout from
                               #server (Default: 2).
            },
            #Other bots here with same structure.
        ],

    }

Include in your urls.py the django_telegrambot.urls (NB: If you upgrade from a previous version, you MUST change how to include django_telegrambot.urls. Never set prefix here!)::

    #urls.py
    urlpatterns = [
        ...
        url(r'^', include('django_telegrambot.urls')),
        ...
    ]

Then use it in a project creating a module telegrambot.py in your app ::

    #myapp/telegrambot.py
    # Example code for telegrambot.py module
    from telegram.ext import CommandHandler, MessageHandler, Filters
    from django_telegrambot.apps import DjangoTelegramBot

    import logging
    logger = logging.getLogger(__name__)


    # Define a few command handlers. These usually take the two arguments bot and
    # update. Error handlers also receive the raised TelegramError object in error.
    def start(bot, update):
        bot.sendMessage(update.message.chat_id, text='Hi!')


    def help(bot, update):
        bot.sendMessage(update.message.chat_id, text='Help!')


    def echo(bot, update):
        bot.sendMessage(update.message.chat_id, text=update.message.text)


    def error(bot, update, error):
        logger.warn('Update "%s" caused error "%s"' % (update, error))


    def main():
        logger.info("Loading handlers for telegram bot")

        # Default dispatcher (this is related to the first bot in settings.DJANGO_TELEGRAMBOT['BOTS'])
        dp = DjangoTelegramBot.dispatcher
        # To get Dispatcher related to a specific bot
        # dp = DjangoTelegramBot.getDispatcher('BOT_n_token')     #get by bot token
        # dp = DjangoTelegramBot.getDispatcher('BOT_n_username')  #get by bot username

        # on different commands - answer in Telegram
        dp.add_handler(CommandHandler("start", start))
        dp.add_handler(CommandHandler("help", help))

        # on noncommand i.e message - echo the message on Telegram
        dp.add_handler(MessageHandler([Filters.text], echo))

        # log all errors
        dp.add_error_handler(error)

Features

  • Multiple bots

  • Admin dashboard available at /admin/django-telegrambot

  • Polling mode by management command (an easy to way to run bot in local machine, not recommended in production!)

    ``(myenv) $ python manage.py botpolling --username=<username_bot>``
    

Contributing

Patches and bug reports are welcome, just please keep the style consistent with the original source.

Running Tests

Does the code actually work?

::

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements-test.txt
(myenv) $ python runtests.py

Sample Application

There a sample application in sampleproject directory. Here is installation instructions:

  1. Install requirements with command

    pip install -r requirements.txt
    
  2. Copy file local_settings.sample.py as local_settings.py and edit your bot token

    cp sampleproject/local_settings.sample.py sampleproject/local_settings.py
    
    nano sampleproject/local_settings.py
    
  3. Run Django migrations

    python manage.py migrate
    
  4. Run server

    python manage.py runserver
    
  5. If WEBHOOK Mode setted go to 8

  6. If POLLING Mode setted, open in your browser http://localhost/

  7. Open Django-Telegram Dashboard http://localhost/admin/django-telegrambot and follow instruction to run worker by management command botpolling. Then go to 10

  8. To test webhook locally install ngrok application and run command

    ./ngrok http 8000
    
  9. Change WEBHOOK_SITE and ALLOWED_HOSTS in local_settings.py file

  10. Start a chat with your bot using telegram.me link avaible in Django-Telegram Dashboard at http://localhost/admin/django-telegrambot

Credits

Required package:

  • Python Telegram Bot_

.. _Python Telegram Bot: https://github.com/python-telegram-bot/python-telegram-bot

Tools used in rendering this package:

  • Cookiecutter_

.. _Cookiecutter: https://github.com/audreyr/cookiecutter

History

1.0.0 (2017-05-25) ++++++++++++++++++

  • IMPORTANT: If you upgrade from a previous version, you MUST change how to include django_telegrambot.urls and settings.py.
  • Added admin dashboard, available at /admin/django-telegrambot
  • Added polling mode from management command (an easy to way to run bot in local machine, not recommended in production)
  • More setting available
  • Improved AppConfig
  • Improved sample project

0.2.6 (2017-04-08) ++++++++++++++++++

  • Improved module loading
  • Added sample project

0.2.5 (2017-03-06) ++++++++++++++++++

  • Fix compatibility with python-telegram-bot 5.1

0.2.4 (2016-10-04) ++++++++++++++++++

  • Fix compatibility with Django 1.10

0.2.3 (2016-07-30) ++++++++++++++++++

  • Fix default dispatcher and bot

0.2.2 (2016-07-27) ++++++++++++++++++

  • Fix multi workers

0.2.1 (2016-07-24) ++++++++++++++++++

  • Update for python-telegram-bot release v5.0

0.2.0 (2016-04-27) ++++++++++++++++++

  • Update for python-telegram-bot release v4.0.1

0.1.8 (2016-03-22) ++++++++++++++++++

  • Update for deprecation in python-telegram-bot release v3.4

0.1.5 (2016-01-28) ++++++++++++++++++

  • Fix compatibility.

0.1.4 (2016-01-28) ++++++++++++++++++

  • Fix compatibility.

0.1.3 (2016-01-28) ++++++++++++++++++

  • Fix setting certificate.
  • Add method DjangoTelegramBot.getBot(); get bot instance by token or username.

0.1.2 (2016-01-26) ++++++++++++++++++

  • First release on PyPI.
VersionTagPublished
1.0.1
6yrs ago
1.0.0
6yrs ago
0.2.6
6yrs ago
0.2.5
6yrs ago
No alternatives found
No tutorials found
Add a tutorial
No dependencies found

Rate & Review

100
No reviews found
Be the first to rate