解决Telegram机器人报错:TypeError: __init__()收到意外关键字参数'token'
Telegram群组监控机器人错误修复方案
错误原因
你碰到的TypeError: __init__() got an unexpected keyword argument 'token',是因为使用的python-telegram-bot版本为v20+。该版本彻底移除了Updater类,API结构做了重大调整,旧版本的初始化写法不再兼容。
修复后的完整代码
以下是适配新版API,同时修正其他逻辑问题的代码:
import logging from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes # 替换为你的Bot Token TOKEN = '你的真实Token' # 替换为你接收通知的个人Chat ID(获取方式:给@userinfobot发消息即可拿到) NOTIFY_CHAT_ID = '你的个人Chat ID' # 要监控的关键词列表 KEYWORDS = ['June', 'July', 'August'] # 配置日志,方便排查问题 logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): message = update.message if message.text: # 忽略大小写,检查消息是否包含任意关键词 message_text = message.text.lower() matched_keywords = [kw for kw in KEYWORDS if kw.lower() in message_text] if matched_keywords: # 向你的个人Chat ID发送监控通知 await context.bot.send_message( chat_id=NOTIFY_CHAT_ID, text=f"监控到关键词{'/'.join(matched_keywords)}:\n群聊:{update.effective_chat.title}\n消息内容:{message.text}" ) def main(): # 使用新版ApplicationBuilder初始化机器人 application = ApplicationBuilder().token(TOKEN).build() # 注册消息处理器,过滤掉机器人命令(如/start) message_handler = MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message) application.add_handler(message_handler) # 启动机器人 application.run_polling() if __name__ == '__main__': main()
额外修复说明
- 替换过时的
Updater为v20+的ApplicationBuilder,适配新版API规范 - 修正
KEYWORD定义错误:原代码是元组,调用lower()会报错,改为列表后遍历检查多关键词 - 新增
NOTIFY_CHAT_ID:原代码是在群内发通知,现在改为向你个人发送监控提醒 - 适配异步语法:v20+要求消息处理器函数使用
async/await形式 - 优化匹配逻辑:支持同时监控多个关键词,并返回具体匹配项
- 过滤机器人命令:避免触发
/start这类命令消息的监控
旧版本兼容方案(不推荐)
如果非要使用已停止维护的v13.x版本,只需修改Updater初始化方式(将token作为位置参数传入):
# 仅适用于python-telegram-bot v13.x updater = Updater(TOKEN, use_context=True)
内容的提问来源于stack exchange,提问作者azraf122312
相关产品推荐
相关产品推荐

