如何配置单个message handler对所有输入返回同一个处理函数
解决方案
你可以通过以下两种方式实现单个handler匹配所有用户输入触发目标函数的需求:
方案一:使用内置全匹配过滤器(最推荐)
python-telegram-bot 自带了适配该场景的内置过滤器Filters.all,可以匹配所有收到的消息,直接使用即可:
messageHandler(Filters.all, start)
如果是在ConversationHandler的状态分支中使用,直接将该handler加入对应状态的handler列表即可,该状态下所有用户输入都会触发start函数。
方案二:使用正则全匹配
如果你偏好使用正则过滤器实现,直接写匹配任意文本的正则表达式即可,不需要动态拼接用户输入变量:
messageHandler(Filters.regex(r'^.*$'), start)
正则^.*$可匹配任意长度、任意内容的文本输入,完全符合需求。
额外优化(针对你示例中的多关键词匹配场景)
你之前分别匹配Edit和ADD的两个handler也可以合并为一个,不需要重复定义:
messageHandler(Filters.regex(r'^(Edit|ADD)$'), editing)
注意:如果你的handler列表中还有其他匹配规则更精确的handler,请把全匹配handler放在所有handler的最后,避免它提前匹配消息,导致后续精确规则失效。
内容的提问来源于stack exchange,提问作者Vitor Oliveira
相关产品推荐
相关产品推荐

