Browse Source

Implement top guild channel fetching

pull/10109/head
dolfies 2 years ago
parent
commit
2ea3dbec06
  1. 25
      discord/guild.py
  2. 3
      discord/http.py

25
discord/guild.py

@ -2264,6 +2264,31 @@ class Guild(Hashable):
data = await http.edit_guild(self.id, reason=reason, **fields)
return Guild(data=data, state=self._state)
async def top_channels(self) -> List[Union[TextChannel, VoiceChannel, StageChannel, PartialMessageable]]:
"""|coro|
Retrieves the top 10 most read channels in the guild. Channels are returned in order of descending usage.
.. note::
For guilds without many members, this may return an empty list.
.. versionadded:: 2.1
Raises
-------
HTTPException
Retrieving the top channels failed.
Returns
--------
List[Union[:class:`TextChannel`, :class:`VoiceChannel`, :class:`StageChannel`]]
The top 10 most read channels. Falls back to :class:`PartialMessageable` if the channel is not found in cache.
"""
state = self._state
data = await state.http.get_top_guild_channels(self.id)
return [self.get_channel(int(c)) or PartialMessageable(id=int(c), state=state, guild_id=self.id) for c in data] # type: ignore
async def fetch_channels(self) -> Sequence[GuildChannel]:
"""|coro|

3
discord/http.py

@ -1824,6 +1824,9 @@ class HTTPClient:
def get_all_guild_channels(self, guild_id: Snowflake) -> Response[List[guild.GuildChannel]]:
return self.request(Route('GET', '/guilds/{guild_id}/channels', guild_id=guild_id))
def get_top_guild_channels(self, guild_id: Snowflake) -> Response[List[Snowflake]]:
return self.request(Route('GET', '/guilds/{guild_id}/top-read-channels', guild_id=guild_id))
def get_member(self, guild_id: Snowflake, member_id: Snowflake) -> Response[member.MemberWithUser]:
return self.request(Route('GET', '/guilds/{guild_id}/members/{member_id}', guild_id=guild_id, member_id=member_id))

Loading…
Cancel
Save