diff --git a/kdb-bot/src/bot_graphql/abc/query_abc.py b/kdb-bot/src/bot_graphql/abc/query_abc.py index 9c8f3ef1..a0435218 100644 --- a/kdb-bot/src/bot_graphql/abc/query_abc.py +++ b/kdb-bot/src/bot_graphql/abc/query_abc.py @@ -2,6 +2,7 @@ from typing import Callable from ariadne import ObjectType from cpl_core.dependency_injection import ServiceProviderABC +from cpl_core.type import T from cpl_discord.service import DiscordBotServiceABC from cpl_query.extension import List @@ -66,7 +67,7 @@ class QueryABC(ObjectType): self.set_field(f"{name}Count", lambda *args: wrapper(*args).count()) @ServiceProviderABC.inject - def _can_user_see_element(self, user: AuthUser, element, services: ServiceProviderABC) -> bool: + def _can_user_see_element(self, user: AuthUser, element: T, services: ServiceProviderABC) -> bool: permissions: PermissionService = services.get_service(PermissionService) bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC) @@ -82,12 +83,12 @@ class QueryABC(ObjectType): break elif type(element) == AutoRoleRule: - element: AutoRole = element + element: AutoRoleRule = element for u in user.users: u: User = u guild = bot.get_guild(u.server.discord_id) member = guild.get_member(u.discord_id) - if permissions.is_member_moderator(member) and u.server.id == element.server.id: + if permissions.is_member_moderator(member) and u.server.id == element.auto_role.server.id: access = True break 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 e5838cec..641f8ddb 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 @@ -7,7 +7,8 @@ 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 bot_data.model.server_config import ServerConfig +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 @@ -16,6 +17,7 @@ class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC): self, config: ConfigurationABC, logger: LoggerABC, + base_helper: BaseHelperABC, servers: ServerRepositoryABC, users: UserRepositoryABC, events: EventService, @@ -24,6 +26,7 @@ class BaseOnVoiceStateUpdateEventScheduledEventBonus(OnVoiceStateUpdateABC): OnVoiceStateUpdateABC.__init__(self) self._config = config self._logger = logger + self._base_helper = base_helper self._servers = servers self._users = users self._events = events @@ -48,16 +51,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: ServerConfig = self._config.get_configuration(f"ServerConfig_{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)