如何在aiogram中让修改后的消息重新触发其他消息处理器?
问题解答
可行,你可以通过构造新的Update对象并让调度器重新处理的方式,实现让修改后的消息如同用户新发送的一样被其他处理器匹配,且不会触发原处理器。
实现思路
修改消息文本后,复制原消息和原Update的属性,替换为新的文本内容,然后调用调度器的process_update方法重新处理这个新的Update。这样调度器会从头遍历所有消息处理器,由于新文本已经移除了-g,不会触发当前的处理器,完全符合需求。
代码示例
@dp.message_handler(Text(contains='-g')) async def g_replace(message: types.Message): # 处理文本替换 new_text = message.text.lower().replace('-g', '').replace('г', 'ґ') # 复制原消息并替换文本 new_message = message.copy() new_message.text = new_text # 复制原Update并替换消息内容 new_update = message.update.copy() new_update.message = new_message # 让调度器重新处理新的Update await dp.process_update(new_update)
注意事项
- 确保修改后的文本不包含'-g',这样就不会再次触发当前的处理器。
- 如果你使用的是python-telegram-bot v20版本,构造Update对象的方式可能需要调整,比如通过
Update(**new_update.dict())来创建新实例,核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者swee
相关产品推荐
相关产品推荐

