Pyrogram无法接收机器人发送频道消息的问题求助
解决Pyrogram无法监听机器人发送的频道消息问题
问题根源
- 你用
message.copy(channelB)发送的消息,是当前运行的Pyrogram客户端账号发出的,而Pyrogram的on_message默认不会捕获自己账号发送的消息,所以无法触发监听channelB的回调。 - 对于其他机器人发送的公开频道消息,可能是因为没有明确过滤机器人消息,或者账号未正确订阅目标频道导致无法接收更新。
解决方案
方案1:直接链式转发(推荐)
不需要绕路监听自己发送到channelB的消息,在处理channelA消息的函数里直接完成向channelB和channelC的转发:
from pyrogram import Client, filters import logging logging.basicConfig(level=logging.INFO) app = Client("my_account") channelA = 'channelA' channelB = 'channelB' channelC = 'channelC' @app.on_message(filters.chat(channelA)) def forward_to_channels(client, message): logging.info(f"Forwarding message from ChannelA: {message.text}") # 同时转发到channelB和channelC message.copy(channelB) message.copy(channelC) # 额外监听channelB中其他机器人发送的消息(非当前账号发的) @app.on_message(filters.chat(channelB) & ~filters.me) def forward_external_to_c(client, message): logging.info(f"Forwarding external bot message from ChannelB: {message.text}") message.copy(channelC) app.run()
方案2:监听自己发送的消息
如果必须通过监听channelB来转发,需要显式添加filters.me过滤器,让on_message捕获当前账号发送的消息:
from pyrogram import Client, filters import logging logging.basicConfig(level=logging.INFO) app = Client("my_account") channelA = 'channelA' channelB = 'channelB' channelC = 'channelC' @app.on_message(filters.chat(channelA)) def forward_to_channelB(client, message): logging.info(f"Forwarding message from ChannelA: {message.text}") message.copy(channelB) # 监听channelB的所有消息:自己发的 + 其他机器人发的 @app.on_message(filters.chat(channelB) & (filters.me | filters.bot)) def forward_to_channelC(client, message): logging.info(f"Forwarding message from ChannelB: {message.text}") message.copy(channelC) app.run()
额外注意事项
- 对于公开频道的机器人消息,确保你的Pyrogram账号已经订阅了该频道,否则无法接收频道更新。
filters.bot可以精准过滤机器人发送的消息,避免捕获普通用户的消息。- 不要依赖
on_raw_update处理这类场景,解析原始MTProto数据会增加不必要的复杂度。
内容的提问来源于stack exchange,提问作者William Adjandra
相关产品推荐
相关产品推荐

