diff --git a/redbot/cogs/streams/errors.py b/redbot/cogs/streams/errors.py index 4249b04c7..732b146d9 100644 --- a/redbot/cogs/streams/errors.py +++ b/redbot/cogs/streams/errors.py @@ -1,3 +1,6 @@ +from typing import Any + + class StreamsError(Exception): pass @@ -7,7 +10,13 @@ class StreamNotFound(StreamsError): class APIError(StreamsError): - pass + def __init__(self, status_code: int, raw_data: Any) -> None: + self.status_code = status_code + self.raw_data = raw_data + super().__init__(f"{status_code=} {raw_data=}") + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self!s})" class InvalidTwitchCredentials(StreamsError): diff --git a/redbot/cogs/streams/streams.py b/redbot/cogs/streams/streams.py index ed5e53291..55f0edb47 100644 --- a/redbot/cogs/streams/streams.py +++ b/redbot/cogs/streams/streams.py @@ -766,6 +766,13 @@ class Streams(commands.Cog): stream.messages.clear() await self.save_streams() + except APIError as e: + log.error( + "Something went wrong whilst trying to contact the stream service's API.\n" + "Raw response data:\n%r", + e, + ) + continue else: if stream.messages: continue diff --git a/redbot/cogs/streams/streamtypes.py b/redbot/cogs/streams/streamtypes.py index 202e4a84f..2ac75ea85 100644 --- a/redbot/cogs/streams/streamtypes.py +++ b/redbot/cogs/streams/streamtypes.py @@ -274,7 +274,7 @@ class YoutubeStream(Stream): and data["pageInfo"]["totalResults"] < 1 ): raise StreamNotFound() - raise APIError(data) + raise APIError(r.status, data) def _check_api_errors(self, data: dict): if "error" in data: @@ -287,7 +287,7 @@ class YoutubeStream(Stream): "rateLimitExceeded", ): raise YoutubeQuotaExceeded() - raise APIError(data) + raise APIError(error_code, data) def __repr__(self): return "<{0.__class__.__name__}: {0.name} (ID: {0.id})>".format(self) @@ -394,7 +394,7 @@ class TwitchStream(Stream): elif stream_code == 404: raise StreamNotFound() else: - raise APIError(stream_data) + raise APIError(stream_code, stream_data) async def _fetch_user_profile(self): code, data = await self.get_data(TWITCH_ID_ENDPOINT, {"login": self.name}) @@ -409,7 +409,7 @@ class TwitchStream(Stream): elif code == 401: raise InvalidTwitchCredentials() else: - raise APIError(data) + raise APIError(code, data) def make_embed(self, data): is_rerun = data["type"] == "rerun" @@ -458,7 +458,7 @@ class PicartoStream(Stream): elif r.status == 404: raise StreamNotFound() else: - raise APIError(data) + raise APIError(r.status, data) def make_embed(self, data): avatar = rnd(