Телемарафон получает участников канала без прав администратора

#python #python-3.x #telegram #telethon

Вопрос:

Я использую telethon для обработки клиента в пользовательском приложении. Что я хотел бы сделать, так это показать список людей, подписанных на определенный канал telegram. Вот настройка:

 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 был создан именно для создания пользовательских клиентов, но как это возможно, если базовая функциональность не может быть реализована? Кто-нибудь может дать совет, как этого добиться? Может быть, другой способ получения таких данных?

Комментарии:

1. Если официальный клиент не предоставляет функциональность, это, скорее всего, из-за ограничения API. Ни одно приложение не может обойти ограничения API Telegram.

2. @Lonami но Telegram является открытым исходным кодом, что означает, что они используют тот же API, что и любое другое приложение, например, Telegram X. И они оба МОГУТ отображать список пользователей группы. imgur.com/a/Z8sES83

3. Сервер не является открытым исходным кодом. Однако, если Telegram X может это сделать, то Telethon тоже может это сделать. Но это может быть и другой метод.

Ответ №1:

Хорошо, итак, я действительно перепутал терминологию здесь. Telegram не показывает участника канала даже в официальном приложении (если вы не администратор), однако для групп этот get_participants метод отлично работает

Комментарии:

1. По-прежнему не возвращает всех участников супергруппы : (

Ответ №2:

 async for dialog in client.iter_dialogs():
        if  dialog.is_channel:
       
            print( dialog.entity.participants_count)
 

вот как вы можете подсчитать количество участников, не будучи администратором