From 6cc83f2f45998732b5659d25ec6a0d64fc19a108 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Mon, 18 Nov 2024 00:22:51 +0100 Subject: [PATCH] Fix --- src/modules/stream_notifications/tasks.py | 7 +++++-- src/modules/stream_notifications/twitch/webhook.py | 12 ++++++++++-- src/modules/stream_notifications/watcher.py | 12 ++++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/modules/stream_notifications/tasks.py b/src/modules/stream_notifications/tasks.py index 6912ec6..c61104a 100644 --- a/src/modules/stream_notifications/tasks.py +++ b/src/modules/stream_notifications/tasks.py @@ -1,8 +1,11 @@ from core.broker import broker +from .state import State from .watcher import StateWatcher @broker.task("stream_notifications.twitch.on_stream_state_change") -async def on_stream_state_change(streamer_id: int): - await StateWatcher.on_stream_state_change(streamer_id) +async def on_stream_state_change( + streamer_id: int, new_state: State | None = None +): + await StateWatcher.on_stream_state_change(streamer_id, new_state) diff --git a/src/modules/stream_notifications/twitch/webhook.py b/src/modules/stream_notifications/twitch/webhook.py index 87445ac..467c245 100644 --- a/src/modules/stream_notifications/twitch/webhook.py +++ b/src/modules/stream_notifications/twitch/webhook.py @@ -1,17 +1,18 @@ from asyncio import sleep, gather +from datetime import datetime, timezone import logging from typing import NoReturn, Literal from twitchAPI.eventsub.webhook import EventSubWebhook from twitchAPI.twitch import Twitch from twitchAPI.object.eventsub import StreamOnlineEvent, ChannelUpdateEvent -from twitchAPI.type import EventSubSubscriptionConflict from core.config import config from repositories.streamers import StreamerConfigRepository, StreamerConfig from modules.stream_notifications.tasks import on_stream_state_change from .authorize import authorize +from ..state import State logger = logging.getLogger(__name__) @@ -24,7 +25,14 @@ class TwitchService: self.twitch = twitch async def on_channel_update(self, event: ChannelUpdateEvent): - await on_stream_state_change.kiq(int(event.event.broadcaster_user_id)) + await on_stream_state_change.kiq( + int(event.event.broadcaster_user_id), + State( + title=event.event.title, + category=event.event.category_name, + last_live_at=datetime.now(timezone.utc) + ) + ) async def on_stream_online(self, event: StreamOnlineEvent): await on_stream_state_change.kiq(int(event.event.broadcaster_user_id)) diff --git a/src/modules/stream_notifications/watcher.py b/src/modules/stream_notifications/watcher.py index f5e79c8..da8cdee 100644 --- a/src/modules/stream_notifications/watcher.py +++ b/src/modules/stream_notifications/watcher.py @@ -65,8 +65,12 @@ class StateWatcher: await cls.notify_and_save(streamer_id, SentNotificationType.CHANGE_CATEGORY, state) @classmethod - async def _on_stream_state_change(cls, streamer_id: int): - current_state = await cls.get_twitch_state(streamer_id) + async def _on_stream_state_change(cls, streamer_id: int, new_state: State | None = None): + if new_state is not None: + current_state = new_state + else: + current_state = await cls.get_twitch_state(streamer_id) + if current_state is None: return @@ -89,7 +93,7 @@ class StateWatcher: await StateManager.update(streamer_id, current_state) @classmethod - async def on_stream_state_change(cls, streamer_id: int): + async def on_stream_state_change(cls, streamer_id: int, new_state: State | None = None): async with redis_manager.connect() as redis: async with redis.lock(f"on_stream_state_change:{streamer_id}"): - await cls._on_stream_state_change(streamer_id) + await cls._on_stream_state_change(streamer_id, new_state)