skip to Main Content

Here are my bot.py scripts:

import logging

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# Enable logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

logger = logging.getLogger(__name__)


# Define a few command handlers. These usually take the two arguments update and
# context. Error handlers also receive the raised TelegramError object in error.
def start(update, context):
    update.message.reply_text("Start")


def main():
   updater = Updater(TOKEN, use_context=True)
   dp = updater.dispatcher

   dp.add_handler(CommandHandler("start", start))

   updater.start_polling()

   updater.idle()


if __name__ == '__main__':
    main()

I can run it locally by python bot.py
However, I do not know how to deploy to the Django production server.

How to make it work with view.py? Do I have to create a view for it?
Can anyone help?

2

Answers


  1. One possibility is to include it as a management command and run that command on a schedule (Heroku scheduler is easy if you want to deploy to Heroku https://devcenter.heroku.com/articles/scheduler). Management commands basically execute a function you define with the command python manage.py your_command_name. How to write custom management command https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/

    Login or Signup to reply.
  2. You need to create and store somewhere Dispatcher (have it like a Singleton) and serialize Update manually without using built-in Updater. See example with no threading.

    
    from telegram import Bot, Update
    from telegram.ext import Dispatcher
    
    def create_dispatcher(token):
        # Create bot, update queue and dispatcher instances
        bot = Bot(token)
        
        dispatcher = Dispatcher(bot, None, workers=0)
        
        ##### Register handlers here #####
        
        return dispatcher
    
    
    dispatcher = create_dispatcher(TOKEN_HERE)
    
    
    def webhook_view(request)
        update = Update.de_json(json.loads(request.body.decode()), dispatcher.bot)
        dispatcher.process_update(update)
        return '{"status": "ok"}', 200
    

    Also you’ll need to setup Webhooks for that

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search