diff --git a/discord/guild.py b/discord/guild.py index 3600e2fae..37f16e756 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -2745,6 +2745,30 @@ class Guild(Hashable): data = await self._state.http.create_guild_scheduled_event(self.id, **payload, reason=reason) return ScheduledEvent(state=self._state, data=data) + async def top_emojis(self) -> List[Union[Emoji, PartialEmoji]]: + """|coro| + + Retrieves the most used custom emojis in the guild. + + .. versionadded:: 2.0 + + Raises + ------- + HTTPException + Retrieving the top emojis failed. + + Returns + -------- + List[Union[:class:`Emoji`, :class:`PartialEmoji`]] + The most used emojis. Falls back to a bare :class:`PartialEmoji` if the emoji is not found in cache. + """ + state = self._state + data = await state.http.get_top_emojis(self.id) + return [ + self._state.get_emoji(int(e['emoji_id'])) or PartialEmoji.with_state(state, name='', id=int(e['emoji_id'])) + for e in data['items'] + ] + async def fetch_emojis(self) -> List[Emoji]: r"""|coro| diff --git a/discord/http.py b/discord/http.py index 4df206b31..811c26cd2 100644 --- a/discord/http.py +++ b/discord/http.py @@ -1614,6 +1614,9 @@ class HTTPClient: def get_custom_emoji(self, guild_id: Snowflake, emoji_id: Snowflake) -> Response[emoji.Emoji]: return self.request(Route('GET', '/guilds/{guild_id}/emojis/{emoji_id}', guild_id=guild_id, emoji_id=emoji_id)) + def get_top_emojis(self, guild_id: Snowflake) -> Response[emoji.TopEmojis]: + return self.request(Route('GET', '/guilds/{guild_id}/top-emojis', guild_id=guild_id)) + def get_emoji_guild(self, emoji_id: Snowflake) -> Response[guild.Guild]: return self.request(Route('GET', '/emojis/{emoji_id}', emoji_id=emoji_id)) diff --git a/discord/types/emoji.py b/discord/types/emoji.py index d54690c14..892df3a22 100644 --- a/discord/types/emoji.py +++ b/discord/types/emoji.py @@ -22,7 +22,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -from typing import Optional, TypedDict +from typing import List, Optional, TypedDict from .snowflake import Snowflake, SnowflakeList from .user import User @@ -44,3 +44,12 @@ class Emoji(PartialEmoji, total=False): class EditEmoji(TypedDict): name: str roles: Optional[SnowflakeList] + + +class TopEmoji(TypedDict): + emoji_id: Snowflake + emoji_rank: int + + +class TopEmojis(TypedDict): + items: List[TopEmoji]