From 78ccafc35fe03f5abecb01ab479a263ec5e18b37 Mon Sep 17 00:00:00 2001 From: dolfies Date: Sat, 6 Nov 2021 19:11:37 -0400 Subject: [PATCH] Migrate iterators.py --- discord/iterators.py | 66 +++----------------------------------------- 1 file changed, 4 insertions(+), 62 deletions(-) diff --git a/discord/iterators.py b/discord/iterators.py index f725d527e..83eef3348 100644 --- a/discord/iterators.py +++ b/discord/iterators.py @@ -38,7 +38,6 @@ __all__ = ( 'HistoryIterator', 'AuditLogIterator', 'GuildIterator', - 'MemberIterator', ) if TYPE_CHECKING: @@ -504,9 +503,7 @@ class GuildIterator(_AsyncIterator['Guild']): 100 guilds, update the ``before`` parameter to the oldest guild received. Guilds will be returned in order by time. If `after` is specified, it returns the ``limit`` oldest guilds after ``after``, - sorted with newest first. For filling over 100 guilds, update the ``after`` - parameter to the newest guild received, If guilds are not reversed, they - will be out of order (99-0, 199-100, so on) + sorted with newest first. Not that if both ``before`` and ``after`` are specified, ``before`` is ignored by the guilds endpoint. @@ -524,7 +521,6 @@ class GuildIterator(_AsyncIterator['Guild']): """ def __init__(self, bot, limit, before=None, after=None): - if isinstance(before, datetime.datetime): before = Object(id=time_snowflake(before, high=False)) if isinstance(after, datetime.datetime): @@ -560,8 +556,8 @@ class GuildIterator(_AsyncIterator['Guild']): def _get_retrieve(self): l = self.limit - if l is None or l > 100: - r = 100 + if l is None or l > 200: + r = 200 else: r = l self.retrieve = r @@ -575,7 +571,7 @@ class GuildIterator(_AsyncIterator['Guild']): async def fill_guilds(self): if self._get_retrieve(): data = await self._retrieve_guilds(self.retrieve) - if self.limit is None or len(data) < 100: + if self.limit is None or len(data) < 200: self.limit = 0 if self._filter: @@ -609,60 +605,6 @@ class GuildIterator(_AsyncIterator['Guild']): return data -class MemberIterator(_AsyncIterator['Member']): - def __init__(self, guild, limit=1000, after=None): - - if isinstance(after, datetime.datetime): - after = Object(id=time_snowflake(after, high=True)) - - self.guild = guild - self.limit = limit - self.after = after or OLDEST_OBJECT - - self.state = self.guild._state - self.get_members = self.state.http.get_members - self.members = asyncio.Queue() - - async def next(self) -> Member: - if self.members.empty(): - await self.fill_members() - - try: - return self.members.get_nowait() - except asyncio.QueueEmpty: - raise NoMoreItems() - - def _get_retrieve(self): - l = self.limit - if l is None or l > 1000: - r = 1000 - else: - r = l - self.retrieve = r - return r > 0 - - async def fill_members(self): - if self._get_retrieve(): - after = self.after.id if self.after else None - data = await self.get_members(self.guild.id, self.retrieve, after) - if not data: - # no data, terminate - return - - if len(data) < 1000: - self.limit = 0 # terminate loop - - self.after = Object(id=int(data[-1]['user']['id'])) - - for element in reversed(data): - await self.members.put(self.create_member(element)) - - def create_member(self, data): - from .member import Member - - return Member(data=data, guild=self.guild, state=self.state) - - class ArchivedThreadIterator(_AsyncIterator['Thread']): def __init__( self,