Telethon的events.NewMessage事件的具体工作原理是什么?
你的猜想完全正确,Telethon 的 events.NewMessage 事件的工作逻辑和你描述的一致。
- 底层协议层面:Telegram 的 MTProto 协议本身就采用服务器主动推送的机制,只要你的账号通过 Telethon 完成和服务器的认证连接,服务器就会把该账号有权限接收的所有实时事件全量推送过来,包括所有加入的私聊、群聊、频道的新消息、消息编辑、成员变动等各类通知,服务器侧不会做提前过滤。
- Telethon 本地处理逻辑:库会先完整接收所有服务器推送的事件,再在本地按照你注册事件监听器时配置的规则做匹配过滤。你可以通过
chats参数指定要监听的会话范围,也可以通过func参数传入自定义的过滤函数,只有完全匹配规则的事件才会触发对应的异步处理函数执行。
你给出的示例代码就是配置了仅匹配私聊场景的新消息,所有非私聊的群聊、频道消息哪怕被推送到本地,也会被过滤掉不会触发对应 handler:
@client.on(events.NewMessage(func=lambda e: e.is_private)) async def handler(event): pass # 仅私聊新消息会进入该函数处理
如果你的需求是监听指定的几个频道或群聊,优先把对应的会话 ID、用户名传入 NewMessage 的 chats 参数即可,Telethon 内部会优先对会话来源做过滤,性能比在 func 里写判断逻辑更高。
内容的提问来源于stack exchange,提问作者novice
相关产品推荐
相关产品推荐

