Improved permission loading #446
This commit is contained in:
parent
94732b7227
commit
0e4419312b
@ -14,7 +14,6 @@
|
|||||||
"config": "src/modules/config/config.json",
|
"config": "src/modules/config/config.json",
|
||||||
"database": "src/modules/database/database.json",
|
"database": "src/modules/database/database.json",
|
||||||
"level": "src/modules/level/level.json",
|
"level": "src/modules/level/level.json",
|
||||||
"permission": "src/modules/permission/permission.json",
|
|
||||||
"technician": "src/modules/technician/technician.json",
|
"technician": "src/modules/technician/technician.json",
|
||||||
"short-role-name": "src/modules/short_role_name/short-role-name.json",
|
"short-role-name": "src/modules/short_role_name/short-role-name.json",
|
||||||
"special-offers": "src/modules/special_offers/special-offers.json",
|
"special-offers": "src/modules/special_offers/special-offers.json",
|
||||||
|
@ -70,7 +70,6 @@
|
|||||||
"../modules/config/config.json",
|
"../modules/config/config.json",
|
||||||
"../modules/database/database.json",
|
"../modules/database/database.json",
|
||||||
"../modules/level/level.json",
|
"../modules/level/level.json",
|
||||||
"../modules/permission/permission.json",
|
|
||||||
"../modules/short_role_name/short-role-name.json",
|
"../modules/short_role_name/short-role-name.json",
|
||||||
"../modules/special_offers/special-offers.json",
|
"../modules/special_offers/special-offers.json",
|
||||||
"../modules/technician/technician.json"
|
"../modules/technician/technician.json"
|
||||||
|
@ -12,7 +12,6 @@ from modules.boot_log.boot_log_module import BootLogModule
|
|||||||
from modules.config.config_module import ConfigModule
|
from modules.config.config_module import ConfigModule
|
||||||
from modules.database.database_module import DatabaseModule
|
from modules.database.database_module import DatabaseModule
|
||||||
from modules.level.level_module import LevelModule
|
from modules.level.level_module import LevelModule
|
||||||
from modules.permission.permission_module import PermissionModule
|
|
||||||
from modules.short_role_name.short_role_name_module import ShortRoleNameModule
|
from modules.short_role_name.short_role_name_module import ShortRoleNameModule
|
||||||
from modules.special_offers.special_offers_module import SteamSpecialOffersModule
|
from modules.special_offers.special_offers_module import SteamSpecialOffersModule
|
||||||
from modules.technician.technician_module import TechnicianModule
|
from modules.technician.technician_module import TechnicianModule
|
||||||
@ -30,7 +29,6 @@ class ModuleList:
|
|||||||
ConfigModule, # has to be before db check
|
ConfigModule, # has to be before db check
|
||||||
DatabaseModule,
|
DatabaseModule,
|
||||||
GraphQLModule,
|
GraphQLModule,
|
||||||
PermissionModule,
|
|
||||||
AutoRoleModule,
|
AutoRoleModule,
|
||||||
BaseModule,
|
BaseModule,
|
||||||
LevelModule,
|
LevelModule,
|
||||||
|
@ -10,7 +10,7 @@ from bot_api.model.user_dto import UserDTO
|
|||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
from bot_data.model.auth_user import AuthUser
|
from bot_data.model.auth_user import AuthUser
|
||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class AuthUserTransformer(TransformerABC):
|
class AuthUserTransformer(TransformerABC):
|
||||||
|
@ -15,7 +15,6 @@ class FeatureFlagsEnum(Enum):
|
|||||||
database_module = "DatabaseModule"
|
database_module = "DatabaseModule"
|
||||||
level_module = "LevelModule"
|
level_module = "LevelModule"
|
||||||
moderator_module = "ModeratorModule"
|
moderator_module = "ModeratorModule"
|
||||||
permission_module = "PermissionModule"
|
|
||||||
short_role_name_module = "ShortRoleNameModule"
|
short_role_name_module = "ShortRoleNameModule"
|
||||||
steam_special_offers_module = "SteamSpecialOffersModule"
|
steam_special_offers_module = "SteamSpecialOffersModule"
|
||||||
# features
|
# features
|
||||||
|
@ -16,7 +16,6 @@ class FeatureFlagsSettings(ConfigurationModelABC):
|
|||||||
FeatureFlagsEnum.data_module.value: True, # 03.10.2022 #56
|
FeatureFlagsEnum.data_module.value: True, # 03.10.2022 #56
|
||||||
FeatureFlagsEnum.database_module.value: True, # 02.10.2022 #48
|
FeatureFlagsEnum.database_module.value: True, # 02.10.2022 #48
|
||||||
FeatureFlagsEnum.moderator_module.value: False, # 02.10.2022 #48
|
FeatureFlagsEnum.moderator_module.value: False, # 02.10.2022 #48
|
||||||
FeatureFlagsEnum.permission_module.value: True, # 02.10.2022 #48
|
|
||||||
FeatureFlagsEnum.config_module.value: True, # 19.07.2023 #127
|
FeatureFlagsEnum.config_module.value: True, # 19.07.2023 #127
|
||||||
FeatureFlagsEnum.short_role_name_module.value: True, # 28.09.2023 #378
|
FeatureFlagsEnum.short_role_name_module.value: True, # 28.09.2023 #378
|
||||||
FeatureFlagsEnum.steam_special_offers_module.value: True, # 11.10.2023 #188
|
FeatureFlagsEnum.steam_special_offers_module.value: True, # 11.10.2023 #188
|
||||||
|
@ -9,7 +9,7 @@ from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
|||||||
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
from bot_core.helper.command_checks import CommandChecks
|
from bot_core.helper.command_checks import CommandChecks
|
||||||
from bot_core.helper.event_checks import EventChecks
|
from bot_core.helper.event_checks import EventChecks
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class CoreExtension(ApplicationExtensionABC):
|
class CoreExtension(ApplicationExtensionABC):
|
||||||
|
@ -7,6 +7,7 @@ from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
|
|||||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
||||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||||
from bot_core.abc.module_abc import ModuleABC
|
from bot_core.abc.module_abc import ModuleABC
|
||||||
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
from bot_core.events.core_on_ready_event import CoreOnReadyEvent
|
from bot_core.events.core_on_ready_event import CoreOnReadyEvent
|
||||||
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
|
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
|
||||||
@ -14,6 +15,7 @@ from bot_core.service.client_utils_service import ClientUtilsService
|
|||||||
from bot_core.service.config_service import ConfigService
|
from bot_core.service.config_service import ConfigService
|
||||||
from bot_core.service.data_integrity_service import DataIntegrityService
|
from bot_core.service.data_integrity_service import DataIntegrityService
|
||||||
from bot_core.service.message_service import MessageService
|
from bot_core.service.message_service import MessageService
|
||||||
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class CoreModule(ModuleABC):
|
class CoreModule(ModuleABC):
|
||||||
@ -28,6 +30,7 @@ class CoreModule(ModuleABC):
|
|||||||
services.add_transient(MessageServiceABC, MessageService)
|
services.add_transient(MessageServiceABC, MessageService)
|
||||||
services.add_transient(ClientUtilsABC, ClientUtilsService)
|
services.add_transient(ClientUtilsABC, ClientUtilsService)
|
||||||
services.add_transient(DataIntegrityService)
|
services.add_transient(DataIntegrityService)
|
||||||
|
services.add_singleton(PermissionServiceABC, PermissionService)
|
||||||
|
|
||||||
# pipes
|
# pipes
|
||||||
services.add_transient(DateTimeOffsetPipe)
|
services.add_transient(DateTimeOffsetPipe)
|
||||||
|
@ -7,7 +7,7 @@ from discord.ext.commands import Context
|
|||||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
||||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||||
from bot_core.exception.check_error import CheckError
|
from bot_core.exception.check_error import CheckError
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class CommandChecks:
|
class CommandChecks:
|
||||||
|
114
bot/src/bot_core/service/permission_service.py
Normal file
114
bot/src/bot_core/service/permission_service.py
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.logging import LoggerABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
|
||||||
|
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):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
logger: LoggerABC,
|
||||||
|
bot: DiscordBotServiceABC,
|
||||||
|
config: ConfigurationABC,
|
||||||
|
servers: ServerRepositoryABC,
|
||||||
|
server_configs: ServerConfigRepositoryABC,
|
||||||
|
technician_configs: TechnicianConfigRepositoryABC,
|
||||||
|
):
|
||||||
|
PermissionServiceABC.__init__(self)
|
||||||
|
self._logger = logger
|
||||||
|
self._bot = bot
|
||||||
|
self._config = config
|
||||||
|
self._servers = servers
|
||||||
|
self._server_configs = server_configs
|
||||||
|
self._technician_configs = technician_configs
|
||||||
|
|
||||||
|
# member_id: {team_member_type: {guild_id: bool}}
|
||||||
|
self._cache: dict[int, dict[TeamMemberTypeEnum, dict[int, bool]]] = {}
|
||||||
|
|
||||||
|
def reset_cache(self):
|
||||||
|
self._cache = {}
|
||||||
|
|
||||||
|
def get_cached_permission(
|
||||||
|
self, member_id: int, team_member_type: TeamMemberTypeEnum, guild_id: int = None
|
||||||
|
) -> Optional[bool]:
|
||||||
|
if member_id not in self._cache:
|
||||||
|
self._cache[member_id] = {}
|
||||||
|
|
||||||
|
if team_member_type not in self._cache[member_id]:
|
||||||
|
self._cache[member_id][team_member_type] = {}
|
||||||
|
return None
|
||||||
|
|
||||||
|
if guild_id not in self._cache[member_id][team_member_type]:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self._cache[member_id][team_member_type][guild_id]
|
||||||
|
|
||||||
|
def set_cached_permission(
|
||||||
|
self, value: bool, member_id: int, team_member_type: TeamMemberTypeEnum, guild_id: int = None
|
||||||
|
):
|
||||||
|
if member_id not in self._cache:
|
||||||
|
self._cache[member_id] = {}
|
||||||
|
|
||||||
|
if team_member_type not in self._cache[member_id]:
|
||||||
|
self._cache[member_id][team_member_type] = {}
|
||||||
|
|
||||||
|
self._cache[member_id][team_member_type][guild_id] = value
|
||||||
|
|
||||||
|
def _has_member_role(self, member: discord.Member, team_member_type: TeamMemberTypeEnum) -> bool:
|
||||||
|
if member is None or member.guild is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
has_permission_cached = self.get_cached_permission(member.id, team_member_type, member.guild.id)
|
||||||
|
if has_permission_cached is not None:
|
||||||
|
return has_permission_cached
|
||||||
|
|
||||||
|
self._logger.debug(__name__, f"Checking is member {member.name} {team_member_type.value}")
|
||||||
|
|
||||||
|
has_permission = True in [
|
||||||
|
member.guild.get_role(x.role_id) not in member.roles
|
||||||
|
for x in self._server_configs.get_server_config_by_server(
|
||||||
|
self._servers.get_server_by_discord_id(member.guild.id).id
|
||||||
|
).team_role_ids
|
||||||
|
if x.team_member_type == team_member_type
|
||||||
|
]
|
||||||
|
self.set_cached_permission(has_permission, member.id, team_member_type, member.guild.id)
|
||||||
|
return has_permission
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, "Permission check failed", e)
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def is_member_admin(self, member: discord.Member) -> bool:
|
||||||
|
return self._has_member_role(member, TeamMemberTypeEnum.admin)
|
||||||
|
|
||||||
|
def is_member_moderator(self, member: discord.Member) -> bool:
|
||||||
|
return self._has_member_role(member, TeamMemberTypeEnum.moderator) or self._has_member_role(
|
||||||
|
member, TeamMemberTypeEnum.admin
|
||||||
|
)
|
||||||
|
|
||||||
|
def is_member_technician(self, member: discord.Member) -> bool:
|
||||||
|
if member is None or member.guild is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
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.name} 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
|
@ -4,3 +4,4 @@ from enum import Enum
|
|||||||
class TeamMemberTypeEnum(Enum):
|
class TeamMemberTypeEnum(Enum):
|
||||||
moderator = "Moderator"
|
moderator = "Moderator"
|
||||||
admin = "Admin"
|
admin = "Admin"
|
||||||
|
technician = "Technician"
|
||||||
|
@ -12,6 +12,7 @@ from bot_api.exception.service_exception import ServiceException
|
|||||||
from bot_api.route.route import Route
|
from bot_api.route.route import Route
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
from bot_core.environment_variables import MAINTENANCE
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
|
from bot_core.service.permission_service import PermissionService
|
||||||
from bot_data.model.achievement import Achievement
|
from bot_data.model.achievement import Achievement
|
||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
from bot_data.model.auth_user import AuthUser
|
from bot_data.model.auth_user import AuthUser
|
||||||
@ -32,7 +33,6 @@ from bot_data.model.user_role_enum import UserRoleEnum
|
|||||||
from bot_graphql.abc.filter_abc import FilterABC
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
from bot_graphql.filter.page import Page
|
from bot_graphql.filter.page import Page
|
||||||
from bot_graphql.filter.sort import Sort
|
from bot_graphql.filter.sort import Sort
|
||||||
from modules.permission.service.permission_service import PermissionService
|
|
||||||
|
|
||||||
|
|
||||||
class QueryABC(ObjectType):
|
class QueryABC(ObjectType):
|
||||||
|
@ -6,7 +6,7 @@ from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
|||||||
from bot_data.model.achievement import Achievement
|
from bot_data.model.achievement import Achievement
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from modules.permission.service.permission_service import PermissionService
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class AchievementMutation(QueryABC):
|
class AchievementMutation(QueryABC):
|
||||||
|
@ -10,7 +10,7 @@ from bot_data.model.scheduled_event import ScheduledEvent
|
|||||||
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
|
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from modules.permission.service.permission_service import PermissionService
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class ScheduledEventMutation(QueryABC):
|
class ScheduledEventMutation(QueryABC):
|
||||||
|
@ -13,6 +13,7 @@ from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
|
|||||||
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
|
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class ServerConfigMutation(QueryABC):
|
class ServerConfigMutation(QueryABC):
|
||||||
@ -24,6 +25,7 @@ class ServerConfigMutation(QueryABC):
|
|||||||
server_configs: ServerConfigRepositoryABC,
|
server_configs: ServerConfigRepositoryABC,
|
||||||
db: DatabaseContextABC,
|
db: DatabaseContextABC,
|
||||||
config_service: ConfigService,
|
config_service: ConfigService,
|
||||||
|
permissions: PermissionService,
|
||||||
):
|
):
|
||||||
QueryABC.__init__(self, "ServerConfigMutation")
|
QueryABC.__init__(self, "ServerConfigMutation")
|
||||||
|
|
||||||
@ -33,6 +35,7 @@ class ServerConfigMutation(QueryABC):
|
|||||||
self._server_configs = server_configs
|
self._server_configs = server_configs
|
||||||
self._db = db
|
self._db = db
|
||||||
self._config_service = config_service
|
self._config_service = config_service
|
||||||
|
self._permissions = permissions
|
||||||
|
|
||||||
self.set_field("updateServerConfig", self.resolve_update_server_config)
|
self.set_field("updateServerConfig", self.resolve_update_server_config)
|
||||||
|
|
||||||
@ -175,11 +178,13 @@ class ServerConfigMutation(QueryABC):
|
|||||||
|
|
||||||
def _update_team_role_ids(self, new_config: ServerConfig):
|
def _update_team_role_ids(self, new_config: ServerConfig):
|
||||||
old_config = self._server_configs.get_server_config_by_server(new_config.server.id)
|
old_config = self._server_configs.get_server_config_by_server(new_config.server.id)
|
||||||
|
has_update = False
|
||||||
for role_id in old_config.team_role_ids:
|
for role_id in old_config.team_role_ids:
|
||||||
if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)):
|
if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
self._server_configs.delete_server_team_role_id_config(role_id)
|
self._server_configs.delete_server_team_role_id_config(role_id)
|
||||||
|
has_update = True
|
||||||
|
|
||||||
for role_id in new_config.team_role_ids:
|
for role_id in new_config.team_role_ids:
|
||||||
guild = self._bot.get_guild(new_config.server.discord_id)
|
guild = self._bot.get_guild(new_config.server.discord_id)
|
||||||
@ -192,3 +197,7 @@ class ServerConfigMutation(QueryABC):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
self._server_configs.add_server_team_role_id_config(role_id)
|
self._server_configs.add_server_team_role_id_config(role_id)
|
||||||
|
has_update = True
|
||||||
|
|
||||||
|
if has_update:
|
||||||
|
self._permissions.reset_cache()
|
||||||
|
@ -6,7 +6,7 @@ from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryA
|
|||||||
from bot_data.model.short_role_name import ShortRoleName
|
from bot_data.model.short_role_name import ShortRoleName
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from modules.permission.service.permission_service import PermissionService
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class ShortRoleNameMutation(QueryABC):
|
class ShortRoleNameMutation(QueryABC):
|
||||||
|
@ -16,6 +16,7 @@ from bot_data.model.technician_ping_url_config import TechnicianPingUrlConfig
|
|||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_data.service.technician_config_seeder import TechnicianConfigSeeder
|
from bot_data.service.technician_config_seeder import TechnicianConfigSeeder
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class TechnicianConfigMutation(QueryABC):
|
class TechnicianConfigMutation(QueryABC):
|
||||||
@ -30,6 +31,7 @@ class TechnicianConfigMutation(QueryABC):
|
|||||||
config_service: ConfigService,
|
config_service: ConfigService,
|
||||||
tech_seeder: TechnicianConfigSeeder,
|
tech_seeder: TechnicianConfigSeeder,
|
||||||
client_utils: ClientUtilsABC,
|
client_utils: ClientUtilsABC,
|
||||||
|
permissions: PermissionService,
|
||||||
):
|
):
|
||||||
QueryABC.__init__(self, "TechnicianConfigMutation")
|
QueryABC.__init__(self, "TechnicianConfigMutation")
|
||||||
|
|
||||||
@ -42,6 +44,7 @@ class TechnicianConfigMutation(QueryABC):
|
|||||||
self._config_service = config_service
|
self._config_service = config_service
|
||||||
self._tech_seeder = tech_seeder
|
self._tech_seeder = tech_seeder
|
||||||
self._client_utils = client_utils
|
self._client_utils = client_utils
|
||||||
|
self._permissions = permissions
|
||||||
|
|
||||||
self.set_field("updateTechnicianConfig", self.resolve_update_technician_config)
|
self.set_field("updateTechnicianConfig", self.resolve_update_technician_config)
|
||||||
|
|
||||||
@ -126,11 +129,13 @@ class TechnicianConfigMutation(QueryABC):
|
|||||||
|
|
||||||
def _update_technician_ids(self, new_config: TechnicianConfig):
|
def _update_technician_ids(self, new_config: TechnicianConfig):
|
||||||
old_config = self._technician_configs.get_technician_config()
|
old_config = self._technician_configs.get_technician_config()
|
||||||
|
has_update = False
|
||||||
for technician_id in old_config.technician_ids:
|
for technician_id in old_config.technician_ids:
|
||||||
if technician_id in new_config.technician_ids:
|
if technician_id in new_config.technician_ids:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
self._technician_configs.delete_technician_id_config(TechnicianIdConfig(technician_id))
|
self._technician_configs.delete_technician_id_config(TechnicianIdConfig(technician_id))
|
||||||
|
has_update = True
|
||||||
|
|
||||||
for technician_id in new_config.technician_ids:
|
for technician_id in new_config.technician_ids:
|
||||||
user = self._bot.get_user(technician_id)
|
user = self._bot.get_user(technician_id)
|
||||||
@ -142,3 +147,7 @@ class TechnicianConfigMutation(QueryABC):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
self._technician_configs.add_technician_id_config(TechnicianIdConfig(technician_id))
|
self._technician_configs.add_technician_id_config(TechnicianIdConfig(technician_id))
|
||||||
|
has_update = True
|
||||||
|
|
||||||
|
if has_update:
|
||||||
|
self._permissions.reset_cache()
|
||||||
|
@ -24,7 +24,7 @@ from bot_data.model.server_config import ServerConfig
|
|||||||
from bot_data.model.user_joined_game_server import UserJoinedGameServer
|
from bot_data.model.user_joined_game_server import UserJoinedGameServer
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from modules.permission.service.permission_service import PermissionService
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class UserJoinedGameServerMutation(QueryABC):
|
class UserJoinedGameServerMutation(QueryABC):
|
||||||
|
@ -13,7 +13,7 @@ from bot_data.model.user_role_enum import UserRoleEnum
|
|||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from modules.base.service.user_warnings_service import UserWarningsService
|
from modules.base.service.user_warnings_service import UserWarningsService
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.service.permission_service import PermissionService
|
from bot_core.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class UserMutation(QueryABC):
|
class UserMutation(QueryABC):
|
||||||
|
@ -22,7 +22,7 @@ from bot_graphql.filter.user_joined_voice_channel_filter import (
|
|||||||
)
|
)
|
||||||
from bot_graphql.filter.user_warning_filter import UserWarningFilter
|
from bot_graphql.filter.user_warning_filter import UserWarningFilter
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class UserQuery(DataQueryWithHistoryABC):
|
class UserQuery(DataQueryWithHistoryABC):
|
||||||
|
@ -22,7 +22,7 @@ from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
|||||||
from bot_data.model.auto_role import AutoRole
|
from bot_data.model.auto_role import AutoRole
|
||||||
from bot_data.model.auto_role_rule import AutoRoleRule
|
from bot_data.model.auto_role_rule import AutoRoleRule
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class AutoRoleGroup(DiscordCommandABC):
|
class AutoRoleGroup(DiscordCommandABC):
|
||||||
|
@ -23,7 +23,7 @@ from bot_data.abc.user_game_ident_repository_abc import UserGameIdentRepositoryA
|
|||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from bot_data.model.game_server import GameServer
|
from bot_data.model.game_server import GameServer
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class GameServerGroup(DiscordCommandABC):
|
class GameServerGroup(DiscordCommandABC):
|
||||||
|
@ -11,7 +11,7 @@ from bot_core.helper.command_checks import CommandChecks
|
|||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.model.technician_config import TechnicianConfig
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class PingCommand(DiscordCommandABC):
|
class PingCommand(DiscordCommandABC):
|
||||||
|
@ -11,7 +11,7 @@ from bot_core.abc.message_service_abc import MessageServiceABC
|
|||||||
from bot_core.helper.command_checks import CommandChecks
|
from bot_core.helper.command_checks import CommandChecks
|
||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class PurgeCommand(DiscordCommandABC):
|
class PurgeCommand(DiscordCommandABC):
|
||||||
|
@ -27,7 +27,7 @@ from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
|||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.base.service.user_warnings_service import UserWarningsService
|
from modules.base.service.user_warnings_service import UserWarningsService
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class UserGroup(DiscordCommandABC):
|
class UserGroup(DiscordCommandABC):
|
||||||
|
@ -20,7 +20,7 @@ from bot_data.model.known_user import KnownUser
|
|||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from bot_data.model.user_joined_server import UserJoinedServer
|
from bot_data.model.user_joined_server import UserJoinedServer
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class BaseOnMemberJoinEvent(OnMemberJoinABC):
|
class BaseOnMemberJoinEvent(OnMemberJoinABC):
|
||||||
|
@ -8,7 +8,7 @@ from bot_core.abc.message_service_abc import MessageServiceABC
|
|||||||
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.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class BaseOnVoiceStateUpdateEventHelpChannel(OnVoiceStateUpdateABC):
|
class BaseOnVoiceStateUpdateEventHelpChannel(OnVoiceStateUpdateABC):
|
||||||
|
@ -14,7 +14,7 @@ from bot_data.model.server_config import ServerConfig
|
|||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from bot_data.model.user_warnings import UserWarnings
|
from bot_data.model.user_warnings import UserWarnings
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class UserWarningsService:
|
class UserWarningsService:
|
||||||
|
@ -24,7 +24,7 @@ from bot_data.model.level import Level
|
|||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.level.level_seeder import LevelSeeder
|
from modules.level.level_seeder import LevelSeeder
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class LevelGroup(DiscordCommandABC):
|
class LevelGroup(DiscordCommandABC):
|
||||||
|
@ -6,6 +6,8 @@ from cpl_discord.container import Guild, Role, Member
|
|||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from cpl_translation import TranslatePipe
|
from cpl_translation import TranslatePipe
|
||||||
|
|
||||||
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
from bot_core.service.message_service import MessageService
|
from bot_core.service.message_service import MessageService
|
||||||
from bot_data.model.level import Level
|
from bot_data.model.level import Level
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
@ -38,7 +40,14 @@ class LevelService:
|
|||||||
self._message_service = message_service
|
self._message_service = message_service
|
||||||
self._t = t
|
self._t = t
|
||||||
|
|
||||||
|
def _check_for_feature(self, user: User):
|
||||||
|
server_config: ServerConfig = self._config.get_configuration(f"ServerConfig_{user.server.discord_id}")
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(server_config.feature_flags, FeatureFlagsEnum.level_module):
|
||||||
|
raise Exception(f"Feature {FeatureFlagsEnum.level_module.value} disabled")
|
||||||
|
|
||||||
def get_level(self, user: User) -> Level:
|
def get_level(self, user: User) -> Level:
|
||||||
|
self._check_for_feature(user)
|
||||||
|
|
||||||
levels_by_server = self._levels.get_levels_by_server_id(user.server.id)
|
levels_by_server = self._levels.get_levels_by_server_id(user.server.id)
|
||||||
if user.xp < 0:
|
if user.xp < 0:
|
||||||
return levels_by_server.order_by(lambda l: l.min_xp).first()
|
return levels_by_server.order_by(lambda l: l.min_xp).first()
|
||||||
@ -51,6 +60,7 @@ class LevelService:
|
|||||||
return levels.last()
|
return levels.last()
|
||||||
|
|
||||||
async def set_level(self, user: User):
|
async def set_level(self, user: User):
|
||||||
|
self._check_for_feature(user)
|
||||||
level_names = self._levels.get_levels_by_server_id(user.server.id).select(lambda l: l.name)
|
level_names = self._levels.get_levels_by_server_id(user.server.id).select(lambda l: l.name)
|
||||||
guild: Guild = self._bot.guilds.where(lambda g: g.id == user.server.discord_id).single()
|
guild: Guild = self._bot.guilds.where(lambda g: g.id == user.server.discord_id).single()
|
||||||
member: Member = guild.members.where(lambda m: m.id == user.discord_id).single()
|
member: Member = guild.members.where(lambda m: m.id == user.discord_id).single()
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
|
||||||
bot sh-edraft.de Discord bot
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Discord bot for customers of sh-edraft.de
|
|
||||||
|
|
||||||
:copyright: (c) 2022 - 2023 sh-edraft.de
|
|
||||||
:license: MIT, see LICENSE for more details.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__title__ = "modules.permission"
|
|
||||||
__author__ = "Sven Heidemann"
|
|
||||||
__license__ = "MIT"
|
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
|
||||||
__version__ = "1.2.2"
|
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="2")
|
|
@ -1,26 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
|
||||||
bot sh-edraft.de Discord bot
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Discord bot for customers of sh-edraft.de
|
|
||||||
|
|
||||||
:copyright: (c) 2022 - 2023 sh-edraft.de
|
|
||||||
:license: MIT, see LICENSE for more details.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__title__ = "modules.permission.abc"
|
|
||||||
__author__ = "Sven Heidemann"
|
|
||||||
__license__ = "MIT"
|
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
|
||||||
__version__ = "1.2.2"
|
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
|
|
||||||
# imports
|
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="2")
|
|
@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"ProjectSettings": {
|
|
||||||
"Name": "permission",
|
|
||||||
"Version": {
|
|
||||||
"Major": "1",
|
|
||||||
"Minor": "2",
|
|
||||||
"Micro": "2"
|
|
||||||
},
|
|
||||||
"Author": "",
|
|
||||||
"AuthorEmail": "",
|
|
||||||
"Description": "",
|
|
||||||
"LongDescription": "",
|
|
||||||
"URL": "",
|
|
||||||
"CopyrightDate": "",
|
|
||||||
"CopyrightName": "",
|
|
||||||
"LicenseName": "",
|
|
||||||
"LicenseDescription": "",
|
|
||||||
"Dependencies": [
|
|
||||||
"cpl-core==2022.12.0"
|
|
||||||
],
|
|
||||||
"DevDependencies": [
|
|
||||||
"cpl-cli==2022.12.0"
|
|
||||||
],
|
|
||||||
"PythonVersion": ">=3.10.4",
|
|
||||||
"PythonPath": {},
|
|
||||||
"Classifiers": []
|
|
||||||
},
|
|
||||||
"BuildSettings": {
|
|
||||||
"ProjectType": "library",
|
|
||||||
"SourcePath": "",
|
|
||||||
"OutputPath": "../../dist",
|
|
||||||
"Main": "permission.main",
|
|
||||||
"EntryPoint": "permission",
|
|
||||||
"IncludePackageData": false,
|
|
||||||
"Included": [],
|
|
||||||
"Excluded": [
|
|
||||||
"*/__pycache__",
|
|
||||||
"*/logs",
|
|
||||||
"*/tests"
|
|
||||||
],
|
|
||||||
"PackageData": {},
|
|
||||||
"ProjectReferences": []
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
from cpl_core.configuration import ConfigurationABC
|
|
||||||
from cpl_core.dependency_injection import ServiceCollectionABC
|
|
||||||
from cpl_core.environment import ApplicationEnvironmentABC
|
|
||||||
from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
|
|
||||||
|
|
||||||
from bot_core.abc.module_abc import ModuleABC
|
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
|
||||||
from modules.permission.service.permission_service import PermissionService
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionModule(ModuleABC):
|
|
||||||
def __init__(self, dc: DiscordCollectionABC):
|
|
||||||
ModuleABC.__init__(self, dc, FeatureFlagsEnum.permission_module)
|
|
||||||
|
|
||||||
def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
|
|
||||||
services.add_transient(PermissionServiceABC, PermissionService)
|
|
||||||
# commands
|
|
||||||
# events
|
|
@ -1,26 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
|
||||||
bot sh-edraft.de Discord bot
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Discord bot for customers of sh-edraft.de
|
|
||||||
|
|
||||||
:copyright: (c) 2022 - 2023 sh-edraft.de
|
|
||||||
:license: MIT, see LICENSE for more details.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__title__ = "modules.permission.service"
|
|
||||||
__author__ = "Sven Heidemann"
|
|
||||||
__license__ = "MIT"
|
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
|
||||||
__version__ = "1.2.2"
|
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
|
|
||||||
# imports
|
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="2")
|
|
@ -1,74 +0,0 @@
|
|||||||
import discord
|
|
||||||
from cpl_core.configuration import ConfigurationABC
|
|
||||||
from cpl_core.logging import LoggerABC
|
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
|
||||||
|
|
||||||
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 modules.permission.abc.permission_service_abc import PermissionServiceABC
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionService(PermissionServiceABC):
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
logger: LoggerABC,
|
|
||||||
bot: DiscordBotServiceABC,
|
|
||||||
config: ConfigurationABC,
|
|
||||||
servers: ServerRepositoryABC,
|
|
||||||
server_configs: ServerConfigRepositoryABC,
|
|
||||||
technician_configs: TechnicianConfigRepositoryABC,
|
|
||||||
):
|
|
||||||
PermissionServiceABC.__init__(self)
|
|
||||||
self._logger = logger
|
|
||||||
self._bot = bot
|
|
||||||
self._config = config
|
|
||||||
self._servers = servers
|
|
||||||
self._server_configs = server_configs
|
|
||||||
self._technician_configs = technician_configs
|
|
||||||
|
|
||||||
def _has_member_role(self, member: discord.Member, team_member_type: TeamMemberTypeEnum) -> bool:
|
|
||||||
if member is None or member.guild is None:
|
|
||||||
return False
|
|
||||||
|
|
||||||
self._logger.debug(__name__, f"Checking is member {member.name} {team_member_type.value}")
|
|
||||||
|
|
||||||
try:
|
|
||||||
server = self._servers.get_server_by_discord_id(member.guild.id)
|
|
||||||
config = self._server_configs.get_server_config_by_server(server.id)
|
|
||||||
roles = config.team_role_ids.where(lambda x: x.team_member_type == team_member_type).select(
|
|
||||||
lambda x: member.guild.get_role(x.role_id)
|
|
||||||
)
|
|
||||||
for role in roles:
|
|
||||||
if role not in member.roles:
|
|
||||||
continue
|
|
||||||
|
|
||||||
return True
|
|
||||||
except Exception as e:
|
|
||||||
self._logger.error(__name__, "Permission check failed", e)
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def is_member_admin(self, member: discord.Member) -> bool:
|
|
||||||
return self._has_member_role(member, TeamMemberTypeEnum.admin)
|
|
||||||
|
|
||||||
def is_member_moderator(self, member: discord.Member) -> bool:
|
|
||||||
return self._has_member_role(member, TeamMemberTypeEnum.moderator) or self._has_member_role(
|
|
||||||
member, TeamMemberTypeEnum.admin
|
|
||||||
)
|
|
||||||
|
|
||||||
def is_member_technician(self, member: discord.Member) -> bool:
|
|
||||||
if member is None or member.guild is None:
|
|
||||||
return False
|
|
||||||
|
|
||||||
self._logger.debug(__name__, f"Checking is member {member.name} technician")
|
|
||||||
|
|
||||||
try:
|
|
||||||
tech_config = self._technician_configs.get_technician_config()
|
|
||||||
if member.id in tech_config.technician_ids:
|
|
||||||
return True
|
|
||||||
except Exception as e:
|
|
||||||
self._logger.error(__name__, "Permission check failed", e)
|
|
||||||
|
|
||||||
return False
|
|
@ -11,7 +11,7 @@ from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
|||||||
from bot_core.helper.command_checks import CommandChecks
|
from bot_core.helper.command_checks import CommandChecks
|
||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
from modules.short_role_name.service.short_role_name_service import ShortRoleNameService
|
from modules.short_role_name.service.short_role_name_service import ShortRoleNameService
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
|
|||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from bot_data.model.api_key import ApiKey
|
from bot_data.model.api_key import ApiKey
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class ApiKeyGroup(DiscordCommandABC):
|
class ApiKeyGroup(DiscordCommandABC):
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import os
|
import os
|
||||||
from string import Template
|
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@ -18,7 +17,7 @@ from bot_core.abc.custom_file_logger_abc import CustomFileLoggerABC
|
|||||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||||
from bot_core.helper.command_checks import CommandChecks
|
from bot_core.helper.command_checks import CommandChecks
|
||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class LogCommand(DiscordCommandABC):
|
class LogCommand(DiscordCommandABC):
|
||||||
|
@ -13,7 +13,7 @@ from bot_core.helper.command_checks import CommandChecks
|
|||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from bot_core.service.data_integrity_service import DataIntegrityService
|
from bot_core.service.data_integrity_service import DataIntegrityService
|
||||||
from bot_data.model.technician_config import TechnicianConfig
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class RestartCommand(DiscordCommandABC):
|
class RestartCommand(DiscordCommandABC):
|
||||||
|
@ -13,7 +13,7 @@ from bot_core.helper.command_checks import CommandChecks
|
|||||||
from bot_core.logging.command_logger import CommandLogger
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
from bot_core.service.data_integrity_service import DataIntegrityService
|
from bot_core.service.data_integrity_service import DataIntegrityService
|
||||||
from bot_data.model.technician_config import TechnicianConfig
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class ShutdownCommand(DiscordCommandABC):
|
class ShutdownCommand(DiscordCommandABC):
|
||||||
|
@ -20,7 +20,7 @@ from bot_data.model.server_config import ServerConfig
|
|||||||
from bot_data.model.technician_config import TechnicianConfig
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
from bot_core.abc.permission_service_abc import PermissionServiceABC
|
||||||
|
|
||||||
|
|
||||||
class SyncXpGroup(DiscordCommandABC):
|
class SyncXpGroup(DiscordCommandABC):
|
||||||
|
@ -113,6 +113,7 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe
|
|||||||
{ label: this.translate.instant("common.bool_as_string.true"), value: false },
|
{ label: this.translate.instant("common.bool_as_string.true"), value: false },
|
||||||
{ label: this.translate.instant("common.bool_as_string.false"), value: true }
|
{ label: this.translate.instant("common.bool_as_string.false"), value: true }
|
||||||
];
|
];
|
||||||
|
this.spinner.hideSpinner();
|
||||||
this.loadNextPage();
|
this.loadNextPage();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -123,7 +124,8 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadNextPage() {
|
loadNextPage() {
|
||||||
this.spinner.showSpinner();
|
if (!this.server?.id) return;
|
||||||
|
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.data.query<UserListQuery>(Queries.usersQuery, {
|
this.data.query<UserListQuery>(Queries.usersQuery, {
|
||||||
serverId: this.server.id, filter: this.filter, page: this.page, sort: this.sort
|
serverId: this.server.id, filter: this.filter, page: this.page, sort: this.sort
|
||||||
@ -134,7 +136,6 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe
|
|||||||
).subscribe(data => {
|
).subscribe(data => {
|
||||||
this.totalRecords = data.userCount;
|
this.totalRecords = data.userCount;
|
||||||
this.members = data.users;
|
this.members = data.users;
|
||||||
this.spinner.hideSpinner();
|
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user