Telethon监听部分Telegram群聊无输出及监听数量、速率限制咨询
部分群聊无监听响应的原因及解决方案
- 聊天实体匹配错误
你直接向chats参数传入字符串用户名的方式,依赖Telethon在线解析用户名对应聊天ID,以下场景会导致匹配失败:
- 目标群未设置公开用户名,或设置了禁止通过用户名搜索查找
- 存在多个同名聊天,解析到了你未加入的其他同名聊天
- 当前登录的账号尚未加入目标群,无权限获取群消息
解决方法:先主动获取实体确认匹配正确性,优先使用聊天ID作为参数,示例代码如下:
- 聊天实体匹配错误
# 先运行这行确认获取的是目标群 target_chat = await client.get_entity('FEGchat') print(target_chat.id, target_chat.title) # 核对ID和群名称 # 监听时直接传获取到的实体或ID @client.on(events.NewMessage(chats=[target_chat.id])) async def my_event_handler(event): print(event.raw_text)
- 账号权限或限制问题
- 目标群对新加入成员设置了查看消息的时间限制,你刚入群时无法收到入群前的消息,也可能被限制接收实时消息
- 当前使用的Telegram账号被官方施加了功能限制,无法接收部分群的推送,可手动登录Telegram官方客户端,确认能否正常接收目标群的新消息
- 目标群开启了严格的隐私限制,禁止非管理员/特定成员接收消息类的推送,这种场景下普通账号无法监听群消息
监听数量上限与速率限制说明
- 同时监听的聊天数量上限
Telethon的NewMessage事件的过滤逻辑是在本地完成的,所有你账号能收到的消息都会先推送到本地客户端,再按你设置的规则过滤。因此监听上限等同于Telegram账号的加群/频道上限:普通账号最多可加入500个群和频道,Premium账号最多可加入1000个,只要是你账号加入的聊天,都可以同时监听,没有额外的技术限制。 - 速率限制说明
- 消息推送无主动速率限制:Telegram官方对实时消息的推送没有明确的速率限制,只要是正常推送给你账号的消息,都可以稳定接收,不会因为群消息量大就被限流
- 主动请求有速率限制:如果你在事件回调函数中执行主动请求操作(比如查询用户信息、发送消息、上传下载文件等),需要遵守官方的请求频率限制,普通请求建议控制在每秒1次以内,短时间内连续请求超过30次大概率会触发洪水限制,限制时长从几十秒到24小时不等,批量操作建议添加固定时间间隔规避限制。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

