我正在尝试使用Django的telegram bot。我想让代码在后台继续运行。我正在使用apps.py来做到这一点,但是有一个问题,当bot启动时,因为它是一个无限循环,Django服务器永远不会启动。
Apps.py:
from django.apps import AppConfig
import os
class BotConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'bot'
def ready(self):
from . import jobs
if os.environ.get('RUN_MAIN', None) != 'true':
jobs.StartBot()
Jobs.py:
def StartBot():
updater = Updater("API KEY")
dp = updater.dispatcher
dp.add_handler(ChatMemberHandler(GetStatus, ChatMemberHandler.CHAT_MEMBER))
updater.start_polling(allowed_updates=Update.ALL_TYPES)
updater.idle()
在后台运行我的bot最好的方法是什么?同时确保Django服务器正常运行。我尝试了Django后台任务,但是它不兼容Django 4.0。
Updater.idle
的目的是保持主线程存活,因为start_polling
只启动一些不阻塞主线程的后台线程。如果你想在主线程中运行其他东西,跳过updater.idle()
,在程序应该关闭的时候手动调用Updater.stop
。
免责声明:我目前是python-telegram-bot
的维护者