diff --git a/src/twitchclient/api.py b/src/twitchclient/api.py index 941e7f8..54830df 100644 --- a/src/twitchclient/api.py +++ b/src/twitchclient/api.py @@ -975,3 +975,83 @@ class TwitchAPIClient(AioHTTPXClient): case _: raise s.Error(req.status_code, 'Internal Server Error') + + async def update_chat_settings( + self, + access_token: str, + broadcaster_id: int | str, + moderator_id: int | str, + *, + emote_mode: bool | None = None, + follower_mode: bool | None = None, + follower_mode_duration: int | None = None, + non_moderator_chat_delay: bool | None = None, + non_moderator_chat_delay_duration: Literal[2, 4, 6] | None = None, + slow_mode: bool | None = None, + slow_mode_wait_time: int | None = None, + subscriber_mode: bool | None = None, + unique_chat_mode: bool | None = None, + ): + req = await self.put( + '/chat/settings', + headers={'Authorization': f'Bearer {access_token}'}, + params={ + 'broadcaster_id': broadcaster_id, + 'moderator_id': moderator_id, + }, + json=self.clean_dict( + { + 'emote_mode': emote_mode, + 'follower_mode': follower_mode, + 'follower_mode_duration': follower_mode_duration, + 'non_moderator_chat_delay': non_moderator_chat_delay, + 'non_moderator_chat_delay_duration': ( + non_moderator_chat_delay_duration + ), + 'slow_mode': slow_mode, + 'slow_mode_wait_time': slow_mode_wait_time, + 'subscriber_mode': subscriber_mode, + 'unique_chat_mode': unique_chat_mode, + } + ), + ) + + match req.status_code: + case st.OK: + return s.ChatSettings.model_validate(req.json()).data + + 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') + + async def send_chat_announcement( + self, + access_token: str, + broadcaster_id: int | str, + moderator_id: int | str, + message: str, + color: Literal[ + 'blue', 'green', 'orange', 'purple', 'primary' + ] = 'primary', + ): + req = await self.post( + '/chat/announcements', + headers={'Authorization': f'Bearer {access_token}'}, + params={ + 'broadcaster_id': broadcaster_id, + 'moderator_id': moderator_id, + }, + json=self.clean_dict({'message': message, 'color': color}), + ) + + match req.status_code: + case st.NO_CONTENT: + return True + + case st.BAD_REQUEST | st.UNAUTHORIZED | st.TOO_MANY_REQUESTS: + raise s.Error(req.status_code, req.json()['message']) + + case _: + raise s.Error(req.status_code, 'Internal Server Error')