如何让python-telegram-bot的所有处理器默认非阻塞?
让python-telegram-bot所有处理器默认设置block=False的方案
以下几种方法可以避免逐个处理器手动添加block=False参数:
方法1:自定义Handler子类
继承原Handler类,在初始化时默认设置block=False,后续直接使用自定义类即可:
from telegram.ext import CommandHandler class CustomCommandHandler(CommandHandler): def __init__(self, command, callback, **kwargs): # 预设block=False,若传入block参数则覆盖默认值 kwargs.setdefault('block', False) super().__init__(command, callback, **kwargs)
使用示例:
# 替换原CommandHandler为自定义类,无需再传block=False app.add_handler(CustomCommandHandler("start", start_c)) app.add_handler(CustomCommandHandler("help", help_c))
如果某个特殊处理器需要启用阻塞,直接传入block=True即可覆盖默认:
app.add_handler(CustomCommandHandler("special", special_c, block=True))
方法2:用functools.partial预设参数
借助functools.partial包装原Handler,预先绑定block=False参数:
from functools import partial from telegram.ext import CommandHandler # 包装后得到默认block=False的CommandHandler CommandHandlerNoBlock = partial(CommandHandler, block=False)
使用示例:
app.add_handler(CommandHandlerNoBlock("start", start_c)) app.add_handler(CommandHandlerNoBlock("help", help_c))
同理,需要例外时直接传入block=True即可。
方法3:批量注册处理器(优化字典循环方案)
将命令与回调函数整理为列表/元组,循环批量添加处理器,只需写一次block=False:
# 整理命令与回调的映射 command_handlers = [ ("start", start_c), ("help", help_c), # 新增命令直接追加元组即可 ] # 循环注册 for cmd, func in command_handlers: app.add_handler(CommandHandler(cmd, func, block=False))
以上三种方法中,前两种属于一劳永逸的方案,后续新增处理器无需重复关注block参数;第三种适合快速简化现有批量注册逻辑。
内容的提问来源于stack exchange,提问作者user19570614
相关产品推荐
相关产品推荐

