mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-09 08:00:53 +03:00
Return correct total participant count when a filter is desired
This commit is contained in:
parent
1036c3cb52
commit
6e9ad9e31c
|
@ -225,6 +225,16 @@ The "aggressive" hack in ``get_participants`` (and ``iter_participants``) is now
|
|||
It was not reliable, and was a cause of flood wait errors.
|
||||
|
||||
|
||||
The total value when getting participants has changed
|
||||
-----------------------------------------------------
|
||||
|
||||
Before, it used to always be the total amount of people inside the chat. Now the filter is also
|
||||
considered. If you were running ``client.get_participants`` with a ``filter`` other than the
|
||||
default and accessing the ``list.total``, you will now get a different result. You will need to
|
||||
perform a separate request with no filter to fetch the total without filter (this is what the
|
||||
library used to do).
|
||||
|
||||
|
||||
The TelegramClient is no longer made out of mixins
|
||||
--------------------------------------------------
|
||||
|
||||
|
|
|
@ -184,27 +184,8 @@ class _ParticipantsIter(requestiter.RequestIter):
|
|||
if self.request.offset > self.limit:
|
||||
return True
|
||||
|
||||
if self.total is None:
|
||||
f = self.request.filter
|
||||
if (
|
||||
not isinstance(f, _tl.ChannelParticipantsRecent)
|
||||
and (not isinstance(f, _tl.ChannelParticipantsSearch) or f.q)
|
||||
):
|
||||
# Only do an additional getParticipants here to get the total
|
||||
# if there's a filter which would reduce the real total number.
|
||||
# getParticipants is cheaper than getFull.
|
||||
self.total = (await self.client(_tl.fn.channels.GetParticipants(
|
||||
channel=self.request.channel,
|
||||
filter=_tl.ChannelParticipantsRecent(),
|
||||
offset=0,
|
||||
limit=1,
|
||||
hash=0
|
||||
))).count
|
||||
|
||||
participants = await self.client(self.request)
|
||||
if self.total is None:
|
||||
# Will only get here if there was one request with a filter that matched all users.
|
||||
self.total = participants.count
|
||||
self.total = participants.count
|
||||
|
||||
self.request.offset += len(participants.participants)
|
||||
users = {user.id: user for user in participants.users}
|
||||
|
|
Loading…
Reference in New Issue
Block a user