Browse Source

Fix member fetching bugs and context property bug

pull/10109/head
dolfies 3 years ago
parent
commit
073c855292
  1. 2
      discord/guild.py
  2. 40
      discord/state.py
  3. 2
      discord/tracking.py

2
discord/guild.py

@ -528,7 +528,7 @@ class Guild(Hashable):
self.primary_category_id: Optional[int] = guild.get('primary_category_id') self.primary_category_id: Optional[int] = guild.get('primary_category_id')
self._joined_at = guild.get('joined_at') 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) self._large: Optional[bool] = guild.get('large', large)
if (settings := guild.get('settings')) is not None: if (settings := guild.get('settings')) is not None:

40
discord/state.py

@ -281,7 +281,7 @@ class MemberSidebar:
for member in members: for member in members:
guild._add_member(member) guild._add_member(member)
async def wait(self) -> List[Member]: async def wait(self) -> Optional[List[Member]]:
future = self.loop.create_future() future = self.loop.create_future()
self.waiters.append(future) self.waiters.append(future)
try: try:
@ -333,7 +333,7 @@ class MemberSidebar:
self.subscribing = False self.subscribing = False
break break
requests[channel] = ranges requests[channel] = ranges
if not self.subscribing: if not self.subscribing and not requests:
break break
if not requests: if not requests:
@ -363,8 +363,8 @@ class MemberSidebar:
if not self.chunk: # Freeze cache if not self.chunk: # Freeze cache
await ws.request_lazy_guild(guild.id, channels={}) await ws.request_lazy_guild(guild.id, channels={})
else:
self.guild._chunked = True self.guild._chunked = True
async def logging_coroutine(coroutine: Coroutine[Any, Any, T], *, info: str) -> Optional[T]: 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) data = await self.http.get_guild_preview(guild.id)
guild._presence_count = data['approximate_presence_count'] 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( async def scrape_guild(
self, self,
guild: Guild, guild: Guild,
@ -1693,7 +1719,7 @@ class ConnectionState:
force_scraping: bool = False, force_scraping: bool = False,
channels: List[abcSnowflake] = MISSING, channels: List[abcSnowflake] = MISSING,
delay: Union[int, float] = MISSING, delay: Union[int, float] = MISSING,
): ) -> Union[Optional[List[Member]], asyncio.Future[Optional[List[Member]]]]:
if not guild.me: if not guild.me:
await guild.query_members(user_ids=[self.self_id], cache=True) # type: ignore - self_id is always present here 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() request.start()
if wait:
return await request.wait()
return request.get_future() # type: ignore - Honestly, I'm confused too
@overload @overload
async def chunk_guild( async def chunk_guild(
self, guild: Guild, *, wait: Literal[True] = ..., channels: List[abcSnowflake] = ... self, guild: Guild, *, wait: Literal[True] = ..., channels: List[abcSnowflake] = ...

2
discord/tracking.py

@ -216,7 +216,7 @@ class ContextProperties: # Thank you Discord-S.C.U.M
@property @property
def target(self) -> Optional[str]: 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 @property
def guild_id(self) -> Optional[int]: def guild_id(self) -> Optional[int]:

Loading…
Cancel
Save