Merge pull request 'Add xp when event starts #323' (#324) from #323 into support

Reviewed-on: sh-edraft.de/kd_discord_bot#324
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
This commit is contained in:
Sven Heidemann 2023-08-14 09:30:16 +02:00
commit ba5f83f3d0
3 changed files with 42 additions and 29 deletions

View File

@ -26,7 +26,11 @@ class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC):
# save started event # save started event
if before.status != after.status and after.status == EventStatus.active: 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 # delete stopped event
if before.status != after.status and ( if before.status != after.status and (
after.status.value == EventStatus.cancelled.value or after.status.value == EventStatus.completed.value after.status.value == EventStatus.cancelled.value or after.status.value == EventStatus.completed.value

View File

@ -1,36 +1,20 @@
import discord import discord
from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_core.logging import LoggerABC from cpl_core.logging import LoggerABC
from cpl_discord.events import OnVoiceStateUpdateABC from cpl_discord.events import OnVoiceStateUpdateABC
from bot_core.helper.event_checks import EventChecks 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 from modules.base.service.event_service import EventService
class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC): class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC):
def __init__( def __init__(
self, self,
config: ConfigurationABC,
logger: LoggerABC, logger: LoggerABC,
base_helper: BaseHelperABC,
servers: ServerRepositoryABC,
users: UserRepositoryABC,
events: EventService, events: EventService,
db: DatabaseContextABC,
): ):
OnVoiceStateUpdateABC.__init__(self) OnVoiceStateUpdateABC.__init__(self)
self._config = config
self._logger = logger self._logger = logger
self._base_helper = base_helper
self._servers = servers
self._users = users
self._events = events self._events = events
self._db = db
self._logger.info(__name__, f"Module {type(self)} loaded") 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") self._logger.debug(__name__, f"Module {type(self)} stopped")
return return
server = self._servers.get_server_by_discord_id(member.guild.id) self._events.give_xp_for_event_participation(member, active_event)
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._logger.debug(__name__, f"Module {type(self)} stopped") self._logger.debug(__name__, f"Module {type(self)} stopped")

View File

@ -1,13 +1,35 @@
from typing import Optional from typing import Optional
import discord 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 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.model.active_event import ActiveEvent
from modules.base.service.base_helper_service import BaseHelperService
class EventService: 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) self._active_events = List(ActiveEvent)
def add_event(self, event: ActiveEvent): def add_event(self, event: ActiveEvent):
@ -29,3 +51,16 @@ class EventService:
return return
self._active_events.remove(event) 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)