Telegram Bot集成OpenAI脚本报错:'Updater'无'dispatcher'属性
问题解决:AttributeError: 'Updater' object has no attribute 'dispatcher'
这个报错的核心原因是python-telegram-bot版本不兼容:v20及以上版本彻底移除了Updater类,同时废弃了旧版的dispatcher属性逻辑。以下是两种可行解决方案:
方案一:降级到兼容旧代码的版本
如果不想大幅修改现有代码,直接降级到v19.x系列(最后一个支持Updater的稳定版本):
pip install python-telegram-bot==19.10
降级后,原代码中updater.dispatcher的调用逻辑可以正常运行。
方案二:适配最新版(v20+)代码结构
如果要使用最新库版本,需完全改用Application类替代Updater,同时适配异步语法,示例代码如下:
from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, filters, MessageHandler import openai # 初始化OpenAI openai.api_key = "你的OpenAI API Key" # 异步处理函数:调用OpenAI回复 async def chat_with_gpt(update: Update, context: ContextTypes.DEFAULT_TYPE): response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": update.message.text}] ) await update.message.reply_text(response.choices[0].message.content) async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text('发送消息即可调用OpenAI聊天!') if __name__ == '__main__': # 初始化Telegram Bot Application app = ApplicationBuilder().token("你的Telegram Bot Token").build() # 添加命令处理器 app.add_handler(CommandHandler("start", start)) # 添加文本消息处理器(排除命令消息) app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat_with_gpt)) # 启动轮询 app.run_polling()
注意事项:
- 所有消息处理函数必须定义为
async异步函数,回复消息需用await调用相关方法 - 旧版的
Filters已迁移到telegram.ext.filters,且命名改为小写(如filters.TEXT代替Filters.text) - 若OpenAI调用耗时较长,可考虑用线程池异步处理,避免阻塞Bot的消息响应
内容的提问来源于stack exchange,提问作者Oktorio R.P
相关产品推荐
相关产品推荐

