【问题标题】:Telethon get channel participants without admin privilagesTelethon 获取没有管理员权限的频道参与者
【发布时间】:2021-10-20 19:20:36
【问题描述】:

我正在使用 Telethon 来处理自定义应用程序上的客户端。我想做的是显示订阅某个电报频道的人的列表。这是设置:

from telethon import TelegramClient, events, sync

api_id = 8045283
api_hash = 'ad63dec5ee12u8baca534620d5b3d725' #not real btw
client = TelegramClient('name', api_id, api_hash)
await client.start()

在这之后我尝试了类似client.get_participants(channel)的函数,它返回错误:

ChatAdminRequiredError: Chat admin privileges are required to do that in the specified chat (for example, to send a message in a channel which is not yours), or invalid permissions used for the channel or group (caused by GetParticipantsRequest)

还有await client(GetFullChannelRequest(channel=channel)),只是没有所需的信息。

我认为创建此 API 正是为了创建自定义客户端,但如果无法实现基本功能,这怎么可能呢?任何人都可以就如何实现这一目标提出建议吗?也许是另一种获取此类数据的方式?

【问题讨论】:

  • 如果官方客户端没有提供该功能,很可能是因为API限制。任何应用程序都无法绕过 Telegram API 的限制。
  • @Lonami 但 Telegram 是开源的,这意味着它们使用与 Telegram X 等任何其他应用程序相同的 API。他们都可以显示组用户列表。 imgur.com/a/Z8sES83
  • 服务器不是开源的。但是,如果 Telegram X 能做到,那么 Telethon 也能做到。但这可能是一种不同的方法。

标签: python python-3.x telegram telethon


【解决方案1】:
async for dialog in client.iter_dialogs():
        if  dialog.is_channel:
       
            print( dialog.entity.participants_count)

这就是您无需成为管理员即可获得参与者数量的方法

【讨论】:

    【解决方案2】:

    好的,所以我实际上在这里混淆了术语。即使在官方应用程序上,Telegram 也不会显示频道的参与者(如果您不是管理员),但是,对于群组,get_participants 方法效果很好

    【讨论】:

    • 仍然没有返回一个超级组的所有参与者:(
    【解决方案3】:

    除了接受的答案:您可以尝试为组使用aggressive 参数。

    client.get_participants(channel, aggressive=True)
    

    将参数设置为 True 否则您将不会获得超过 10k 的成员。当aggressive 设置为true 时,Telethon 将在组的参与者中执行a-z 搜索,它通常会提取超过90% 的成员。

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2014-02-04
      相关资源
      最近更新 更多