python-telegram-bot 20.2版本Updater初始化报错:未知参数'use_context'
问题解决:python-telegram-bot 20.2 中 Updater 初始化报错
错误原因
python-telegram-bot 从 v13.x 版本开始就默认启用上下文模式,到 v20.x 版本直接彻底移除了use_context参数,所以你在初始化Updater时传入这个参数会触发TypeError。
修复步骤
1. 移除 use_context=True 参数
直接删掉这个参数,初始化Updater只需要传入token即可:
updater = Updater(token)
2. 修正代码里的其他问题
你的代码还有几个细节问题需要调整:
- 环境变量使用错误:
os.environ.get()的参数应该是环境变量的名称,不是具体的token或ID值。比如你需要先在系统环境变量里设置TELEGRAM_BOT_TOKEN和ADMIN_CHAT_ID,再通过os.environ.get('TELEGRAM_BOT_TOKEN')获取。 - 变量作用域问题:
echo函数里重新定义了ADMIN_CHAT_ID,导致无法访问main函数中定义的变量,需要调整作用域。 - 重复定义token:main函数里重复定义了
TOKEN和token变量,统一使用环境变量获取的即可。
修正后的完整代码
import os from telegram.ext import Updater, CommandHandler, MessageHandler, filters # 全局变量存储管理员ID ADMIN_CHAT_ID = None def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="test") def echo(update, context): global ADMIN_CHAT_ID context.bot.forward_message( chat_id=ADMIN_CHAT_ID, from_chat_id=update.message.chat_id, message_id=update.message.message_id ) context.bot.send_message(chat_id=update.effective_chat.id, text="test") def main(): global ADMIN_CHAT_ID # 从环境变量获取token和管理员ID(需先在系统中设置对应环境变量) TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN') ADMIN_CHAT_ID = os.environ.get('ADMIN_CHAT_ID') if not TOKEN or not ADMIN_CHAT_ID: print("请设置TELEGRAM_BOT_TOKEN和ADMIN_CHAT_ID环境变量") return updater = Updater(TOKEN) dispatcher = updater.dispatcher start_handler = CommandHandler('start', start) echo_handler = MessageHandler(filters.text & ~filters.command, echo) dispatcher.add_handler(start_handler) dispatcher.add_handler(echo_handler) updater.start_polling() updater.idle() if __name__ == '__main__': main()
补充说明
- 临时设置环境变量的方法:
- Windows命令行:
set TELEGRAM_BOT_TOKEN=你的机器人token set ADMIN_CHAT_ID=你的管理员聊天ID - Linux/macOS终端:
export TELEGRAM_BOT_TOKEN=你的机器人token export ADMIN_CHAT_ID=你的管理员聊天ID
- Windows命令行:
内容的提问来源于stack exchange,提问作者CaseyCode
相关产品推荐
相关产品推荐

