From 073c85529250e0961e0f8b9dc9f7f54c4aef1f54 Mon Sep 17 00:00:00 2001 From: dolfies Date: Sat, 2 Apr 2022 18:49:42 -0400 Subject: [PATCH] Fix member fetching bugs and context property bug --- discord/guild.py | 2 +- discord/state.py | 40 +++++++++++++++++++++++++++++++++++----- discord/tracking.py | 2 +- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/discord/guild.py b/discord/guild.py index dc1e3d651..1e667a300 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -528,7 +528,7 @@ class Guild(Hashable): self.primary_category_id: Optional[int] = guild.get('primary_category_id') self._joined_at = guild.get('joined_at') - large = None if self._member_count is 0 else self._member_count >= 250 + large = None if self._member_count == 0 else self._member_count >= 250 self._large: Optional[bool] = guild.get('large', large) if (settings := guild.get('settings')) is not None: diff --git a/discord/state.py b/discord/state.py index fdc1ad171..819aa0a78 100644 --- a/discord/state.py +++ b/discord/state.py @@ -281,7 +281,7 @@ class MemberSidebar: for member in members: guild._add_member(member) - async def wait(self) -> List[Member]: + async def wait(self) -> Optional[List[Member]]: future = self.loop.create_future() self.waiters.append(future) try: @@ -333,7 +333,7 @@ class MemberSidebar: self.subscribing = False break requests[channel] = ranges - if not self.subscribing: + if not self.subscribing and not requests: break if not requests: @@ -363,8 +363,8 @@ class MemberSidebar: if not self.chunk: # Freeze cache await ws.request_lazy_guild(guild.id, channels={}) - - self.guild._chunked = True + else: + self.guild._chunked = True async def logging_coroutine(coroutine: Coroutine[Any, Any, T], *, info: str) -> Optional[T]: @@ -1684,6 +1684,32 @@ class ConnectionState: data = await self.http.get_guild_preview(guild.id) guild._presence_count = data['approximate_presence_count'] + @overload + async def scrape_guild( + self, + guild: Guild, + *, + wait: bool = True, + cache: bool, + force_scraping: bool = ..., + channels: List[abcSnowflake] = ..., + delay: Union[int, float] = ..., + ) -> Optional[List[Member]]: + ... + + @overload + async def scrape_guild( + self, + guild: Guild, + *, + wait: bool = False, + cache: bool, + force_scraping: bool = ..., + channels: List[abcSnowflake] = ..., + delay: Union[int, float] = ..., + ) -> asyncio.Future[Optional[List[Member]]]: + ... + async def scrape_guild( self, guild: Guild, @@ -1693,7 +1719,7 @@ class ConnectionState: force_scraping: bool = False, channels: List[abcSnowflake] = MISSING, delay: Union[int, float] = MISSING, - ): + ) -> Union[Optional[List[Member]], asyncio.Future[Optional[List[Member]]]]: if not guild.me: await guild.query_members(user_ids=[self.self_id], cache=True) # type: ignore - self_id is always present here @@ -1719,6 +1745,10 @@ class ConnectionState: ) request.start() + if wait: + return await request.wait() + return request.get_future() # type: ignore - Honestly, I'm confused too + @overload async def chunk_guild( self, guild: Guild, *, wait: Literal[True] = ..., channels: List[abcSnowflake] = ... diff --git a/discord/tracking.py b/discord/tracking.py index 055dd15e6..902c72c42 100644 --- a/discord/tracking.py +++ b/discord/tracking.py @@ -216,7 +216,7 @@ class ContextProperties: # Thank you Discord-S.C.U.M @property def target(self) -> Optional[str]: - return self._data.get('location', data.get('source')) # type: ignore + return self._data.get('location', self._data.get('source')) # type: ignore @property def guild_id(self) -> Optional[int]: