Python Telegram Bot报错:MessageHandler的check_update()缺少update参数
python-telegram-bot无法响应普通消息,报错
check_update() missing 1 required positional argument: 'update' 问题描述
机器人可正常响应/start、/help等命令,但发送普通文本(如"Hello")时无回复,控制台抛出如下错误:
Update Update(message=Message(channel_chat_created=False, chat=Chat(first_name='cxl❄️', id=854959559, type=\<ChatType.PRIVATE\>, username='dobongkimchi'), date=datetime.datetime(2023, 8, 31, 6, 58, 2, tzinfo=datetime.timezone.utc), delete_chat_photo=False, from_user=User(first_name='cxl❄️', id=854959559, is_bot=False, language_code='en', username='dobongkimchi'), group_chat_created=False, message_id=102, supergroup_chat_created=False, text='Hello'), update_id=177020891) case error check_update() missing 1 required positional argument: 'update'
问题原因
你使用的是python-telegram-bot v20+版本,该版本对过滤器的使用规则做了变更:
- 代码中
MessageHandler(filters.Text, handle_message)里的filters.Text是过滤器类,直接传入MessageHandler会导致内部调用异常——类的check_update方法需要接收update参数,但直接传类的调用逻辑不符合要求。 - 正确的文本消息过滤器应使用预定义的
filters.TEXT(大写),或实例化filters.Text()类。
解决方案
将MessageHandler的过滤器参数修改为filters.TEXT,修改后的代码片段:
# Messages (Telegram) app.add_handler(MessageHandler(filters.TEXT, handle_message))
如果需要自定义文本匹配规则(比如忽略大小写),可以实例化filters.Text类:
# 匹配包含指定文本的消息,忽略大小写 app.add_handler(MessageHandler(filters.Text(["hello", "bye"], ignore_case=True), handle_message))
验证修改
修改后重新运行机器人,发送"Hello"即可收到预期的"Hey"回复,控制台不再报错。
内容的提问来源于stack exchange,提问作者doni
相关产品推荐
相关产品推荐

