Telegram Bot报错:Updater.__init__缺少必填参数update_queue如何解决?
问题解决:TypeError Updater.init() missing 'update_queue' 参数
错误原因
这个错误核心是版本不匹配:
- 你声称降级到了python-telegram-bot 13.13,但代码里用了
filters(小写)这种v20+版本的写法,且实际触发的错误符合v20+特性——v20+已完全重构API,移除了旧版Updater的常规用法,改用Application类。 - 若确实安装了13.13版本,代码里的
Filters导入错误(应为大写)、Updater初始化方式及过滤器逻辑也存在问题。
解决步骤
第一步:确认并修正安装版本
先运行以下命令查看当前版本:
pip show python-telegram-bot
选项1:坚持使用v13.13
如果版本不是13.13,先卸载重装:
pip uninstall python-telegram-bot -y pip install python-telegram-bot==13.13
替换为以下修正后的代码:
from telegram.ext import Updater, MessageHandler, Filters # 替换为你的Bot Token TOKEN = "XXXXXXX" # 替换为目标频道ID(整数格式,如-1001234567890) target_channel_id = XXXXX def forward_message(update, context): # 获取用户发给Bot的消息 user_message = update.message.text # 匿名转发到目标频道 context.bot.send_message(chat_id=target_channel_id, text=user_message) def main(): # 初始化Updater,启用use_context以便使用context.bot updater = Updater(token=TOKEN, use_context=True) dispatcher = updater.dispatcher # 只处理用户发送的文本消息(排除命令类消息如/start) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, forward_message)) updater.start_polling() updater.idle() if __name__ == "__main__": main()
选项2:改用v20+版本(推荐,v13.x已停止维护)
如果不想降级,直接适配v20+的API写法:
from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes TOKEN = "XXXXXXX" target_channel_id = XXXXX async def forward_message(update: Update, context: ContextTypes.DEFAULT_TYPE): user_message = update.message.text await context.bot.send_message(chat_id=target_channel_id, text=user_message) def main(): application = ApplicationBuilder().token(TOKEN).build() # 处理文本消息,排除命令 application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, forward_message)) application.run_polling() if __name__ == "__main__": main()
额外注意点
- 目标频道ID必须是整数格式,可通过@getidsbot获取。
- 确保Bot已被添加到目标频道并拥有发送消息的权限。
内容的提问来源于stack exchange,提问作者user01919191
相关产品推荐
相关产品推荐

