diff options
| author | Rapptz <[email protected]> | 2020-01-12 02:44:09 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2020-01-12 02:44:16 -0500 |
| commit | bfaf8ecfdb2323f66f95b61d32e6b87277d4616a (patch) | |
| tree | fafc706fa8d8c083b59526a965e14dbaa677c47a /discord/iterators.py | |
| parent | Redesign permissions to allow aliases to be used. (diff) | |
| download | discord.py-bfaf8ecfdb2323f66f95b61d32e6b87277d4616a.tar.xz discord.py-bfaf8ecfdb2323f66f95b61d32e6b87277d4616a.zip | |
Allow Guild.fetch_members to take in limit=None
Fixes #2473
Diffstat (limited to 'discord/iterators.py')
| -rw-r--r-- | discord/iterators.py | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/discord/iterators.py b/discord/iterators.py index 556e41ca..b555daa5 100644 --- a/discord/iterators.py +++ b/discord/iterators.py @@ -589,7 +589,7 @@ class GuildIterator(_AsyncIterator): return data class MemberIterator(_AsyncIterator): - def __init__(self, guild, limit=1, after=None): + def __init__(self, guild, limit=1000, after=None): if isinstance(after, datetime.datetime): after = Object(id=time_snowflake(after, high=True)) @@ -611,16 +611,30 @@ class MemberIterator(_AsyncIterator): except asyncio.QueueEmpty: raise NoMoreItems() - async def fill_members(self): - if self.limit > 0: - retrieve = self.limit if self.limit <= 1000 else 1000 + def _get_retrieve(self): + l = self.limit + if l is None: + r = 1000 + elif l <= 1000: + r = l + else: + r = 1000 + 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, retrieve, after) + data = await self.get_members(self.guild.id, self.retrieve, after) + if not data: + # no data, terminate + return - if data: - self.limit -= retrieve - self.after = Object(id=int(data[-1]['user']['id'])) + 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)) |