diff --git a/bot/src/bot_api/transformer/auth_user_transformer.py b/bot/src/bot_api/transformer/auth_user_transformer.py index 66506a3a..dd82c202 100644 --- a/bot/src/bot_api/transformer/auth_user_transformer.py +++ b/bot/src/bot_api/transformer/auth_user_transformer.py @@ -43,6 +43,8 @@ class AuthUserTransformer(TransformerABC): def _is_admin(user: User, bot: DiscordBotServiceABC, permissions: PermissionServiceABC): guild = bot.get_guild(user.server.discord_id) member = guild.get_member(user.discord_id) + if member is None: + return False return permissions.is_member_admin(member) @staticmethod @@ -50,6 +52,8 @@ class AuthUserTransformer(TransformerABC): def _is_moderator(user: User, bot: DiscordBotServiceABC, permissions: PermissionServiceABC): guild = bot.get_guild(user.server.discord_id) member = guild.get_member(user.discord_id) + if member is None: + return False return permissions.is_member_moderator(member) @classmethod diff --git a/bot/src/bot_core/service/permission_service.py b/bot/src/bot_core/service/permission_service.py index de76e15a..0ca7e0f3 100644 --- a/bot/src/bot_core/service/permission_service.py +++ b/bot/src/bot_core/service/permission_service.py @@ -5,11 +5,11 @@ from cpl_core.configuration import ConfigurationABC from cpl_core.logging import LoggerABC from cpl_discord.service import DiscordBotServiceABC +from bot_core.abc.permission_service_abc import PermissionServiceABC from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC from bot_data.model.team_member_type_enum import TeamMemberTypeEnum -from bot_core.abc.permission_service_abc import PermissionServiceABC class PermissionService(PermissionServiceABC): @@ -112,3 +112,18 @@ class PermissionService(PermissionServiceABC): except Exception as e: self._logger.error(__name__, "Permission check failed", e) return False + + def is_member_technician_by_id(self, member_id: int): + has_permission_cached = self.get_cached_permission(member_id, TeamMemberTypeEnum.technician) + if has_permission_cached is not None: + return has_permission_cached + + self._logger.debug(__name__, f"Checking is member {member_id} technician") + + try: + has_permission = member_id in self._technician_configs.get_technician_config().technician_ids + self.set_cached_permission(has_permission, member_id, TeamMemberTypeEnum.technician) + return has_permission + except Exception as e: + self._logger.error(__name__, "Permission check failed", e) + return False