From 6e0d4a5144263d3a12e0e78b5b53b5f14b936590 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 8 Jul 2023 09:40:20 +0200 Subject: [PATCH] Add xp when event starts #323 --- .../base_on_scheduled_event_update_event.py | 6 ++- ...tate_update_event_scheduled_event_bonus.py | 28 +------------- .../src/modules/base/service/event_service.py | 37 ++++++++++++++++++- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/kdb-bot/src/modules/base/events/base_on_scheduled_event_update_event.py b/kdb-bot/src/modules/base/events/base_on_scheduled_event_update_event.py index 5b9cf901..640a9a80 100644 --- a/kdb-bot/src/modules/base/events/base_on_scheduled_event_update_event.py +++ b/kdb-bot/src/modules/base/events/base_on_scheduled_event_update_event.py @@ -26,7 +26,11 @@ class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC): # save started event if before.status != after.status and after.status == EventStatus.active: - self._events.add_event(ActiveEvent(after)) + active_event = ActiveEvent(after) + self._events.add_event(active_event) + + for member in after.channel.members: + self._events.give_xp_for_event_participation(member, active_event) # delete stopped event if before.status != after.status and ( after.status.value == EventStatus.cancelled.value or after.status.value == EventStatus.completed.value diff --git a/kdb-bot/src/modules/base/events/base_on_voice_state_update_event_scheduled_event_bonus.py b/kdb-bot/src/modules/base/events/base_on_voice_state_update_event_scheduled_event_bonus.py index d8283652..871d7563 100644 --- a/kdb-bot/src/modules/base/events/base_on_voice_state_update_event_scheduled_event_bonus.py +++ b/kdb-bot/src/modules/base/events/base_on_voice_state_update_event_scheduled_event_bonus.py @@ -1,36 +1,20 @@ import discord -from cpl_core.configuration import ConfigurationABC -from cpl_core.database.context import DatabaseContextABC from cpl_core.logging import LoggerABC from cpl_discord.events import OnVoiceStateUpdateABC from bot_core.helper.event_checks import EventChecks -from bot_data.abc.server_repository_abc import ServerRepositoryABC -from bot_data.abc.user_repository_abc import UserRepositoryABC -from modules.base.abc.base_helper_abc import BaseHelperABC -from modules.base.configuration.base_server_settings import BaseServerSettings from modules.base.service.event_service import EventService class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC): def __init__( self, - config: ConfigurationABC, logger: LoggerABC, - base_helper: BaseHelperABC, - servers: ServerRepositoryABC, - users: UserRepositoryABC, events: EventService, - db: DatabaseContextABC, ): OnVoiceStateUpdateABC.__init__(self) - self._config = config self._logger = logger - self._base_helper = base_helper - self._servers = servers - self._users = users self._events = events - self._db = db self._logger.info(__name__, f"Module {type(self)} loaded") @@ -51,16 +35,6 @@ class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC): self._logger.debug(__name__, f"Module {type(self)} stopped") return - server = self._servers.get_server_by_discord_id(member.guild.id) - user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id) - if active_event.participants.any(lambda x: x.id == user.id): - self._logger.debug(__name__, f"Module {type(self)} stopped") - return - - settings: BaseServerSettings = self._base_helper.get_config(server.discord_id) - user.xp += settings.xp_per_event_participation - self._users.update_user(user) - self._db.save_changes() - active_event.participants.append(user) + self._events.give_xp_for_event_participation(member, active_event) self._logger.debug(__name__, f"Module {type(self)} stopped") diff --git a/kdb-bot/src/modules/base/service/event_service.py b/kdb-bot/src/modules/base/service/event_service.py index 8073b3d3..d5c77360 100644 --- a/kdb-bot/src/modules/base/service/event_service.py +++ b/kdb-bot/src/modules/base/service/event_service.py @@ -1,13 +1,35 @@ from typing import Optional import discord +from cpl_core.configuration import ConfigurationABC +from cpl_core.database.context import DatabaseContextABC +from cpl_core.logging import LoggerABC from cpl_query.extension import List +from bot_data.abc.server_repository_abc import ServerRepositoryABC +from bot_data.abc.user_repository_abc import UserRepositoryABC +from modules.base.configuration.base_server_settings import BaseServerSettings from modules.base.model.active_event import ActiveEvent +from modules.base.service.base_helper_service import BaseHelperService class EventService: - def __init__(self): + def __init__( + self, + config: ConfigurationABC, + logger: LoggerABC, + base_helper: BaseHelperService, + servers: ServerRepositoryABC, + users: UserRepositoryABC, + db: DatabaseContextABC, + ): + self._config = config + self._logger = logger + self._base_helper = base_helper + self._servers = servers + self._users = users + self._db = db + self._active_events = List(ActiveEvent) def add_event(self, event: ActiveEvent): @@ -29,3 +51,16 @@ class EventService: return self._active_events.remove(event) + + def give_xp_for_event_participation(self, member: discord.Member, active_event: ActiveEvent): + server = self._servers.get_server_by_discord_id(member.guild.id) + user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id) + if active_event.participants.any(lambda x: x.id == user.id): + self._logger.debug(__name__, f"Module {type(self)} stopped") + return + + settings: BaseServerSettings = self._base_helper.get_config(server.discord_id) + user.xp += settings.xp_per_event_participation + self._users.update_user(user) + self._db.save_changes() + active_event.participants.append(user) -- 2.45.2