mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-03-03 19:00:21 +03:00
Fix iter_participants in non-channels
This commit is contained in:
parent
4cc2a17765
commit
6799295115
|
@ -35,6 +35,9 @@ class _ParticipantsIter(RequestIter):
|
||||||
else:
|
else:
|
||||||
self.filter_entity = lambda ent: True
|
self.filter_entity = lambda ent: True
|
||||||
|
|
||||||
|
# Only used for channels, but we should always set the attribute
|
||||||
|
self.requests = []
|
||||||
|
|
||||||
if isinstance(entity, types.InputPeerChannel):
|
if isinstance(entity, types.InputPeerChannel):
|
||||||
self.total = (await self.client(
|
self.total = (await self.client(
|
||||||
functions.channels.GetFullChannelRequest(entity)
|
functions.channels.GetFullChannelRequest(entity)
|
||||||
|
@ -45,21 +48,21 @@ class _ParticipantsIter(RequestIter):
|
||||||
|
|
||||||
self.seen = set()
|
self.seen = set()
|
||||||
if aggressive and not filter:
|
if aggressive and not filter:
|
||||||
self.requests = [functions.channels.GetParticipantsRequest(
|
self.requests.extend(functions.channels.GetParticipantsRequest(
|
||||||
channel=entity,
|
channel=entity,
|
||||||
filter=types.ChannelParticipantsSearch(x),
|
filter=types.ChannelParticipantsSearch(x),
|
||||||
offset=0,
|
offset=0,
|
||||||
limit=_MAX_PARTICIPANTS_CHUNK_SIZE,
|
limit=_MAX_PARTICIPANTS_CHUNK_SIZE,
|
||||||
hash=0
|
hash=0
|
||||||
) for x in (search or string.ascii_lowercase)]
|
) for x in (search or string.ascii_lowercase))
|
||||||
else:
|
else:
|
||||||
self.requests = [functions.channels.GetParticipantsRequest(
|
self.requests.append(functions.channels.GetParticipantsRequest(
|
||||||
channel=entity,
|
channel=entity,
|
||||||
filter=filter or types.ChannelParticipantsSearch(search),
|
filter=filter or types.ChannelParticipantsSearch(search),
|
||||||
offset=0,
|
offset=0,
|
||||||
limit=_MAX_PARTICIPANTS_CHUNK_SIZE,
|
limit=_MAX_PARTICIPANTS_CHUNK_SIZE,
|
||||||
hash=0
|
hash=0
|
||||||
)]
|
))
|
||||||
|
|
||||||
elif isinstance(entity, types.InputPeerChat):
|
elif isinstance(entity, types.InputPeerChat):
|
||||||
full = await self.client(
|
full = await self.client(
|
||||||
|
|
|
@ -47,13 +47,16 @@ class RequestIter(abc.ABC):
|
||||||
|
|
||||||
This method may ``raise StopAsyncIteration`` if it cannot continue.
|
This method may ``raise StopAsyncIteration`` if it cannot continue.
|
||||||
|
|
||||||
This method may actually fill the initial buffer if it needs to.
|
This method may actually fill the initial buffer if it needs to,
|
||||||
|
and similarly to `_load_next_chunk`, ``return True`` to indicate
|
||||||
|
that this is the last iteration (just the initial load).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
async def __anext__(self):
|
async def __anext__(self):
|
||||||
if self.buffer is None:
|
if self.buffer is None:
|
||||||
self.buffer = []
|
self.buffer = []
|
||||||
await self._init(**self.kwargs)
|
if await self._init(**self.kwargs):
|
||||||
|
self.left = len(self.buffer)
|
||||||
|
|
||||||
if self.left <= 0: # <= 0 because subclasses may change it
|
if self.left <= 0: # <= 0 because subclasses may change it
|
||||||
raise StopAsyncIteration
|
raise StopAsyncIteration
|
||||||
|
|
Loading…
Reference in New Issue
Block a user