Add xp when event starts #323
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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")
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user