You need to enable JavaScript to run this app. 如何使用Telethon查询Telegram频道的成员加入情况
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Telethon查询Telegram频道的成员加入情况

Telethon 查询频道成员的实现方法

前置权限说明

  • 所有接口的调用都受Telegram服务端权限约束:没有频道管理权限的账号,最多只能拉取公开频道的前200个可见成员,无法获取完整列表,这是平台规则限制,SDK层面无法绕过。
  • 很多人找不到你说的对应方法,本质是把两类同属频道管理范畴的能力搞混了:一类是拉取当前频道的所有现存成员列表,另一类是拉取频道操作日志里的成员加入/退出动态,也就是你提到的“channel actions”对应的能力,两类能力对应完全不同的接口,没有统一的隐藏访问入口。

拉取全量现存成员的实现

这个是最常用的需求,核心调用的是GetParticipantsRequest接口,没有隐藏入口,按标准流程写即可:

  1. 先完成Telethon客户端的授权初始化,确保本地会话对目标账号有效
  2. 获取目标频道的实体对象:entity = await client.get_entity('目标频道的用户名/公开链接/内部ID')
  3. 分页拉取所有成员,因为单次请求最多返回200条结果,必须循环翻页才能拿全:
from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl.types import ChannelParticipantsSearch

offset = 0
batch_limit = 200
all_members = []

while True:
    # 空的搜索过滤条件代表匹配所有类型的成员,不做关键词筛选
    batch = await client(GetParticipantsRequest(
        channel=entity,
        filter=ChannelParticipantsSearch(''),
        offset=offset,
        limit=batch_limit,
        hash=0
    ))
    if not batch.users:
        break
    all_members.extend(batch.users)
    offset += len(batch.users)

拉取频道操作日志里的成员动态(对应channel actions能力)

如果你的需求是查谁什么时候加入频道、谁被移出频道这类流水记录,需要调用频道专属的操作日志接口,这个接口仅频道管理员有权限调用:

from telethon.tl.functions.channels import GetRecentActionsRequest

# 从最新的记录开始拉取,max_id设为0代表触发服务端从最旧的操作记录开始遍历
action_records = await client(GetRecentActionsRequest(
    channel=entity,
    max_id=0
))
# 返回的records列表里会包含所有成员加入、退出、权限变更的全量操作流水

常见踩坑提示

  • 不要直接用Telethon封装的client.get_participants()便捷方法拉取万人大频道,这个方法默认的分页参数经常会导致结果拉不全,手动按上面的循环逻辑实现更稳定。
  • 如果调用接口返回权限错误,先检查当前登录账号是不是目标频道的管理员,普通成员身份是拿不到操作日志和完整成员列表的。

内容的提问来源于stack exchange,提问作者barzu rustami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 21:24:03