#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)
вот как вы можете подсчитать количество участников, не будучи администратором