如何获取Telegram群组全部成员?Pyrogram返回不全问题排查
解决Pyrogram获取Telegram全部群成员的问题
问题原因
Telegram API本身对单次获取群成员的数量有限制,默认请求只会返回少量成员(如管理员、近期活跃成员),而非全部。即使使用iter_chat_members,若未正确处理分页逻辑,也无法获取完整成员列表。
解决方案
要获取全部群成员,需通过分页遍历的方式,结合offset参数分批请求,直到没有更多成员返回。同时确保你的账号(普通账号/机器人)拥有查看群成员的权限。
以下是修改后的代码:
from pyrogram import Client from pyrogram.enums import ChatMembersFilter # Target supergroup ID或用户名 TARGET = "your_group_id_or_username" app = Client("my_account", api_id=api_id, api_hash=api_hash) async def main(): async with app: offset = 0 limit = 200 # Telegram API单次最大返回200条,不可超过此值 while True: members = await app.get_chat_members( chat_id=TARGET, offset=offset, limit=limit, filter=ChatMembersFilter.ALL # 指定获取全类型成员 ) if not members: break # 无更多成员时终止循环 for member in members: if member.user: # 过滤无效用户项 print(member.user.id) offset += len(members) # 更新偏移量,继续获取下一批成员 app.run(main())
关键注意事项
- 权限验证:确保你的账号是群内成员,且群组未限制非管理员查看成员列表(部分私密群可能仅允许管理员查看全部成员)。
- 频率限制:Telegram API存在请求频率限制,Pyrogram会自动处理基础限流,但针对超大型群组仍需避免短时间内发起过多请求。
- 参数说明:
limit:单次请求最大返回200个成员,这是Telegram API的硬性上限。filter:设置为ChatMembersFilter.ALL可确保获取管理员、普通成员、受限成员等全类型群成员。
内容的提问来源于stack exchange,提问作者Verese404
相关产品推荐
相关产品推荐

