Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2022 00:46:06

gandonio
Зарегистрирован: 2022-10-16
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

Добрый день.

Продолжая изучать библиотеку telethon наткнулся на метод GetParticipantsRequest, который, по логике, должен отдавать объект класса ChannelParticipants, который имеет в себе переменную users, состоящую из списка юзеров канала. Набросав вот такой код:

from telethon import functions, types
from telethon.sync import TelegramClient

with TelegramClient("name", api_id, api_hash) as client:
result = client(functions.channels.GetParticipantsRequest(
channel=channel_username,
filter=types.ChannelParticipantsRecent(),
offset=1,
limit=200,
hash=0
))
users = [i for i in result.users]
Я получаю список, состоящий из информации о пользователях канала. Но только о 199, когда мне нужны все. Много раз пробовал менять аргументы offset и limit, но так и не получил желаемого результата. Прошу помочь разобраться с этим методом.

Офлайн

#2 Окт. 31, 2022 11:36:21

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

https://telethonn.readthedocs.io/en/latest/extra/examples/chats-and-channels.html#retrieving-all-chat-members-channels-too



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Ноя. 1, 2022 00:18:04

gandonio
Зарегистрирован: 2022-10-16
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

ZerG
https://telethonn.readthedocs.io/en/latest/extra/examples/chats-and-channels.html#retrieving-all-chat-members-channels-too
Благодаря информации по ссылке, которой вы со мной поделились, я написал такую функцию:
def get_users_from_channel(client, channel_username):
offset = 0
limit = 100
all_participants = []

while True:
participants = client(GetParticipantsRequest(
channel_username, ChannelParticipantsSearch(''), offset, limit,
hash=0
))
if not participants.users:
break
all_participants.extend(participants.users)
offset += len(participants.users)

return all_participants
Однако когда я передаю ей юзернэйм канала, она собирает только 201 подписчика из 291. Может, я допустил где-либо ошибку?

Отредактировано gandonio (Ноя. 1, 2022 00:18:56)

Офлайн

#4 Ноя. 1, 2022 10:29:07

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

наверное стоит увеличить лимит?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Ноя. 1, 2022 23:36:16

gandonio
Зарегистрирован: 2022-10-16
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

ZerG
наверное стоит увеличить лимит?

Простите за тупость, но я так и не смог получить всех 291 пользователей из канала, меняя лимит с 100 на 150, 200, 250 и так далее до 500. Не могли бы объяснить за этот лимит?

Офлайн

#6 Ноя. 2, 2022 13:02:49

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Метод GetParticipantsRequest внутри библиотеки Telethon

К сожалению не могу - тут вопрос к автороам этой говнолибы
Но могу посоветовать использовать либы которые рекомендует сам телеграм
https://core.telegram.org/bots/samples#python

Думаю с ними будем много проще.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version