diff --git a/discord/guild.py b/discord/guild.py index caf0fe8c2..33f1b2a1c 100644 --- a/discord/guild.py +++ b/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| diff --git a/discord/http.py b/discord/http.py index d68b20050..5f9079765 100644 --- a/discord/http.py +++ b/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))