首页 > 解决方案 > 将电报机器人与 Django 网站一起部署到生产环境

问题描述

这是我的 bot.py 脚本:

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()

我可以在本地运行它python bot.py 但是,我不知道如何部署到 Django 生产服务器。

如何让它工作view.py?我必须为它创建一个视图吗?任何人都可以帮忙吗?

标签: pythondjangotelegram-botpython-telegram-bot

解决方案


您需要在某处创建和存储Dispatcher(像 Singleton 一样)并Update手动序列化而不使用内置更新程序。请参阅没有线程的示例


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

您还需要为此设置Webhooks


推荐阅读