Added logic to save active events locally #167
This commit is contained in:
		@@ -19,7 +19,6 @@
 | 
			
		||||
      "cpl-core==2022.12.1.post3",
 | 
			
		||||
      "cpl-translation==2022.12.1",
 | 
			
		||||
      "cpl-query==2022.12.2.post1",
 | 
			
		||||
      "cpl-discord==2022.12.1.post2",
 | 
			
		||||
      "Flask==2.2.2",
 | 
			
		||||
      "Flask-Classful==0.14.2",
 | 
			
		||||
      "Flask-Cors==3.0.10",
 | 
			
		||||
@@ -29,7 +28,8 @@
 | 
			
		||||
      "eventlet==0.33.3",
 | 
			
		||||
      "requests-oauthlib==1.3.1",
 | 
			
		||||
      "icmplib==3.0.3",
 | 
			
		||||
      "ariadne==0.17.1"
 | 
			
		||||
      "ariadne==0.17.1",
 | 
			
		||||
      "cpl-discord==2022.12.2"
 | 
			
		||||
    ],
 | 
			
		||||
    "DevDependencies": [
 | 
			
		||||
      "cpl-cli==2022.12.1.post3"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ from modules.base.events.base_on_message_delete_event import BaseOnMessageDelete
 | 
			
		||||
from modules.base.events.base_on_message_event import BaseOnMessageEvent
 | 
			
		||||
from modules.base.events.base_on_raw_reaction_add import BaseOnRawReactionAddEvent
 | 
			
		||||
from modules.base.events.base_on_raw_reaction_remove import BaseOnRawReactionRemoveEvent
 | 
			
		||||
from modules.base.events.base_on_scheduled_event_update_event import BaseOnScheduledEventUpdateEvent
 | 
			
		||||
from modules.base.events.base_on_voice_state_update_event import (
 | 
			
		||||
    BaseOnVoiceStateUpdateEvent,
 | 
			
		||||
)
 | 
			
		||||
@@ -33,6 +34,7 @@ from modules.base.events.base_on_voice_state_update_event_help_channel import (
 | 
			
		||||
)
 | 
			
		||||
from modules.base.helper.base_reaction_handler import BaseReactionHandler
 | 
			
		||||
from modules.base.service.base_helper_service import BaseHelperService
 | 
			
		||||
from modules.base.service.event_service import EventService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BaseModule(ModuleABC):
 | 
			
		||||
@@ -45,6 +47,8 @@ class BaseModule(ModuleABC):
 | 
			
		||||
    def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
			
		||||
        services.add_transient(BaseHelperABC, BaseHelperService)
 | 
			
		||||
        services.add_transient(BaseReactionHandler)
 | 
			
		||||
        services.add_singleton(EventService)
 | 
			
		||||
 | 
			
		||||
        # commands
 | 
			
		||||
        self._dc.add_command(AFKCommand)
 | 
			
		||||
        self._dc.add_command(HelpCommand)
 | 
			
		||||
@@ -77,3 +81,7 @@ class BaseModule(ModuleABC):
 | 
			
		||||
            DiscordEventTypesEnum.on_voice_state_update.value,
 | 
			
		||||
            BaseOnVoiceStateUpdateEventHelpChannel,
 | 
			
		||||
        )
 | 
			
		||||
        self._dc.add_event(
 | 
			
		||||
            DiscordEventTypesEnum.on_scheduled_event_update.value,
 | 
			
		||||
            BaseOnScheduledEventUpdateEvent,
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ class BaseServerSettings(ConfigurationModelABC):
 | 
			
		||||
        self._xp_per_reaction: int = 0
 | 
			
		||||
        self._max_message_xp_per_hour: int = 0
 | 
			
		||||
        self._xp_per_ontime_hour: int = 0
 | 
			
		||||
        self._xp_per_event_participation: int = 0
 | 
			
		||||
        self._afk_channel_ids: List[int] = List(int)
 | 
			
		||||
        self._afk_command_channel_id: int = 0
 | 
			
		||||
        self._help_command_reference_url: str = ""
 | 
			
		||||
@@ -45,6 +46,10 @@ class BaseServerSettings(ConfigurationModelABC):
 | 
			
		||||
    def xp_per_ontime_hour(self) -> int:
 | 
			
		||||
        return self._xp_per_ontime_hour
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def xp_per_event_participation(self) -> int:
 | 
			
		||||
        return self._xp_per_event_participation
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def afk_channel_ids(self) -> List[int]:
 | 
			
		||||
        return self._afk_channel_ids
 | 
			
		||||
@@ -73,6 +78,9 @@ class BaseServerSettings(ConfigurationModelABC):
 | 
			
		||||
            self._xp_per_reaction = int(settings["XpPerReaction"])
 | 
			
		||||
            self._max_message_xp_per_hour = int(settings["MaxMessageXpPerHour"])
 | 
			
		||||
            self._xp_per_ontime_hour = int(settings["XpPerOntimeHour"])
 | 
			
		||||
            self._xp_per_event_participation = (
 | 
			
		||||
                0 if "XpPerEventParticipation" in settings else settings["XpPerEventParticipation"]
 | 
			
		||||
            )
 | 
			
		||||
            for index in settings["AFKChannelIds"]:
 | 
			
		||||
                self._afk_channel_ids.append(int(index))
 | 
			
		||||
            self._afk_command_channel_id = settings["AFKCommandChannelId"]
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,35 @@
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_core.logging import LoggerABC
 | 
			
		||||
from cpl_discord.events.on_scheduled_event_update_abc import OnScheduledEventUpdateABC
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from discord import EventStatus
 | 
			
		||||
 | 
			
		||||
from modules.base.service.event_service import EventService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC):
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self,
 | 
			
		||||
        logger: LoggerABC,
 | 
			
		||||
        bot: DiscordBotServiceABC,
 | 
			
		||||
        events: EventService,
 | 
			
		||||
    ):
 | 
			
		||||
        OnScheduledEventUpdateABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._events = events
 | 
			
		||||
 | 
			
		||||
    async def on_scheduled_event_update(self, before: discord.ScheduledEvent, after: discord.ScheduledEvent):
 | 
			
		||||
        self._logger.debug(__name__, f"Module {type(self)} started")
 | 
			
		||||
 | 
			
		||||
        # save started event
 | 
			
		||||
        if before.status != after.status and after.status == EventStatus.active:
 | 
			
		||||
            self._events.add_event(after)
 | 
			
		||||
        # delete stopped event
 | 
			
		||||
        if before.status != after.status and (
 | 
			
		||||
            after.status.value == EventStatus.cancelled.value or after.status.value == EventStatus.completed.value
 | 
			
		||||
        ):
 | 
			
		||||
            self._events.remove_event(after)
 | 
			
		||||
 | 
			
		||||
        self._logger.debug(__name__, f"Module {type(self)} stopped")
 | 
			
		||||
							
								
								
									
										19
									
								
								kdb-bot/src/modules/base/service/event_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								kdb-bot/src/modules/base/service/event_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
from discord import ScheduledEvent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EventService:
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        self._active_events = List(ScheduledEvent)
 | 
			
		||||
 | 
			
		||||
    def add_event(self, event: ScheduledEvent):
 | 
			
		||||
        if self._active_events.contains(event):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self._active_events.add(event)
 | 
			
		||||
 | 
			
		||||
    def remove_event(self, event: ScheduledEvent):
 | 
			
		||||
        if not self._active_events.contains(event):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self._active_events.remove(event)
 | 
			
		||||
		Reference in New Issue
	
	Block a user