Add subscribe retries

This commit is contained in:
2024-11-17 22:17:56 +01:00
parent b3bc07f7db
commit 698fe4b40d

View File

@@ -7,7 +7,7 @@ from twitchAPI.twitch import Twitch
from twitchAPI.object.eventsub import StreamOnlineEvent, ChannelUpdateEvent from twitchAPI.object.eventsub import StreamOnlineEvent, ChannelUpdateEvent
from core.config import config from core.config import config
from repositories.streamers import StreamerConfigRepository from repositories.streamers import StreamerConfigRepository, StreamerConfig
from modules.stream_notifications.tasks import on_stream_state_change from modules.stream_notifications.tasks import on_stream_state_change
from .authorize import authorize from .authorize import authorize
@@ -28,6 +28,23 @@ class TwitchService:
async def on_stream_online(self, event: StreamOnlineEvent): async def on_stream_online(self, event: StreamOnlineEvent):
await on_stream_state_change.kiq(int(event.event.broadcaster_user_id)) await on_stream_state_change.kiq(int(event.event.broadcaster_user_id))
async def subscribe_with_retry(
self,
eventsub: EventSubWebhook,
streamer: StreamerConfig,
retry: int = 10
):
try:
await eventsub.listen_channel_update_v2(str(streamer.twitch.id), self.on_channel_update)
await eventsub.listen_stream_online(str(streamer.twitch.id), self.on_stream_online)
except Exception as e:
if retry > 0:
await sleep(1)
await self.subscribe_with_retry(eventsub, streamer, retry - 1)
else:
raise e
async def run(self) -> NoReturn: async def run(self) -> NoReturn:
eventsub = EventSubWebhook( eventsub = EventSubWebhook(
callback_url=config.TWITCH_CALLBACK_URL, callback_url=config.TWITCH_CALLBACK_URL,
@@ -47,8 +64,7 @@ class TwitchService:
for streamer in streamers: for streamer in streamers:
logger.info(f"Subscribe to events for {streamer.twitch.name}") logger.info(f"Subscribe to events for {streamer.twitch.name}")
await eventsub.listen_channel_update_v2(str(streamer.twitch.id), self.on_channel_update) await self.subscribe_with_retry(eventsub, streamer)
await eventsub.listen_stream_online(str(streamer.twitch.id), self.on_stream_online)
logger.info(f"Subscribe to events for {streamer.twitch.name} done") logger.info(f"Subscribe to events for {streamer.twitch.name} done")
logger.info("Twitch service started") logger.info("Twitch service started")