From 45731bda8023e954c1d5409133bcc7fb754e9a55 Mon Sep 17 00:00:00 2001 From: BreadTube Date: Mon, 18 May 2026 23:27:34 +0900 Subject: [PATCH] Fix discord list_by_channel API call --- breadtube_bot/api.py | 11 +++++++---- breadtube_bot/discord_manager.py | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/breadtube_bot/api.py b/breadtube_bot/api.py index eceac7a..c152522 100644 --- a/breadtube_bot/api.py +++ b/breadtube_bot/api.py @@ -135,16 +135,19 @@ class Api: def delete(channel_id: int, message_id: int) -> tuple[ApiAction, str]: return ApiAction.DELETE, f'/channels/{channel_id}/messages/{message_id}' - @staticmethod - def list_by_channel(channel_id: int) -> tuple[ApiAction, str]: - return ApiAction.GET, f'/channels/{channel_id}/messages' - class ListMessageParams(TypedDict, total=False): around: int # Get messages around this message ID before: int # Get messages before this message ID after: int # Get messages after this message ID limit: int # Max number of messages to return (1-100), default=50 + @staticmethod + def list_by_channel(channel_id: int, params: ListMessageParams | None = None) -> tuple[ApiAction, str]: + url = f'/channels/{channel_id}/messages' + if params: + url += f"?{'&'.join([f'{k}={v}' for k, v in params.items()])}" + return ApiAction.GET, url + class User: @staticmethod def get_current() -> tuple[ApiAction, str]: diff --git a/breadtube_bot/discord_manager.py b/breadtube_bot/discord_manager.py index 61d9196..5f01988 100644 --- a/breadtube_bot/discord_manager.py +++ b/breadtube_bot/discord_manager.py @@ -120,6 +120,7 @@ class DiscordManager: raise RuntimeError( f'HTTP error calling API ({url}): {error}:\nHeaders:\n{error.headers}Body:\n{error.read()}') from error except urllib.error.URLError as error: + self._logger.debug('Discord API HTTP error -> data: %s', data) raise RuntimeError(f'URL error calling API ({url}): {error}') from error except TimeoutError as error: raise RuntimeError(f'Timeout calling API ({url}): {error}') from error @@ -207,6 +208,5 @@ class DiscordManager: if after_id is not None: params['after'] = after_id _, messages_info = self._send_request( - *Api.Message.list_by_channel(channel.id), request_timeout=request_timeout, - data=json.dumps(params, cls=ApiEncoder).encode() if params else None) + *Api.Message.list_by_channel(channel.id, params=params), request_timeout=request_timeout) return [Message.from_dict(m) for m in messages_info or []]