无需管理员权限使用Telethon获取Telegram频道订阅成员的方案问询
Telegram 无管理员权限获取频道成员列表问题说明
报错原因
你碰到的权限报错是Telegram官方的平台限制,并非Telethon或者API设计缺陷:
- Telegram为了保护用户隐私,早在2021年就调整了API权限规则,非频道管理员的普通账号无法调用
GetParticipantsRequest相关接口拉取频道全量订阅者列表,你收到的ChatAdminRequiredError就是官方明确返回的权限拦截提示 GetFullChannelRequest接口的设计定位就是返回频道基础信息(成员总数、简介、置顶内容、关联讨论组等),本身就不包含具体成员数据,无法通过该接口拿到订阅者列表
无管理员权限的替代实现方案
目前没有方法可以在无管理员权限的前提下拿到频道全量沉默订阅者数据,仅能获取公开可见的活跃用户:
- 采集频道内有公开行为的用户:遍历频道历史消息的发送者、评论区留言用户、内容点赞用户,这些公开行为对应的用户信息不需要管理员权限即可获取,只要你的账号可正常访问该频道内容即可。示例实现逻辑如下:
# 遍历频道历史消息获取发送者 async for message in client.iter_messages(channel, limit=1000): if message.from_id: # 获取发送者用户信息 user = await client.get_entity(message.from_id) print(user.id, user.username, user.first_name) # 如果频道有关联评论区,可遍历讨论组消息获取更多活跃用户 full_channel = await client(GetFullChannelRequest(channel=channel)) if full_channel.full_chat.linked_chat_id: discuss_group = await client.get_entity(full_channel.full_chat.linked_chat_id) async for msg in client.iter_messages(discuss_group, limit=2000): if msg.from_id: user = await client.get_entity(msg.from_id) # 处理用户信息
- 小体量公开频道概率性兼容:部分成员数低于1000的公开频道,部分区域的账号仍可临时调用
get_participants拉取全量成员,但该特性是官方未明确保留的能力,随时可能被限制,不建议作为稳定方案依赖。 - 若必须获取全量订阅者列表,唯一合规稳定的方案是申请对应频道的管理员权限,且分配的管理员角色需要具备「查看成员列表」权限,之后调用
get_participants即可正常返回全量数据。
注意事项
批量采集Telegram用户信息本身违反平台服务条款,高频调用相关接口极容易触发账号风控,导致账号被限制登录或封禁,请按需控制请求频率,自行承担操作风险。
内容的提问来源于stack exchange,提问作者user9102437
相关产品推荐
相关产品推荐

