Merge pull request '0.3 - Techniker in PermissionService aufnehmen #60' (#69) from Ebola-Chan/kd_discord_bot:#60 into 0.3

Reviewed-on: sh-edraft.de/kd_discord_bot#69
Reviewed-by: Sven Heidemann <sven.heidemann@sh-edraft.de>
Closes #60
This commit is contained in:
Sven Heidemann 2022-10-13 16:32:44 +02:00
commit 56db9f42ad
2 changed files with 31 additions and 2 deletions

View File

@ -32,8 +32,14 @@ class PermissionServiceABC(ABC):
@abstractmethod @abstractmethod
def get_moderators(self, g_id: int) -> list[discord.Member]: pass def get_moderators(self, g_id: int) -> list[discord.Member]: pass
@abstractmethod
def get_technicians(self) -> list[discord.Member]: pass
@abstractmethod @abstractmethod
def is_member_admin(self, member: discord.Member) -> bool: pass def is_member_admin(self, member: discord.Member) -> bool: pass
@abstractmethod @abstractmethod
def is_member_moderator(self, member: discord.Member) -> bool: pass def is_member_moderator(self, member: discord.Member) -> bool: pass
@abstractmethod
def is_member_technician(self, member: discord.Member) -> bool: pass

View File

@ -3,13 +3,20 @@ from cpl_core.logging import LoggerABC
from cpl_core.configuration import ConfigurationABC from cpl_core.configuration import ConfigurationABC
from cpl_discord.service import DiscordBotServiceABC from cpl_discord.service import DiscordBotServiceABC
from bot_core.configuration.bot_settings import BotSettings
from modules.permission.abc.permission_service_abc import PermissionServiceABC from modules.permission.abc.permission_service_abc import PermissionServiceABC
from modules.permission.configuration.permission_server_settings import PermissionServerSettings from modules.permission.configuration.permission_server_settings import PermissionServerSettings
class PermissionService(PermissionServiceABC): class PermissionService(PermissionServiceABC):
def __init__(self, logger: LoggerABC, bot: DiscordBotServiceABC, config: ConfigurationABC): def __init__(
self,
logger: LoggerABC,
bot: DiscordBotServiceABC,
config: ConfigurationABC,
bot_settings: BotSettings
):
PermissionServiceABC.__init__(self) PermissionServiceABC.__init__(self)
self._logger = logger self._logger = logger
self._bot = bot self._bot = bot
@ -23,11 +30,20 @@ class PermissionService(PermissionServiceABC):
self._moderator_roles: dict[int, list[discord.Role]] = {} self._moderator_roles: dict[int, list[discord.Role]] = {}
self._moderators: dict[int, list[discord.Member]] = {} self._moderators: dict[int, list[discord.Member]] = {}
self._technician_ids: list[int] = bot_settings.technicians
self._technicians: list[discord.Member] = []
def on_ready(self): def on_ready(self):
for guild in self._bot.guilds: for guild in self._bot.guilds:
guild: discord.Guild = guild guild: discord.Guild = guild
self._logger.debug(__name__, f'Validate permission settings') self._logger.debug(__name__, f'Validate permission settings')
for technician_id in self._technician_ids:
technician = guild.get_member(technician_id)
if technician is None:
continue
self._technicians.append(technician)
settings: PermissionServerSettings = self._config.get_configuration(f'PermissionServerSettings_{guild.id}') settings: PermissionServerSettings = self._config.get_configuration(f'PermissionServerSettings_{guild.id}')
if settings is None: if settings is None:
self._logger.error(__name__, 'Permission settings not found') self._logger.error(__name__, 'Permission settings not found')
@ -105,8 +121,15 @@ class PermissionService(PermissionServiceABC):
def get_moderators(self, g_id: int) -> list[discord.Member]: def get_moderators(self, g_id: int) -> list[discord.Member]:
return self._moderators[g_id] return self._moderators[g_id]
def get_technicians(self) -> list[discord.Member]:
return self._technicians
def is_member_admin(self, member: discord.Member) -> bool: def is_member_admin(self, member: discord.Member) -> bool:
return member.guild.id in self._admins and member in self._admins[member.guild.id] return member.guild.id in self._admins and member in self._admins[member.guild.id]
def is_member_moderator(self, member: discord.Member) -> bool: def is_member_moderator(self, member: discord.Member) -> bool:
return member.guild.id in self._moderators and member in self._moderators[member.guild.id] or self.is_member_admin(member) return member.guild.id in self._moderators \
and member in self._moderators[member.guild.id] or self.is_member_admin(member)
def is_member_technician(self, member: discord.Member) -> bool:
return member in self._technicians