From 3c6154913a7f30dfb52b99a3db5a160122ef4b7a Mon Sep 17 00:00:00 2001 From: Miwory Date: Thu, 11 Dec 2025 16:21:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20get=5Fchannel=5Fchat=5Fbadges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/twitchclient/api.py | 27 +++++++++++++++++++++++++++ src/twitchclient/schema.py | 26 ++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/twitchclient/api.py b/src/twitchclient/api.py index ccfd329..cd0e82b 100644 --- a/src/twitchclient/api.py +++ b/src/twitchclient/api.py @@ -822,3 +822,30 @@ class TwitchAPIClient(AioHTTPXClient): case _: raise s.Error(req.status_code, 'Internal Server Error') + + async def get_channel_chat_badges( + self, + access_token: str, + broadcaster_id: int | str, + cache_time: int | None = None, + ): + req = await self.get( + '/chat/badges', + headers=self.clean_dict( + { + 'Authorization': f'Bearer {access_token}', + 'X-Cache-TTL': cache_time, + } + ), + params={'broadcaster_id': broadcaster_id}, + ) + + match req.status_code: + case st.OK: + return s.ChannelChatBadges.model_validate(req.json()) + + case st.BAD_REQUEST | st.UNAUTHORIZED: + raise s.Error(req.status_code, req.json()['message']) + + case _: + raise s.Error(req.status_code, 'Internal Server Error') diff --git a/src/twitchclient/schema.py b/src/twitchclient/schema.py index 6c84e4c..5c20c5c 100644 --- a/src/twitchclient/schema.py +++ b/src/twitchclient/schema.py @@ -511,3 +511,29 @@ class GlobalEmotes(ChannelEmotes): class EmoteSets(ChannelEmotes): pass + + +class ChannelChatBadgesVersion(BaseModel): + model_config = ConfigDict(extra='forbid') + + id: str + image_url_1x: str + image_url_2x: str + image_url_4x: str + title: str + description: str + click_action: str | None + click_url: str | None + + +class ChannelChatBadgesData(BaseModel): + model_config = ConfigDict(extra='forbid') + + set_id: str + versions: list[ChannelChatBadgesVersion] + + +class ChannelChatBadges(BaseModel): + model_config = ConfigDict(extra='forbid') + + data: list[ChannelChatBadgesData]