parent
2770137bd6
commit
bfaf8ecfdb
@ -633,7 +633,7 @@ class Guild(Hashable):
|
|||||||
@property
|
@property
|
||||||
def discovery_splash_url(self):
|
def discovery_splash_url(self):
|
||||||
""":class:`Asset`: Returns the guild's discovery splash asset.
|
""":class:`Asset`: Returns the guild's discovery splash asset.
|
||||||
|
|
||||||
.. versionadded:: 1.3.0
|
.. versionadded:: 1.3.0
|
||||||
"""
|
"""
|
||||||
return self.discovery_splash_url_as()
|
return self.discovery_splash_url_as()
|
||||||
@ -1130,7 +1130,7 @@ class Guild(Hashable):
|
|||||||
|
|
||||||
return [convert(d) for d in data]
|
return [convert(d) for d in data]
|
||||||
|
|
||||||
def fetch_members(self, *, limit=1, after=None):
|
def fetch_members(self, *, limit=1000, after=None):
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
|
||||||
Retrieves an :class:`.AsyncIterator` that enables receiving the guild's members.
|
Retrieves an :class:`.AsyncIterator` that enables receiving the guild's members.
|
||||||
@ -1146,8 +1146,8 @@ class Guild(Hashable):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
limit: Optional[:class:`int`]
|
limit: Optional[:class:`int`]
|
||||||
The number of members to retrieve.
|
The number of members to retrieve. Defaults to 1000.
|
||||||
Defaults to 1.
|
Pass ``None`` to fetch all members. Note that this is potentially slow.
|
||||||
after: Optional[Union[:class:`.abc.Snowflake`, :class:`datetime.datetime`]]
|
after: Optional[Union[:class:`.abc.Snowflake`, :class:`datetime.datetime`]]
|
||||||
Retrieve members after this date or object.
|
Retrieve members after this date or object.
|
||||||
If a date is provided it must be a timezone-naive datetime representing UTC time.
|
If a date is provided it must be a timezone-naive datetime representing UTC time.
|
||||||
|
@ -589,7 +589,7 @@ class GuildIterator(_AsyncIterator):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
class MemberIterator(_AsyncIterator):
|
class MemberIterator(_AsyncIterator):
|
||||||
def __init__(self, guild, limit=1, after=None):
|
def __init__(self, guild, limit=1000, after=None):
|
||||||
|
|
||||||
if isinstance(after, datetime.datetime):
|
if isinstance(after, datetime.datetime):
|
||||||
after = Object(id=time_snowflake(after, high=True))
|
after = Object(id=time_snowflake(after, high=True))
|
||||||
@ -611,16 +611,30 @@ class MemberIterator(_AsyncIterator):
|
|||||||
except asyncio.QueueEmpty:
|
except asyncio.QueueEmpty:
|
||||||
raise NoMoreItems()
|
raise NoMoreItems()
|
||||||
|
|
||||||
|
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):
|
async def fill_members(self):
|
||||||
if self.limit > 0:
|
if self._get_retrieve():
|
||||||
retrieve = self.limit if self.limit <= 1000 else 1000
|
|
||||||
|
|
||||||
after = self.after.id if self.after else None
|
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:
|
if len(data) < 1000:
|
||||||
self.limit -= retrieve
|
self.limit = 0 # terminate loop
|
||||||
self.after = Object(id=int(data[-1]['user']['id']))
|
|
||||||
|
self.after = Object(id=int(data[-1]['user']['id']))
|
||||||
|
|
||||||
for element in reversed(data):
|
for element in reversed(data):
|
||||||
await self.members.put(self.create_member(element))
|
await self.members.put(self.create_member(element))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user