python-telegram-bot 20.0版本无法导入Dispatcher模块求助
问题原因
- python-telegram-bot v20.0 做了重大架构更新,移除了
telegram.ext.Dispatcher,改用Application类替代原来Dispatcher的核心功能。 - 你看到的在线教程大多基于v13及更早的旧版本,所以还在使用Dispatcher的导入方式。
- django-telegram-bot包目前可能未适配python-telegram-bot v20.x版本,导致依赖旧的API结构。
解决方法
方案1:降级python-telegram-bot到兼容版本
如果想继续使用django-telegram-bot,建议把python-telegram-bot降级到v13.x(比如v13.7),这是很多教程和django-telegram-bot适配的稳定版本:
pip install python-telegram-bot==13.7
降级后就能正常从telegram.ext导入Dispatcher了。
方案2:适配python-telegram-bot v20.x(不依赖django-telegram-bot)
如果想保留v20版本,需要放弃django-telegram-bot,直接基于python-telegram-bot v20的API来集成到Django:
- 用
Application替代原来的Dispatcher,初始化代码示例:
from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text('Hello!') # 初始化Application application = ApplicationBuilder().token("YOUR_BOT_TOKEN").build() # 添加命令处理器 application.add_handler(CommandHandler("start", start))
- 在Django中运行bot,可以通过自定义管理命令实现,比如创建
your_app/management/commands/runtelegrambot.py:
from django.core.management.base import BaseCommand from your_app.telegram_bot import application class Command(BaseCommand): help = 'Starts the Telegram bot' def handle(self, *args, **options): application.run_polling()
之后执行python manage.py runtelegrambot就能启动bot。
内容的提问来源于stack exchange,提问作者Samuel Effiong
相关产品推荐
相关产品推荐

