From d927ab8fb754ecb51ba62f77ae2d8f3933f2af6f Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 2 Dec 2023 17:37:50 +0100 Subject: [PATCH 01/12] Changed normal data collection to list comprehensions p1 #446 --- ...r_joined_game_server_repository_service.py | 47 ++++---- .../user_joined_server_repository_service.py | 98 +++++------------ ...joined_voice_channel_repository_service.py | 103 ++++++------------ ...ssage_count_per_hour_repository_service.py | 27 ++--- .../service/user_repository_service.py | 45 +++----- .../user_warnings_repository_service.py | 25 ++--- 6 files changed, 122 insertions(+), 223 deletions(-) diff --git a/bot/src/bot_data/service/user_joined_game_server_repository_service.py b/bot/src/bot_data/service/user_joined_game_server_repository_service.py index e9ded8ba..a04fb2c2 100644 --- a/bot/src/bot_data/service/user_joined_game_server_repository_service.py +++ b/bot/src/bot_data/service/user_joined_game_server_repository_service.py @@ -39,45 +39,45 @@ class UserJoinedGameServerRepositoryService(UserJoinedGameServerRepositoryABC): ) def get_user_joined_game_servers(self) -> List[UserJoinedGameServer]: - joins = List(UserJoinedGameServer) self._logger.trace( __name__, f"Send SQL command: {UserJoinedGameServer.get_select_all_string()}", ) - results = self._context.select(UserJoinedGameServer.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user-joined-game-server with id {result[0]}") - joins.append(self._from_result(result)) - return joins + return List( + UserJoinedGameServer, + [self._from_result(join) for join in self._context.select(UserJoinedGameServer.get_select_all_string())], + ) def get_user_joined_game_server_by_id(self, id: int) -> UserJoinedGameServer: self._logger.trace( __name__, f"Send SQL command: {UserJoinedGameServer.get_select_by_id_string(id)}", ) - result = self._context.select(UserJoinedGameServer.get_select_by_id_string(id))[0] - return self._from_result(result) + return self._from_result(self._context.select(UserJoinedGameServer.get_select_by_id_string(id))[0]) def get_user_joined_game_servers_by_user_id(self, user_id: int) -> List[UserJoinedGameServer]: - joins = List(UserJoinedGameServer) self._logger.trace( __name__, f"Send SQL command: {UserJoinedGameServer.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserJoinedGameServer.get_select_by_user_id_string(user_id)) - for result in results: - joins.append(self._from_result(result)) - return joins + return List( + UserJoinedGameServer, + [ + self._from_result(join) + for join in self._context.select(UserJoinedGameServer.get_select_by_user_id_string(user_id)) + ], + ) def get_active_user_joined_game_server_by_user_id(self, user_id: int) -> UserJoinedGameServer: self._logger.trace( __name__, f"Send SQL command: {UserJoinedGameServer.get_select_by_user_id_string(user_id)}", ) - result = self._context.select(UserJoinedGameServer.get_select_active_by_user_id_string(user_id))[0] - return self._from_result(result) + return self._from_result( + self._context.select(UserJoinedGameServer.get_select_active_by_user_id_string(user_id))[0] + ) def find_active_user_joined_game_server_by_user_id(self, user_id: int) -> Optional[UserJoinedGameServer]: self._logger.trace( @@ -88,22 +88,21 @@ class UserJoinedGameServerRepositoryService(UserJoinedGameServerRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._from_result(result) + return self._from_result(result[0]) def find_active_user_joined_game_servers_by_user_id(self, user_id: int) -> List[Optional[UserJoinedGameServer]]: self._logger.trace( __name__, f"Send SQL command: {UserJoinedGameServer.get_select_active_by_user_id_string(user_id)}", ) - result = List(UserJoinedGameServer) - db_results = self._context.select(UserJoinedGameServer.get_select_active_by_user_id_string(user_id)) - for db_result in db_results: - result.append(self._from_result(db_result)) - - return result + return List( + UserJoinedGameServer, + [ + self._from_result(join) + for join in self._context.select(UserJoinedGameServer.get_select_active_by_user_id_string(user_id)) + ], + ) def add_user_joined_game_server(self, user_joined_game_server: UserJoinedGameServer): self._logger.trace(__name__, f"Send SQL command: {user_joined_game_server.insert_string}") diff --git a/bot/src/bot_data/service/user_joined_server_repository_service.py b/bot/src/bot_data/service/user_joined_server_repository_service.py index abd0a17b..affa9585 100644 --- a/bot/src/bot_data/service/user_joined_server_repository_service.py +++ b/bot/src/bot_data/service/user_joined_server_repository_service.py @@ -23,89 +23,58 @@ class UserJoinedServerRepositoryService(UserJoinedServerRepositoryABC): UserJoinedServerRepositoryABC.__init__(self) - def get_user_joined_servers(self) -> List[UserJoinedServer]: - joins = List(UserJoinedServer) - self._logger.trace(__name__, f"Send SQL command: {UserJoinedServer.get_select_all_string()}") - results = self._context.select(UserJoinedServer.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user-joined-server with id {result[0]}") - joins.append( - UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) + def __from_result(self, result: tuple) -> UserJoinedServer: + return UserJoinedServer( + self._users.get_user_by_id(result[1]), + result[2], + result[3], + result[4], + result[5], + id=result[0], + ) - return joins + def get_user_joined_servers(self) -> List[UserJoinedServer]: + self._logger.trace(__name__, f"Send SQL command: {UserJoinedServer.get_select_all_string()}") + + return List( + UserJoinedServer, + [self.__from_result(join) for join in self._context.select(UserJoinedServer.get_select_all_string())], + ) def get_user_joined_server_by_id(self, id: int) -> UserJoinedServer: self._logger.trace( __name__, f"Send SQL command: {UserJoinedServer.get_select_by_id_string(id)}", ) - result = self._context.select(UserJoinedServer.get_select_by_id_string(id))[0] - return UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self.__from_result(self._context.select(UserJoinedServer.get_select_by_id_string(id))[0]) def get_user_joined_server_by_server_id(self, server_id: int) -> UserJoinedServer: self._logger.trace( __name__, - f"Send SQL command: {UserJoinedServer.get(id)}", - ) - result = self._context.select(UserJoinedServer.get_select_by_id_string(id))[0] - return UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], + f"Send SQL command: {UserJoinedServer.get_select_by_server_id_string(server_id)}", ) + return self.__from_result(self._context.select(UserJoinedServer.get_select_by_id_string(server_id))[0]) def get_user_joined_servers_by_user_id(self, user_id: int) -> List[UserJoinedServer]: - joins = List(UserJoinedServer) self._logger.trace( __name__, f"Send SQL command: {UserJoinedServer.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserJoinedServer.get_select_by_user_id_string(user_id)) - for result in results: - joins.append( - UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - - return joins + return List( + UserJoinedServer, + [ + self.__from_result(join) + for join in self._context.select(UserJoinedServer.get_select_by_user_id_string(user_id)) + ], + ) def get_active_user_joined_server_by_user_id(self, user_id: int) -> UserJoinedServer: self._logger.trace( __name__, f"Send SQL command: {UserJoinedServer.get_select_by_user_id_string(user_id)}", ) - result = self._context.select(UserJoinedServer.get_select_active_by_user_id_string(user_id))[0] - return UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], + return self.__from_result( + self._context.select(UserJoinedServer.get_select_active_by_user_id_string(user_id))[0] ) def find_active_user_joined_server_by_user_id(self, user_id: int) -> Optional[UserJoinedServer]: @@ -117,16 +86,7 @@ class UserJoinedServerRepositoryService(UserJoinedServerRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return UserJoinedServer( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self.__from_result(result[0]) def add_user_joined_server(self, user_joined_server: UserJoinedServer): self._logger.trace(__name__, f"Send SQL command: {user_joined_server.insert_string}") diff --git a/bot/src/bot_data/service/user_joined_voice_channel_repository_service.py b/bot/src/bot_data/service/user_joined_voice_channel_repository_service.py index c441d26a..f2866920 100644 --- a/bot/src/bot_data/service/user_joined_voice_channel_repository_service.py +++ b/bot/src/bot_data/service/user_joined_voice_channel_repository_service.py @@ -25,77 +25,55 @@ class UserJoinedVoiceChannelRepositoryService(UserJoinedVoiceChannelRepositoryAB UserJoinedVoiceChannelRepositoryABC.__init__(self) + def __from_result(self, result: tuple) -> UserJoinedVoiceChannel: + return UserJoinedVoiceChannel( + self._users.get_user_by_id(result[1]), + result[2], + result[3], + result[4], + result[5], + id=result[0], + ) + def get_user_joined_voice_channels(self) -> List[UserJoinedVoiceChannel]: - joins = List(UserJoinedVoiceChannel) self._logger.trace( __name__, f"Send SQL command: {UserJoinedVoiceChannel.get_select_all_string()}", ) - results = self._context.select(UserJoinedVoiceChannel.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user-joined-voice-channel with id {result[0]}") - joins.append( - UserJoinedVoiceChannel( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - return joins + return List( + UserJoinedVoiceChannel, + [self.__from_result(join) for join in self._context.select(UserJoinedVoiceChannel.get_select_all_string())], + ) def get_user_joined_voice_channel_by_id(self, id: int) -> UserJoinedVoiceChannel: self._logger.trace( __name__, f"Send SQL command: {UserJoinedVoiceChannel.get_select_by_id_string(id)}", ) - result = self._context.select(UserJoinedVoiceChannel.get_select_by_id_string(id))[0] - return UserJoinedVoiceChannel( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self.__from_result(self._context.select(UserJoinedVoiceChannel.get_select_by_id_string(id))[0]) def get_user_joined_voice_channels_by_user_id(self, user_id: int) -> List[UserJoinedVoiceChannel]: - joins = List(UserJoinedVoiceChannel) self._logger.trace( __name__, f"Send SQL command: {UserJoinedVoiceChannel.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserJoinedVoiceChannel.get_select_by_user_id_string(user_id)) - for result in results: - joins.append( - UserJoinedVoiceChannel( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - return joins + return List( + UserJoinedVoiceChannel, + [ + self.__from_result(join) + for join in self._context.select(UserJoinedVoiceChannel.get_select_by_user_id_string(user_id)) + ], + ) def get_active_user_joined_voice_channel_by_user_id(self, user_id: int) -> UserJoinedVoiceChannel: self._logger.trace( __name__, f"Send SQL command: {UserJoinedVoiceChannel.get_select_by_user_id_string(user_id)}", ) - result = self._context.select(UserJoinedVoiceChannel.get_select_active_by_user_id_string(user_id))[0] - return UserJoinedVoiceChannel( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], + return self.__from_result( + self._context.select(UserJoinedVoiceChannel.get_select_active_by_user_id_string(user_id))[0] ) def find_active_user_joined_voice_channel_by_user_id(self, user_id: int) -> Optional[UserJoinedVoiceChannel]: @@ -107,38 +85,21 @@ class UserJoinedVoiceChannelRepositoryService(UserJoinedVoiceChannelRepositoryAB if result is None or len(result) == 0: return None - result = result[0] - - return UserJoinedVoiceChannel( - self._users.get_user_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self.__from_result(result[0]) def find_active_user_joined_voice_channels_by_user_id(self, user_id: int) -> List[Optional[UserJoinedVoiceChannel]]: self._logger.trace( __name__, f"Send SQL command: {UserJoinedVoiceChannel.get_select_active_by_user_id_string(user_id)}", ) - result = List(UserJoinedVoiceChannel) - db_results = self._context.select(UserJoinedVoiceChannel.get_select_active_by_user_id_string(user_id)) - for db_result in db_results: - result.append( - UserJoinedVoiceChannel( - self._users.get_user_by_id(db_result[1]), - db_result[2], - db_result[3], - db_result[4], - db_result[5], - id=db_result[0], - ) - ) - - return result + return List( + UserJoinedVoiceChannel, + [ + self.__from_result(join) + for join in self._context.select(UserJoinedVoiceChannel.get_select_active_by_user_id_string(user_id)) + ], + ) def add_user_joined_voice_channel(self, user_joined_voice_channel: UserJoinedVoiceChannel): self._logger.trace(__name__, f"Send SQL command: {user_joined_voice_channel.insert_string}") diff --git a/bot/src/bot_data/service/user_message_count_per_hour_repository_service.py b/bot/src/bot_data/service/user_message_count_per_hour_repository_service.py index e63db818..91ef049c 100644 --- a/bot/src/bot_data/service/user_message_count_per_hour_repository_service.py +++ b/bot/src/bot_data/service/user_message_count_per_hour_repository_service.py @@ -44,39 +44,30 @@ class UserMessageCountPerHourRepositoryService(UserMessageCountPerHourRepository ) def get_user_message_count_per_hours(self) -> List[UserMessageCountPerHour]: - umcphs = List(UserMessageCountPerHour) self._logger.trace( __name__, f"Send SQL command: {UserMessageCountPerHour.get_select_all_string()}", ) - results = self._context.select(UserMessageCountPerHour.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user message count per hour with id {result[0]}") - umcphs.append(self._from_result(result)) - return umcphs + return List( + UserMessageCountPerHour, + [ + self._from_result(umcphs) + for umcphs in self._context.select(UserMessageCountPerHour.get_select_all_string()) + ], + ) def find_user_message_count_per_hour_by_user_id(self, user_id: int) -> List[Optional[UserMessageCountPerHour]]: - umcphs = List(UserMessageCountPerHour) sql = UserMessageCountPerHour.get_select_by_user_id_string(user_id) self._logger.trace(__name__, f"Send SQL command: {sql}") - results = self._context.select(sql) - if results is None or len(results) == 0: - return umcphs - - for result in results: - self._logger.trace(__name__, f"Get user message count per hour with id {result[0]}") - umcphs.append(self._from_result(result)) - - return umcphs + return List(UserMessageCountPerHour, [self._from_result(umcphs) for umcphs in self._context.select(sql)]) def get_user_message_count_per_hour_by_user_id_and_date( self, user_id: int, date: datetime ) -> UserMessageCountPerHour: sql = UserMessageCountPerHour.get_select_by_user_id_and_date_string(user_id, date) self._logger.trace(__name__, f"Send SQL command: {sql}") - result = self._context.select(sql)[0] - return self._from_result(result) + return self._from_result(self._context.select(sql)[0]) def find_user_message_count_per_hour_by_user_id_and_date( self, user_id: int, date: datetime diff --git a/bot/src/bot_data/service/user_repository_service.py b/bot/src/bot_data/service/user_repository_service.py index 940156a8..90e501c7 100644 --- a/bot/src/bot_data/service/user_repository_service.py +++ b/bot/src/bot_data/service/user_repository_service.py @@ -1,4 +1,3 @@ -import datetime from typing import Optional from cpl_core.database.context import DatabaseContextABC @@ -38,14 +37,8 @@ class UserRepositoryService(UserRepositoryABC): ) def get_users(self) -> List[User]: - users = List(User) self._logger.trace(__name__, f"Send SQL command: {User.get_select_all_string()}") - results = self._context.select(User.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user with id {result[0]}") - users.append(self._from_result(result)) - - return users + return List(User, [self._from_result(user) for user in self._context.select(User.get_select_all_string())]) def get_user_by_id(self, id: int) -> User: self._logger.trace(__name__, f"Send SQL command: {User.get_select_by_id_string(id)}") @@ -59,42 +52,40 @@ class UserRepositoryService(UserRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._from_result(result) + return self._from_result(result[0]) def get_users_by_discord_id(self, discord_id: int) -> List[User]: - users = List(User) self._logger.trace( __name__, f"Send SQL command: {User.get_select_by_discord_id_string(discord_id)}", ) - results = self._context.select(User.get_select_by_discord_id_string(discord_id)) - for result in results: - users.append(self._from_result(result)) - - return users + return List( + User, + [ + self._from_result(user) + for user in self._context.select(User.get_select_by_discord_id_string(discord_id)) + ], + ) def get_users_by_server_id(self, server_id: int) -> List[User]: - users = List(User) self._logger.trace( __name__, f"Send SQL command: {User.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(User.get_select_by_server_id_string(server_id)) - for result in results: - users.append(self._from_result(result)) - - return users + return List( + User, + [self._from_result(user) for user in self._context.select(User.get_select_by_server_id_string(server_id))], + ) def get_user_by_discord_id_and_server_id(self, discord_id: int, server_id: int) -> User: self._logger.trace( __name__, f"Send SQL command: {User.get_select_by_discord_id_and_server_id_string(discord_id, server_id)}", ) - result = self._context.select(User.get_select_by_discord_id_and_server_id_string(discord_id, server_id))[0] - return self._from_result(result) + return self._from_result( + self._context.select(User.get_select_by_discord_id_and_server_id_string(discord_id, server_id))[0] + ) def find_user_by_discord_id_and_server_id(self, discord_id: int, server_id: int) -> Optional[User]: self._logger.trace( @@ -105,9 +96,7 @@ class UserRepositoryService(UserRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._from_result(result) + return self._from_result(result[0]) def add_user(self, user: User): self._logger.trace(__name__, f"Send SQL command: {user.insert_string}") diff --git a/bot/src/bot_data/service/user_warnings_repository_service.py b/bot/src/bot_data/service/user_warnings_repository_service.py index fbf7c4ee..bae46987 100644 --- a/bot/src/bot_data/service/user_warnings_repository_service.py +++ b/bot/src/bot_data/service/user_warnings_repository_service.py @@ -46,30 +46,29 @@ class UserWarningsRepositoryService(UserWarningsRepositoryABC): ) def get_user_warnings(self) -> List[UserWarnings]: - warnings = List(UserWarnings) self._logger.trace(__name__, f"Send SQL command: {UserWarnings.get_select_all_string()}") - results = self._context.select(UserWarnings.get_select_all_string()) - for result in results: - warnings.append(self._from_result(result)) - - return warnings + return List( + UserWarnings, + [self._from_result(warning) for warning in self._context.select(UserWarnings.get_select_all_string())], + ) def get_user_warnings_by_id(self, id: int) -> UserWarnings: self._logger.trace(__name__, f"Send SQL command: {UserWarnings.get_select_by_id_string(id)}") - result = self._context.select(UserWarnings.get_select_by_id_string(id))[0] - return self._from_result(result) + return self._from_result(self._context.select(UserWarnings.get_select_by_id_string(id))[0]) def get_user_warnings_by_user_id(self, user_id: int) -> List[UserWarnings]: - warnings = List(UserWarnings) self._logger.trace( __name__, f"Send SQL command: {UserWarnings.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserWarnings.get_select_by_user_id_string(user_id)) - for result in results: - warnings.append(self._from_result(result)) - return warnings + return List( + UserWarnings, + [ + self._from_result(warning) + for warning in self._context.select(UserWarnings.get_select_by_user_id_string(user_id)) + ], + ) def add_user_warnings(self, user_warnings: UserWarnings): self._logger.trace(__name__, f"Send SQL command: {user_warnings.insert_string}") From b6b9bfabf55371b342a0b8ac8d29254adce09190 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 2 Dec 2023 17:53:23 +0100 Subject: [PATCH 02/12] Changed normal data collection to list comprehensions p2 #446 --- .../server_config_repository_service.py | 36 ++++++------- .../service/server_repository_service.py | 15 +++--- .../short_role_name_repository_service.py | 42 +++++++-------- .../steam_special_offer_repository_service.py | 19 +++---- .../technician_config_repository_service.py | 22 ++------ .../user_game_ident_repository_service.py | 51 ++++++++++--------- 6 files changed, 86 insertions(+), 99 deletions(-) diff --git a/bot/src/bot_data/service/server_config_repository_service.py b/bot/src/bot_data/service/server_config_repository_service.py index 45d1aeaa..3ff90d50 100644 --- a/bot/src/bot_data/service/server_config_repository_service.py +++ b/bot/src/bot_data/service/server_config_repository_service.py @@ -26,15 +26,14 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC): self._servers = servers def _get_team_role_ids(self, server_id: int) -> List[ServerTeamRoleIdsConfig]: - ids = List(ServerTeamRoleIdsConfig) self._logger.trace( __name__, f"Send SQL command: {ServerTeamRoleIdsConfig.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(ServerTeamRoleIdsConfig.get_select_by_server_id_string(server_id)) - for result in results: - self._logger.trace(__name__, f"Got ServerTeamRoleIdsConfig with id {result[0]}") - ids.append( + + return List( + ServerTeamRoleIdsConfig, + [ ServerTeamRoleIdsConfig( result[1], TeamMemberTypeEnum(result[2]), @@ -43,22 +42,23 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC): result[5], id=result[0], ) - ) - - return ids + for result in self._context.select(ServerTeamRoleIdsConfig.get_select_by_server_id_string(server_id)) + ], + ) def _get_afk_channel_ids(self, server_id: int) -> List[int]: - urls = List(int) self._logger.trace( __name__, f"Send SQL command: {ServerAFKChannelIdsConfig.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(ServerAFKChannelIdsConfig.get_select_by_server_id_string(server_id)) - for result in results: - self._logger.trace(__name__, f"Got ServerAFKChannelIdsConfig with id {result[0]}") - urls.append(result[1]) - return urls + return List( + int, + [ + result[1] + for result in self._context.select(ServerAFKChannelIdsConfig.get_select_by_server_id_string(server_id)) + ], + ) def _from_result(self, result: tuple) -> ServerConfig: return ServerConfig( @@ -102,18 +102,14 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC): __name__, f"Send SQL command: {ServerConfig.get_select_by_server_id_string(server_id)}", ) - result = self._context.select(ServerConfig.get_select_by_server_id_string(server_id))[0] - - return self._from_result(result) + return self._from_result(self._context.select(ServerConfig.get_select_by_server_id_string(server_id))[0]) def get_server_config_by_id(self, config_id: int) -> ServerConfig: self._logger.trace( __name__, f"Send SQL command: {ServerConfig.get_select_by_id_string(config_id)}", ) - result = self._context.select(ServerConfig.get_select_by_id_string(config_id))[0] - - return self._from_result(result) + return self._from_result(self._context.select(ServerConfig.get_select_by_id_string(config_id))[0]) def add_server_config(self, server_config: ServerConfig): self._logger.trace(__name__, f"Send SQL command: {server_config.insert_string}") diff --git a/bot/src/bot_data/service/server_repository_service.py b/bot/src/bot_data/service/server_repository_service.py index 5817d7dc..7713613e 100644 --- a/bot/src/bot_data/service/server_repository_service.py +++ b/bot/src/bot_data/service/server_repository_service.py @@ -25,12 +25,15 @@ class ServerRepositoryService(ServerRepositoryABC): ServerRepositoryABC.__init__(self) def get_servers(self) -> List[Server]: - servers = List(Server) self._logger.trace(__name__, f"Send SQL command: {Server.get_select_all_string()}") - results = self._context.select(Server.get_select_all_string()) - for result in results: - servers.append(Server(result[1], result[2], result[3], id=result[0])) + servers = List( + Server, + [ + Server(result[1], result[2], result[3], id=result[0]) + for result in self._context.select(Server.get_select_all_string()) + ], + ) self._cache.add_servers(servers) return servers @@ -96,9 +99,7 @@ class ServerRepositoryService(ServerRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return Server(result[1], result[2], result[3], id=result[0]) + return Server(result[0][1], result[0][2], result[0][3], id=result[0][0]) def add_server(self, server: Server): self._logger.trace(__name__, f"Send SQL command: {server.insert_string}") diff --git a/bot/src/bot_data/service/short_role_name_repository_service.py b/bot/src/bot_data/service/short_role_name_repository_service.py index 3c4bed64..4d66d89d 100644 --- a/bot/src/bot_data/service/short_role_name_repository_service.py +++ b/bot/src/bot_data/service/short_role_name_repository_service.py @@ -43,14 +43,15 @@ class ShortRoleNameRepositoryService(ShortRoleNameRepositoryABC): ) def get_short_role_names(self) -> List[ShortRoleName]: - short_role_names = List(ShortRoleName) self._logger.trace(__name__, f"Send SQL command: {ShortRoleName.get_select_all_string()}") - results = self._context.select(ShortRoleName.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get short_role_name with id {result[0]}") - short_role_names.append(self._short_role_name_from_result(result)) - return short_role_names + return List( + ShortRoleName, + [ + self._short_role_name_from_result(result) + for result in self._context.select(ShortRoleName.get_select_all_string()) + ], + ) def get_short_role_name_by_id(self, id: int) -> ShortRoleName: self._logger.trace(__name__, f"Send SQL command: {ShortRoleName.get_select_by_id_string(id)}") @@ -59,31 +60,30 @@ class ShortRoleNameRepositoryService(ShortRoleNameRepositoryABC): return self._short_role_name_from_result(result) def find_short_role_names_by_role_id(self, role_id: int) -> List[ShortRoleName]: - short_role_names = List(ShortRoleName) self._logger.trace( __name__, f"Send SQL command: {ShortRoleName.get_select_by_role_id_string(role_id)}", ) - results = self._context.select(ShortRoleName.get_select_by_role_id_string(role_id)) - for result in results: - self._logger.trace(__name__, f"Get short_role_name with id {result[0]}") - short_role_names.append(self._short_role_name_from_result(result)) - - return short_role_names + return List( + ShortRoleName, + [ + self._short_role_name_from_result(result) + for result in self._context.select(ShortRoleName.get_select_by_role_id_string(role_id)) + ], + ) def get_short_role_names_by_server_id(self, server_id: int) -> List[ShortRoleName]: - short_role_names = List(ShortRoleName) self._logger.trace( __name__, f"Send SQL command: {ShortRoleName.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(ShortRoleName.get_select_by_server_id_string(server_id)) - - for result in results: - self._logger.trace(__name__, f"Get short_role_name with id {result[0]}") - short_role_names.append(self._short_role_name_from_result(result)) - - return short_role_names + return List( + ShortRoleName, + [ + self._short_role_name_from_result(result) + for result in self._context.select(ShortRoleName.get_select_by_server_id_string(server_id)) + ], + ) def add_short_role_name(self, short_role_name: ShortRoleName): self._logger.trace(__name__, f"Send SQL command: {short_role_name.insert_string}") diff --git a/bot/src/bot_data/service/steam_special_offer_repository_service.py b/bot/src/bot_data/service/steam_special_offer_repository_service.py index dfd0e7ee..e0825ae7 100644 --- a/bot/src/bot_data/service/steam_special_offer_repository_service.py +++ b/bot/src/bot_data/service/steam_special_offer_repository_service.py @@ -42,23 +42,24 @@ class SteamSpecialOfferRepositoryService(SteamSpecialOfferRepositoryABC): ) def get_steam_special_offers(self) -> List[SteamSpecialOffer]: - steam_special_offers = List(SteamSpecialOffer) self._logger.trace(__name__, f"Send SQL command: {SteamSpecialOffer.get_select_all_string()}") - results = self._context.select(SteamSpecialOffer.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get steam_special_offer with id {result[0]}") - steam_special_offers.append(self._steam_special_offer_from_result(result)) - return steam_special_offers + return List( + SteamSpecialOffer, + [ + self._steam_special_offer_from_result(result) + for result in self._context.select(SteamSpecialOffer.get_select_all_string()) + ], + ) def get_steam_special_offer_by_name(self, name: str) -> SteamSpecialOffer: self._logger.trace( __name__, f"Send SQL command: {SteamSpecialOffer.get_select_by_name_string(name)}", ) - result = self._context.select(SteamSpecialOffer.get_select_by_name_string(name))[0] - - return self._steam_special_offer_from_result(result) + return self._steam_special_offer_from_result( + self._context.select(SteamSpecialOffer.get_select_by_name_string(name))[0] + ) def add_steam_special_offer(self, steam_special_offer: SteamSpecialOffer): self._logger.trace(__name__, f"Send SQL command: {steam_special_offer.insert_string}") diff --git a/bot/src/bot_data/service/technician_config_repository_service.py b/bot/src/bot_data/service/technician_config_repository_service.py index f5c27306..57c2cb55 100644 --- a/bot/src/bot_data/service/technician_config_repository_service.py +++ b/bot/src/bot_data/service/technician_config_repository_service.py @@ -18,27 +18,17 @@ class TechnicianConfigRepositoryService(TechnicianConfigRepositoryABC): self._context = db_context def _get_technician_ids(self) -> List[int]: - ids = List(int) self._logger.trace(__name__, f"Send SQL command: {TechnicianIdConfig.get_select_all_string()}") - results = self._context.select(TechnicianIdConfig.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Got TechnicianId with id {result[0]}") - ids.append(result[1]) - - return ids + return List(int, [config[1] for config in self._context.select(TechnicianIdConfig.get_select_all_string())]) def _get_technician_ping_urls(self) -> List[str]: - urls = List(str) self._logger.trace( __name__, f"Send SQL command: {TechnicianPingUrlConfig.get_select_all_string()}", ) - results = self._context.select(TechnicianPingUrlConfig.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Got TechnicianPingUrl with id {result[0]}") - urls.append(result[1]) - - return urls + return List( + str, [ping_url[1] for ping_url in self._context.select(TechnicianPingUrlConfig.get_select_all_string())] + ) def _from_result(self, result: tuple) -> TechnicianConfig: return TechnicianConfig( @@ -64,9 +54,7 @@ class TechnicianConfigRepositoryService(TechnicianConfigRepositoryABC): def get_technician_config(self) -> TechnicianConfig: self._logger.trace(__name__, f"Send SQL command: {TechnicianConfig.get_select_all_string()}") - result = self._context.select(TechnicianConfig.get_select_all_string())[0] - - return self._from_result(result) + return self._from_result(self._context.select(TechnicianConfig.get_select_all_string())[0]) def add_technician_config(self, technician_config: TechnicianConfig): self._logger.trace(__name__, f"Send SQL command: {technician_config.insert_string}") diff --git a/bot/src/bot_data/service/user_game_ident_repository_service.py b/bot/src/bot_data/service/user_game_ident_repository_service.py index d0dfc38b..c712a35d 100644 --- a/bot/src/bot_data/service/user_game_ident_repository_service.py +++ b/bot/src/bot_data/service/user_game_ident_repository_service.py @@ -39,46 +39,47 @@ class UserGameIdentRepositoryService(UserGameIdentRepositoryABC): ) def get_user_game_idents(self) -> List[UserGameIdent]: - joins = List(UserGameIdent) self._logger.trace( __name__, f"Send SQL command: {UserGameIdent.get_select_all_string()}", ) - results = self._context.select(UserGameIdent.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get UserGameIdent with id {result[0]}") - joins.append(self._from_result(result)) - return joins + return List( + UserGameIdent, + [ + self._from_result(game_ident) + for game_ident in self._context.select(UserGameIdent.get_select_all_string()) + ], + ) def get_user_game_idents_by_game_server_id(self, game_server_id: int) -> List[UserGameIdent]: - joins = List(UserGameIdent) self._logger.trace( __name__, f"Send SQL command: {UserGameIdent.get_select_by_game_server_id_string(game_server_id)}", ) - results = self._context.select(UserGameIdent.get_select_by_game_server_id_string(game_server_id)) - for result in results: - self._logger.trace(__name__, f"Get UserGameIdent with id {result[0]}") - joins.append(self._from_result(result)) - - return joins + return List( + UserGameIdent, + [ + self._from_result(game_ident) + for game_ident in self._context.select( + UserGameIdent.get_select_by_game_server_id_string(game_server_id) + ) + ], + ) def get_user_game_ident_by_id(self, id: int) -> UserGameIdent: self._logger.trace( __name__, f"Send SQL command: {UserGameIdent.get_select_by_id_string(id)}", ) - result = self._context.select(UserGameIdent.get_select_by_id_string(id))[0] - return self._from_result(result) + return self._from_result(self._context.select(UserGameIdent.get_select_by_id_string(id))[0]) def get_user_game_ident_by_ident(self, ident: str) -> UserGameIdent: self._logger.trace( __name__, f"Send SQL command: {UserGameIdent.get_select_by_ident_string(ident)}", ) - result = self._context.select(UserGameIdent.get_select_by_ident_string(ident))[0] - return self._from_result(result) + return self._from_result(self._context.select(UserGameIdent.get_select_by_ident_string(ident))[0]) def find_user_game_ident_by_ident(self, ident: str) -> Optional[UserGameIdent]: self._logger.trace( @@ -89,20 +90,20 @@ class UserGameIdentRepositoryService(UserGameIdentRepositoryABC): if len(result) == 0: return None - result = result[0] - return self._from_result(result) + return self._from_result(result[0]) def get_user_game_idents_by_user_id(self, user_id: int) -> List[UserGameIdent]: - joins = List(UserGameIdent) self._logger.trace( __name__, f"Send SQL command: {UserGameIdent.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserGameIdent.get_select_by_user_id_string(user_id)) - for result in results: - joins.append(self._from_result(result)) - - return joins + return List( + UserGameIdent, + [ + self._from_result(game_ident) + for game_ident in self._context.select(UserGameIdent.get_select_by_user_id_string(user_id)) + ], + ) def add_user_game_ident(self, user_game_ident: UserGameIdent): self._logger.trace(__name__, f"Send SQL command: {user_game_ident.insert_string}") From 0aa690b98486d4017c499d8922c20cc899f1c61e Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 2 Dec 2023 18:16:04 +0100 Subject: [PATCH 03/12] Changed normal data collection to list comprehensions p3 #446 --- .../achievements_repository_service.py | 62 ++++---- .../service/api_key_repository_service.py | 9 +- .../service/auth_user_repository_service.py | 32 ++-- .../service/auto_role_repository_service.py | 138 +++++------------- .../service/client_repository_service.py | 122 +++------------- .../service/game_server_repository_service.py | 38 ++--- .../service/level_repository_service.py | 40 ++--- .../scheduled_event_repository_service.py | 32 ++-- 8 files changed, 152 insertions(+), 321 deletions(-) diff --git a/bot/src/bot_data/service/achievements_repository_service.py b/bot/src/bot_data/service/achievements_repository_service.py index d8923db5..48af2c81 100644 --- a/bot/src/bot_data/service/achievements_repository_service.py +++ b/bot/src/bot_data/service/achievements_repository_service.py @@ -48,66 +48,60 @@ class AchievementRepositoryService(AchievementRepositoryABC): ) def get_achievements(self) -> List[Achievement]: - achievements = List(Achievement) self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_all_string()}") - results = self._context.select(Achievement.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user with id {result[0]}") - achievements.append(self._from_result(result)) - return achievements + return List( + Achievement, + [self._from_result(result) for result in self._context.select(Achievement.get_select_all_string())], + ) def get_achievement_by_id(self, id: int) -> Achievement: self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_by_id_string(id)}") - result = self._context.select(Achievement.get_select_by_id_string(id))[0] - - return self._from_result(result) + return self._from_result(self._context.select(Achievement.get_select_by_id_string(id))[0]) def get_achievements_by_server_id(self, server_id: int) -> List[Achievement]: - achievements = List(Achievement) self._logger.trace( __name__, f"Send SQL command: {Achievement.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(Achievement.get_select_by_server_id_string(server_id)) - for result in results: - self._logger.trace(__name__, f"Get user with id {result[0]}") - achievements.append(self._from_result(result)) - return achievements + return List( + Achievement, + [ + self._from_result(result) + for result in self._context.select(Achievement.get_select_by_server_id_string(server_id)) + ], + ) def get_achievements_by_user_id(self, user_id: int) -> List[Achievement]: - achievements = List(Achievement) - achievements_joins = List(UserGotAchievement) self._logger.trace( __name__, f"Send SQL command: {UserGotAchievement.get_select_by_user_id_string(user_id)}", ) - results = self._context.select(UserGotAchievement.get_select_by_user_id_string(user_id)) - for result in results: - self._logger.trace(__name__, f"Got UserGotAchievement with id {result[0]}") - achievements_joins.append(self._join_from_result(result)) - for achievements_join in achievements_joins: - results = self._context.select(Achievement.get_select_by_id_string(achievements_join.achievement.id)) - for result in results: - self._logger.trace(__name__, f"Got Achievement with id {result[0]}") - achievements.append(self._from_result(result)) - - return achievements + return List( + UserGotAchievement, + [ + self._join_from_result(result).achievement + for result in self._context.select(UserGotAchievement.get_select_by_user_id_string(user_id)) + ], + ) def get_user_got_achievements_by_achievement_id(self, achievement_id: int) -> List[Achievement]: - achievements_joins = List(UserGotAchievement) self._logger.trace( __name__, f"Send SQL command: {UserGotAchievement.get_select_by_achievement_id_string(achievement_id)}", ) - results = self._context.select(UserGotAchievement.get_select_by_achievement_id_string(achievement_id)) - for result in results: - self._logger.trace(__name__, f"Got UserGotAchievement with id {result[0]}") - achievements_joins.append(self._join_from_result(result)) - return achievements_joins + return List( + UserGotAchievement, + [ + self._join_from_result(result) + for result in self._context.select( + UserGotAchievement.get_select_by_achievement_id_string(achievement_id) + ) + ], + ) def add_achievement(self, achievement: Achievement): self._logger.trace(__name__, f"Send SQL command: {achievement.insert_string}") diff --git a/bot/src/bot_data/service/api_key_repository_service.py b/bot/src/bot_data/service/api_key_repository_service.py index d4f57dfc..13904738 100644 --- a/bot/src/bot_data/service/api_key_repository_service.py +++ b/bot/src/bot_data/service/api_key_repository_service.py @@ -44,13 +44,12 @@ class ApiKeyRepositoryService(ApiKeyRepositoryABC): return api_key def get_api_keys(self) -> List[ApiKey]: - api_keys = List(ApiKey) self._logger.trace(__name__, f"Send SQL command: {ApiKey.get_select_all_string()}") - results = self._context.select(ApiKey.get_select_all_string()) - for result in results: - api_keys.append(self._api_key_from_result(result)) - return api_keys + return List( + ApiKey, + [self._api_key_from_result(result) for result in self._context.select(ApiKey.get_select_all_string())], + ) def get_api_key(self, identifier: str, key: str) -> ApiKey: self._logger.trace(__name__, f"Send SQL command: {ApiKey.get_select_string(identifier, key)}") diff --git a/bot/src/bot_data/service/auth_user_repository_service.py b/bot/src/bot_data/service/auth_user_repository_service.py index 00afe7ae..70ebb786 100644 --- a/bot/src/bot_data/service/auth_user_repository_service.py +++ b/bot/src/bot_data/service/auth_user_repository_service.py @@ -64,23 +64,16 @@ class AuthUserRepositoryService(AuthUserRepositoryABC): __name__, f"Send SQL command: {auth_user.get_select_user_id_from_relations()}", ) - relation_ids = List(int) - results = self._context.select(auth_user.get_select_user_id_from_relations()) - for result in results: - self._logger.trace(__name__, f"Got auth user relation with id {result[0]}") - relation_ids.append(result[0]) - return relation_ids + return List(int, [result[0] for result in self._context.select(auth_user.get_select_user_id_from_relations())]) def get_all_auth_users(self) -> List[AuthUser]: - users = List(AuthUser) self._logger.trace(__name__, f"Send SQL command: {AuthUser.get_select_all_string()}") - results = self._context.select(AuthUser.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get auth user with id {result[0]}") - users.append(self._user_from_result(result)) - return users + return List( + AuthUser, + [self._user_from_result(result) for result in self._context.select(AuthUser.get_select_all_string())], + ) def get_filtered_auth_users(self, criteria: AuthUserSelectCriteria) -> FilteredResult: users = self.get_all_auth_users() @@ -129,8 +122,7 @@ class AuthUserRepositoryService(AuthUserRepositoryABC): def get_auth_user_by_email(self, email: str) -> AuthUser: self._logger.trace(__name__, f"Send SQL command: {AuthUser.get_select_by_email_string(email)}") - result = self._context.select(AuthUser.get_select_by_email_string(email))[0] - return self._user_from_result(result) + return self._user_from_result(self._context.select(AuthUser.get_select_by_email_string(email))[0]) def find_auth_user_by_email(self, email: str) -> Optional[AuthUser]: self._logger.trace(__name__, f"Send SQL command: {AuthUser.get_select_by_email_string(email)}") @@ -138,9 +130,7 @@ class AuthUserRepositoryService(AuthUserRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._user_from_result(result) + return self._user_from_result(result[0]) def find_auth_user_by_confirmation_id(self, id: str) -> Optional[AuthUser]: self._logger.trace( @@ -151,9 +141,7 @@ class AuthUserRepositoryService(AuthUserRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._user_from_result(result) + return self._user_from_result(result[0]) def find_auth_user_by_forgot_password_id(self, id: str) -> Optional[AuthUser]: self._logger.trace( @@ -164,9 +152,7 @@ class AuthUserRepositoryService(AuthUserRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return self._user_from_result(result) + return self._user_from_result(result[0]) def add_auth_user(self, user: AuthUser): self._logger.trace(__name__, f"Send SQL command: {user.insert_string}") diff --git a/bot/src/bot_data/service/auto_role_repository_service.py b/bot/src/bot_data/service/auto_role_repository_service.py index bf0d781a..323c4dc1 100644 --- a/bot/src/bot_data/service/auto_role_repository_service.py +++ b/bot/src/bot_data/service/auto_role_repository_service.py @@ -23,27 +23,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC): AutoRoleRepositoryABC.__init__(self) - def get_auto_roles(self) -> List[AutoRole]: - auto_roles = List(AutoRole) - self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_all_string()}") - results = self._context.select(AutoRole.get_select_all_string()) - for result in results: - auto_roles.append( - AutoRole( - self._servers.get_server_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - - return auto_roles - - def get_auto_role_by_id(self, id: int) -> AutoRole: - self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_by_id_string(id)}") - result = self._context.select(AutoRole.get_select_by_id_string(id))[0] + def _from_result(self, result: tuple) -> AutoRole: return AutoRole( self._servers.get_server_by_id(result[1]), result[2], @@ -53,55 +33,37 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC): id=result[0], ) + def get_auto_roles(self) -> List[AutoRole]: + self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_all_string()}") + return List( + AutoRole, [self._from_result(result) for result in self._context.select(AutoRole.get_select_all_string())] + ) + + def get_auto_role_by_id(self, id: int) -> AutoRole: + self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_by_id_string(id)}") + return self._from_result(self._context.select(AutoRole.get_select_by_id_string(id))[0]) + def find_auto_role_by_id(self, id: int) -> Optional[AutoRole]: self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_by_id_string(id)}") result = self._context.select(AutoRole.get_select_by_id_string(id)) if result is None or len(result) == 0: return None - result = result[0] - - return AutoRole( - self._servers.get_server_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self._from_result(result[0]) def get_auto_roles_by_server_id(self, id: int) -> List[AutoRole]: self._logger.trace(__name__, f"Send SQL command: {AutoRole.get_select_by_server_id_string(id)}") - auto_roles = List(AutoRole) - results = self._context.select(AutoRole.get_select_by_server_id_string(id)) - for result in results: - auto_roles.append( - AutoRole( - self._servers.get_server_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - - return auto_roles + return List( + AutoRole, + [self._from_result(result) for result in self._context.select(AutoRole.get_select_by_server_id_string(id))], + ) def get_auto_role_by_message_id(self, id: int) -> AutoRole: self._logger.trace( __name__, f"Send SQL command: {AutoRole.get_select_by_message_id_string(id)}", ) - result = self._context.select(AutoRole.get_select_by_message_id_string(id))[0] - return AutoRole( - self._servers.get_server_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self._from_result(self._context.select(AutoRole.get_select_by_message_id_string(id))[0]) def find_auto_role_by_message_id(self, id: int) -> Optional[AutoRole]: self._logger.trace( @@ -112,16 +74,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return AutoRole( - self._servers.get_server_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) + return self._from_result(result[0]) def add_auto_role(self, auto_role: AutoRole): self._logger.trace(__name__, f"Send SQL command: {auto_role.insert_string}") @@ -135,27 +88,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC): self._logger.trace(__name__, f"Send SQL command: {auto_role.delete_string}") self._context.cursor.execute(auto_role.delete_string) - def get_auto_role_rules(self) -> List[AutoRoleRule]: - auto_role_rules = List(AutoRoleRule) - self._logger.trace(__name__, f"Send SQL command: {AutoRoleRule.get_select_all_string()}") - results = self._context.select(AutoRoleRule.get_select_all_string()) - for result in results: - auto_role_rules.append( - AutoRoleRule( - self.get_auto_role_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - - return auto_role_rules - - def get_auto_role_rule_by_id(self, id: int) -> AutoRoleRule: - self._logger.trace(__name__, f"Send SQL command: {AutoRoleRule.get_select_by_id_string(id)}") - result = self._context.select(AutoRoleRule.get_select_by_id_string(id))[0] + def _rule_from_result(self, result: tuple) -> AutoRoleRule: return AutoRoleRule( self.get_auto_role_by_id(result[1]), result[2], @@ -165,26 +98,29 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC): id=result[0], ) + def get_auto_role_rules(self) -> List[AutoRoleRule]: + self._logger.trace(__name__, f"Send SQL command: {AutoRoleRule.get_select_all_string()}") + return List( + AutoRoleRule, + [self._rule_from_result(result) for result in self._context.select(AutoRoleRule.get_select_all_string())], + ) + + def get_auto_role_rule_by_id(self, id: int) -> AutoRoleRule: + self._logger.trace(__name__, f"Send SQL command: {AutoRoleRule.get_select_by_id_string(id)}") + return self._rule_from_result(self._context.select(AutoRoleRule.get_select_by_id_string(id))[0]) + def get_auto_role_rules_by_auto_role_id(self, id: int) -> List[AutoRoleRule]: - auto_role_rules = List(AutoRoleRule) self._logger.trace( __name__, f"Send SQL command: {AutoRoleRule.get_select_by_auto_role_id_string(id)}", ) - results = self._context.select(AutoRoleRule.get_select_by_auto_role_id_string(id)) - for result in results: - auto_role_rules.append( - AutoRoleRule( - self.get_auto_role_by_id(result[1]), - result[2], - result[3], - result[4], - result[5], - id=result[0], - ) - ) - - return auto_role_rules + return List( + AutoRoleRule, + [ + self._rule_from_result(result) + for result in self._context.select(AutoRoleRule.get_select_by_auto_role_id_string(id)) + ], + ) def add_auto_role_rule(self, auto_role_rule: AutoRoleRule): self._logger.trace(__name__, f"Send SQL command: {auto_role_rule.insert_string}") diff --git a/bot/src/bot_data/service/client_repository_service.py b/bot/src/bot_data/service/client_repository_service.py index e3d08ad3..ba877c1c 100644 --- a/bot/src/bot_data/service/client_repository_service.py +++ b/bot/src/bot_data/service/client_repository_service.py @@ -23,32 +23,7 @@ class ClientRepositoryService(ClientRepositoryABC): ClientRepositoryABC.__init__(self) - def get_clients(self) -> List[Client]: - clients = List(Client) - self._logger.trace(__name__, f"Send SQL command: {Client.get_select_all_string()}") - results = self._context.select(Client.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get client with id {result[0]}") - clients.append( - Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) - ) - - return clients - - def get_client_by_id(self, client_id: int) -> Client: - self._logger.trace(__name__, f"Send SQL command: {Client.get_select_by_id_string(client_id)}") - result = self._context.select(Client.get_select_by_id_string(client_id)) + def _from_result(self, result: tuple) -> Client: return Client( result[1], result[2], @@ -62,49 +37,37 @@ class ClientRepositoryService(ClientRepositoryABC): id=result[0], ) + def get_clients(self) -> List[Client]: + self._logger.trace(__name__, f"Send SQL command: {Client.get_select_all_string()}") + + return List( + Client, [self._from_result(result) for result in self._context.select(Client.get_select_all_string())] + ) + + def get_client_by_id(self, client_id: int) -> Client: + self._logger.trace(__name__, f"Send SQL command: {Client.get_select_by_id_string(client_id)}") + return self._from_result(self._context.select(Client.get_select_by_id_string(client_id))[0]) + def get_clients_by_server_id(self, server_id: int) -> List[Client]: - clients = List(Client) self._logger.trace( __name__, f"Send SQL command: {Client.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(Client.get_select_by_server_id_string(server_id)) - for result in results: - clients.append( - Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) - ) - return clients + return List( + Client, + [ + self._from_result(result) + for result in self._context.select(Client.get_select_by_server_id_string(server_id)) + ], + ) def get_client_by_discord_id(self, discord_id: int) -> Client: self._logger.trace( __name__, f"Send SQL command: {Client.get_select_by_discord_id_string(discord_id)}", ) - result = self._context.select(Client.get_select_by_discord_id_string(discord_id))[0] - return Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) + return self._from_result(self._context.select(Client.get_select_by_discord_id_string(discord_id))[0]) def find_client_by_discord_id(self, discord_id: int) -> Optional[Client]: self._logger.trace( @@ -115,20 +78,7 @@ class ClientRepositoryService(ClientRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) + return self._from_result(result[0]) def find_client_by_server_id(self, discord_id: int) -> Optional[Client]: self._logger.trace( @@ -139,20 +89,7 @@ class ClientRepositoryService(ClientRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) + return self._from_result(result[0]) def find_client_by_discord_id_and_server_id(self, discord_id: int, server_id: int) -> Optional[Client]: self._logger.trace( @@ -163,20 +100,7 @@ class ClientRepositoryService(ClientRepositoryABC): if result is None or len(result) == 0: return None - result = result[0] - - return Client( - result[1], - result[2], - result[3], - result[4], - result[5], - result[6], - self._servers.get_server_by_id(result[7]), - result[8], - result[9], - id=result[0], - ) + return self._from_result(result[0]) def add_client(self, client: Client): self._logger.trace(__name__, f"Send SQL command: {client.insert_string}") diff --git a/bot/src/bot_data/service/game_server_repository_service.py b/bot/src/bot_data/service/game_server_repository_service.py index 1bdd0aeb..1b9775a5 100644 --- a/bot/src/bot_data/service/game_server_repository_service.py +++ b/bot/src/bot_data/service/game_server_repository_service.py @@ -35,49 +35,49 @@ class GameServerRepositoryService(GameServerRepositoryABC): ) def get_game_servers(self) -> List[GameServer]: - game_servers = List(GameServer) self._logger.trace( __name__, f"Send SQL command: {GameServer.get_select_all_string()}", ) - results = self._context.select(GameServer.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get user-joined-game-server with id {result[0]}") - game_servers.append(self._from_result(result)) - return game_servers + return List( + GameServer, + [self._from_result(result) for result in self._context.select(GameServer.get_select_all_string())], + ) def get_game_servers_by_server_id(self, id: int) -> List[GameServer]: - game_servers = List(GameServer) self._logger.trace( __name__, f"Send SQL command: {GameServer.get_select_by_server_id_string(id)}", ) - results = self._context.select(GameServer.get_select_by_server_id_string(id)) - for result in results: - self._logger.trace(__name__, f"Get user-joined-game-server with id {result[0]}") - game_servers.append(self._from_result(result)) - return game_servers + return List( + GameServer, + [ + self._from_result(result) + for result in self._context.select(GameServer.get_select_by_server_id_string(id)) + ], + ) def get_game_server_by_id(self, id: int) -> GameServer: self._logger.trace( __name__, f"Send SQL command: {GameServer.get_select_by_id_string(id)}", ) - result = self._context.select(GameServer.get_select_by_id_string(id))[0] - return self._from_result(result) + return self._from_result(self._context.select(GameServer.get_select_by_id_string(id))[0]) def get_game_servers_by_api_key_id(self, id: int) -> List[GameServer]: self._logger.trace( __name__, f"Send SQL command: {GameServer.get_select_by_api_key_id_string(id)}", ) - game_servers = List(GameServer) - results = self._context.select(GameServer.get_select_by_api_key_id_string(id)) - for result in results: - game_servers.append(self._from_result(result)) - return game_servers + return List( + GameServer, + [ + self._from_result(result) + for result in self._context.select(GameServer.get_select_by_api_key_id_string(id)) + ], + ) def add_game_server(self, game_server: GameServer): self._logger.trace(__name__, f"Send SQL command: {game_server.insert_string}") diff --git a/bot/src/bot_data/service/level_repository_service.py b/bot/src/bot_data/service/level_repository_service.py index c713c0da..6897ddcc 100644 --- a/bot/src/bot_data/service/level_repository_service.py +++ b/bot/src/bot_data/service/level_repository_service.py @@ -4,8 +4,8 @@ from cpl_core.database.context import DatabaseContextABC from cpl_query.extension import List from bot_core.logging.database_logger import DatabaseLogger -from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.level_repository_abc import LevelRepositoryABC +from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.model.level import Level @@ -41,20 +41,15 @@ class LevelRepositoryService(LevelRepositoryABC): ) def get_levels(self) -> List[Level]: - levels = List(Level) self._logger.trace(__name__, f"Send SQL command: {Level.get_select_all_string()}") - results = self._context.select(Level.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get level with id {result[0]}") - levels.append(self._level_from_result(result)) - - return levels + return List( + Level, [self._level_from_result(result) for result in self._context.select(Level.get_select_all_string())] + ) def get_level_by_id(self, id: int) -> Level: self._logger.trace(__name__, f"Send SQL command: {Level.get_select_by_id_string(id)}") - result = self._context.select(Level.get_select_by_id_string(id))[0] - return self._level_from_result(result) + return self._level_from_result(self._context.select(Level.get_select_by_id_string(id))[0]) def find_level_by_id(self, id: int) -> Optional[Level]: self._logger.trace(__name__, f"Send SQL command: {Level.get_select_by_id_string(id)}") @@ -65,21 +60,19 @@ class LevelRepositoryService(LevelRepositoryABC): return self._level_from_result(result[0]) def get_levels_by_server_id(self, server_id: int) -> List[Level]: - levels = List(Level) self._logger.trace( __name__, f"Send SQL command: {Level.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(Level.get_select_by_server_id_string(server_id)) - - for result in results: - self._logger.trace(__name__, f"Get level with id {result[0]}") - levels.append(self._level_from_result(result)) - - return levels + return List( + Level, + [ + self._level_from_result(result) + for result in self._context.select(Level.get_select_by_server_id_string(server_id)) + ], + ) def find_levels_by_server_id(self, server_id: int) -> Optional[List[Level]]: - levels = List(Level) self._logger.trace( __name__, f"Send SQL command: {Level.get_select_by_server_id_string(server_id)}", @@ -88,11 +81,10 @@ class LevelRepositoryService(LevelRepositoryABC): if results is None or len(results) == 0: return None - for result in results: - self._logger.trace(__name__, f"Get level with id {result[0]}") - levels.append(self._level_from_result(result)) - - return levels + return List( + Level, + [self._level_from_result(result) for result in results], + ) def add_level(self, level: Level): self._logger.trace(__name__, f"Send SQL command: {level.insert_string}") diff --git a/bot/src/bot_data/service/scheduled_event_repository_service.py b/bot/src/bot_data/service/scheduled_event_repository_service.py index dc394fdf..d8e9039f 100644 --- a/bot/src/bot_data/service/scheduled_event_repository_service.py +++ b/bot/src/bot_data/service/scheduled_event_repository_service.py @@ -5,8 +5,8 @@ from cpl_query.extension import List from discord import EntityType from bot_core.logging.database_logger import DatabaseLogger -from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC +from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.model.scheduled_event import ScheduledEvent from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum @@ -49,34 +49,34 @@ class ScheduledEventRepositoryService(ScheduledEventRepositoryABC): ) def get_scheduled_events(self) -> List[ScheduledEvent]: - scheduled_events = List(ScheduledEvent) self._logger.trace(__name__, f"Send SQL command: {ScheduledEvent.get_select_all_string()}") - results = self._context.select(ScheduledEvent.get_select_all_string()) - for result in results: - self._logger.trace(__name__, f"Get scheduled_event with id {result[0]}") - scheduled_events.append(self._scheduled_event_from_result(result)) - return scheduled_events + return List( + ScheduledEvent, + [ + self._scheduled_event_from_result(result) + for result in self._context.select(ScheduledEvent.get_select_all_string()) + ], + ) def get_scheduled_event_by_id(self, id: int) -> ScheduledEvent: self._logger.trace(__name__, f"Send SQL command: {ScheduledEvent.get_select_by_id_string(id)}") - result = self._context.select(ScheduledEvent.get_select_by_id_string(id))[0] - return self._scheduled_event_from_result(result) + return self._scheduled_event_from_result(self._context.select(ScheduledEvent.get_select_by_id_string(id))[0]) def get_scheduled_events_by_server_id(self, server_id: int) -> List[ScheduledEvent]: - scheduled_events = List(ScheduledEvent) self._logger.trace( __name__, f"Send SQL command: {ScheduledEvent.get_select_by_server_id_string(server_id)}", ) - results = self._context.select(ScheduledEvent.get_select_by_server_id_string(server_id)) - for result in results: - self._logger.trace(__name__, f"Get scheduled_event with id {result[0]}") - scheduled_events.append(self._scheduled_event_from_result(result)) - - return scheduled_events + return List( + ScheduledEvent, + [ + self._scheduled_event_from_result(result) + for result in self._context.select(ScheduledEvent.get_select_by_server_id_string(server_id)) + ], + ) def add_scheduled_event(self, scheduled_event: ScheduledEvent): self._logger.trace(__name__, f"Send SQL command: {scheduled_event.insert_string}") From 4233e089f8ce5ee8aeb27d7001517cb74e3989d0 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 11:59:16 +0100 Subject: [PATCH 04/12] Improved user message per hour check handling #446 --- bot/src/bot_core/abc/client_utils_abc.py | 10 ++++ .../bot_core/service/client_utils_service.py | 58 ++++++++++--------- .../base/events/base_on_message_event.py | 1 + .../base/helper/base_reaction_handler.py | 1 + 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/bot/src/bot_core/abc/client_utils_abc.py b/bot/src/bot_core/abc/client_utils_abc.py index 66e25500..4caefc2d 100644 --- a/bot/src/bot_core/abc/client_utils_abc.py +++ b/bot/src/bot_core/abc/client_utils_abc.py @@ -48,6 +48,16 @@ class ClientUtilsABC(ABC): def get_auto_complete_list(self, _l: List, current: str, select: Callable = None) -> List: pass + @abstractmethod + def update_user_message_xp_count_by_hour( + self, + created_at: datetime, + user: User, + settings: ServerConfig, + is_reaction: bool = False, + ): + pass + @abstractmethod def is_message_xp_count_by_hour_higher_that_max_message_count_per_hour( self, diff --git a/bot/src/bot_core/service/client_utils_service.py b/bot/src/bot_core/service/client_utils_service.py index e316bf03..86bc1f93 100644 --- a/bot/src/bot_core/service/client_utils_service.py +++ b/bot/src/bot_core/service/client_utils_service.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Callable, Union +from typing import Callable import discord from cpl_core.configuration import ConfigurationABC @@ -25,7 +25,6 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import ( from bot_data.abc.user_message_count_per_hour_repository_abc import ( UserMessageCountPerHourRepositoryABC, ) -from bot_data.model.auto_role_rule import AutoRoleRule from bot_data.model.server_config import ServerConfig from bot_data.model.user import User from bot_data.model.user_message_count_per_hour import UserMessageCountPerHour @@ -143,14 +142,13 @@ class ClientUtilsService(ClientUtilsABC): return _l.take(25) - def is_message_xp_count_by_hour_higher_that_max_message_count_per_hour( + def update_user_message_xp_count_by_hour( self, created_at: datetime, user: User, settings: ServerConfig, is_reaction: bool = False, - ) -> bool: - umcph = None + ): try: umcph = self._umcphs.find_user_message_count_per_hour_by_user_id_and_date(user.id, created_at) if umcph is None: @@ -162,44 +160,50 @@ class ClientUtilsService(ClientUtilsABC): user, ) ) - self._db.save_changes() - umcph = self._umcphs.get_user_message_count_per_hour_by_user_id_and_date(user.id, created_at) - except Exception as e: - self._logger.error( - __name__, - f"Cannot add user message count per hour with id {umcph.id}", - e, - ) - return False - - try: - if is_reaction: - umcph.xp_count += settings.xp_per_reaction - else: - umcph.xp_count += settings.xp_per_message + umcph.xp_count += settings.xp_per_reaction if is_reaction else settings.xp_per_message self._umcphs.update_user_message_count_per_hour(umcph) self._db.save_changes() except Exception as e: self._logger.error( __name__, - f"Cannot update user message count per hour with id {umcph.id}", + f"Cannot update user message count per hour {created_at}", e, ) return False - if umcph.xp_count is None: - return False + def is_message_xp_count_by_hour_higher_that_max_message_count_per_hour( + self, + created_at: datetime, + user: User, + settings: ServerConfig, + is_reaction: bool = False, + ) -> bool: + try: + umcph = self._umcphs.find_user_message_count_per_hour_by_user_id_and_date(user.id, created_at) + if umcph is None or umcph.xp_count is None: + return False - return umcph.xp_count > settings.max_message_xp_per_hour + return umcph.xp_count > settings.max_message_xp_per_hour + except Exception as e: + self._logger.error( + __name__, + f"Cannot add user message count per hour with", + e, + ) + return False def get_ontime_for_user(self, user: User) -> float: return round( - self._user_joined_voice_channel.get_user_joined_voice_channels_by_user_id(user.id) - .where(lambda x: x.leaved_on is not None and x.joined_on is not None) - .sum(lambda join: (join.leaved_on - join.joined_on).total_seconds() / 3600), + sum( + [ + (join.leaved_on - join.joined_on).total_seconds() / 3600 + for join in self._user_joined_voice_channel.get_user_joined_voice_channels_by_user_id(user.id) + if join.leaved_on is not None and join.joined_on is not None + ] + ), 2, ) diff --git a/bot/src/modules/base/events/base_on_message_event.py b/bot/src/modules/base/events/base_on_message_event.py index 18ba2bb3..beb9c4a6 100644 --- a/bot/src/modules/base/events/base_on_message_event.py +++ b/bot/src/modules/base/events/base_on_message_event.py @@ -67,6 +67,7 @@ class BaseOnMessageEvent(OnMessageABC): return settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}") + self._client_utils.update_user_message_xp_count_by_hour(message.created_at, user, settings) if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour( message.created_at, user, settings ): diff --git a/bot/src/modules/base/helper/base_reaction_handler.py b/bot/src/modules/base/helper/base_reaction_handler.py index d2cb1581..f0e8d104 100644 --- a/bot/src/modules/base/helper/base_reaction_handler.py +++ b/bot/src/modules/base/helper/base_reaction_handler.py @@ -73,6 +73,7 @@ class BaseReactionHandler: settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild.id}") if r_type == "add": + self._client_utils.update_user_message_xp_count_by_hour(datetime.now(), user, settings, is_reaction=True) if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour( datetime.now(), user, settings, is_reaction=True ): From 94732b7227a30bc2a4b1f6d366fd950b7b1302ac Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 13:14:10 +0100 Subject: [PATCH 05/12] Improved data integrity service loop #446 --- .../bot_core/service/client_utils_service.py | 5 +- .../service/data_integrity_service.py | 546 +++++++----------- .../abc/user_joined_server_repository_abc.py | 4 - bot/src/bot_data/model/user_joined_server.py | 9 - .../user_joined_server_repository_service.py | 7 - .../config/events/config_on_ready_event.py | 2 - 6 files changed, 225 insertions(+), 348 deletions(-) diff --git a/bot/src/bot_core/service/client_utils_service.py b/bot/src/bot_core/service/client_utils_service.py index 86bc1f93..6a5b399d 100644 --- a/bot/src/bot_core/service/client_utils_service.py +++ b/bot/src/bot_core/service/client_utils_service.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Callable +from typing import Callable, Union import discord from cpl_core.configuration import ConfigurationABC @@ -25,6 +25,7 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import ( from bot_data.abc.user_message_count_per_hour_repository_abc import ( UserMessageCountPerHourRepositoryABC, ) +from bot_data.model.auto_role_rule import AutoRoleRule from bot_data.model.server_config import ServerConfig from bot_data.model.user import User from bot_data.model.user_message_count_per_hour import UserMessageCountPerHour @@ -218,7 +219,7 @@ class ClientUtilsService(ClientUtilsABC): guild: Guild = self._bot.guilds.where(lambda g: g == guild).single() channel = guild.get_channel(discord_channel_id) message = await channel.fetch_message(discord_message_id) - emoji = List(discord.Emoji, guild.emojis).where(lambda x: x.name == rule.emoji_name).single() + emoji = List(discord.Emoji, [x for x in guild.emojis if x.name == rule.emoji_name]).single() if emoji is None: self._logger.debug(__name__, f"Emoji {rule.emoji_name} not found") diff --git a/bot/src/bot_core/service/data_integrity_service.py b/bot/src/bot_core/service/data_integrity_service.py index fb6797f3..e40bf70d 100644 --- a/bot/src/bot_core/service/data_integrity_service.py +++ b/bot/src/bot_core/service/data_integrity_service.py @@ -1,9 +1,8 @@ from datetime import datetime, timedelta -from typing import Union -import discord from cpl_core.configuration import ConfigurationABC from cpl_core.database.context import DatabaseContextABC +from cpl_discord.container import Member, Guild from cpl_discord.service import DiscordBotServiceABC from bot_core.abc.client_utils_abc import ClientUtilsABC @@ -66,356 +65,255 @@ class DataIntegrityService: self._is_for_shutdown = False - def _check_known_users(self): - self._logger.debug(__name__, f"Start checking KnownUsers table, {len(self._bot.users)}") - for u in self._bot.users: - u: discord.User = u - try: - if u.bot: - self._logger.trace(__name__, f"User {u.id} is ignored, because its a bot") - continue + async def check_data_integrity(self, is_for_shutdown=False): + self._logger.info(__name__, f"Data integrity service started") + if is_for_shutdown != self._is_for_shutdown: + self._is_for_shutdown = is_for_shutdown - user = self._known_users.find_user_by_discord_id(u.id) - if user is not None: - continue + try: + for g in self._bot.guilds: + self._logger.debug(__name__, f"Start check for server: {g.id}") + s = self._get_or_create_server(g) + self._logger.debug(__name__, f"Start check for clients") + self._check_clients(g.id, s) - self._logger.warn(__name__, f"Unknown user: {u.id}") - self._logger.debug(__name__, f"Add user: {u.id}") - self._known_users.add_user(KnownUser(u.id)) - self._db_context.save_changes() + for m in [m for m in g.members if not m.bot]: + await self._check_default_role(m) + self._check_known_user(m.id) - user = self._known_users.find_user_by_discord_id(u.id) - if user is None: - self._logger.fatal(__name__, f"Cannot add user: {u.id}") + self._logger.debug(__name__, f"Start check for member: {g.id}@{m.id}") + u = self._get_or_create_user(s, m.id) - self._logger.debug(__name__, f"Added user: {u.id}") - except Exception as e: - self._logger.error(__name__, f"Cannot get user", e) + self._logger.debug(__name__, f"Start check for user joined server: {g.id}@{m.id}") + self._check_user_join(g, m, u) - def check_servers(self): - self._logger.debug(__name__, f"Start checking Servers table") - for g in self._bot.guilds: - g: discord.Guild = g - try: - server = self._servers.find_server_by_discord_id(g.id) - if server is not None: - continue + self._logger.debug(__name__, f"Start check for user joined voice channels: {g.id}@{m.id}") + self._check_user_joined_vc(g.id, m, u) - self._logger.warn(__name__, f"Server not found in database: {g.id}") - self._logger.debug(__name__, f"Add server: {g.id}") - self._servers.add_server(Server(g.id)) - self._db_context.save_changes() + self._logger.debug(__name__, f"Start check for user joined game servers: {g.id}@{m.id}") + self._check_user_joined_gs(g.id, m.id, u) - server = self._servers.find_server_by_discord_id(g.id) - if server is None: - self._logger.fatal(__name__, f"Cannot add server: {g.id}") + self._logger.debug(__name__, f"Start check for user got achievements: {g.id}@{m.id}") + await self._check_for_user_achievements(u) - self._logger.debug(__name__, f"Added server: {g.id}") - except Exception as e: - self._logger.error(__name__, f"Cannot get server", e) + for m in [m for m in g.members if m.bot]: + u = self._users.find_user_by_discord_id_and_server_id(m.id, s.id) + if u is None: + continue + + self._remove_bot(u) + self._logger.info(__name__, f"Data integrity service finished") + except Exception as e: + self._logger.fatal(__name__, f"Checking data integrity failed", e) + + def _get_or_create_server(self, guild: Guild) -> Server: + try: + server = self._servers.find_server_by_discord_id(guild.id) + if server is not None: + return server + + self._logger.warn(__name__, f"Server not found in database: {guild.id}") + self._logger.debug(__name__, f"Add server: {guild.id}") + self._servers.add_server(Server(guild.id)) + self._db_context.save_changes() + + server = self._servers.find_server_by_discord_id(guild.id) + if server is None: + self._logger.fatal(__name__, f"Cannot add server: {guild.id}") + + self._logger.trace(__name__, f"Added server: {guild.id}") + return server + except Exception as e: + self._logger.error(__name__, f"Cannot get server", e) + + def _check_clients(self, guild_id: int, server: Server): + try: + client = self._clients.find_client_by_server_id(server.id) + if client is not None: + return + + self._logger.warn( + __name__, + f"Client for server {guild_id} not found in database: {self._bot.user.id}", + ) + self._logger.debug(__name__, f"Add client: {self._bot.user.id}") + self._clients.add_client(Client(self._bot.user.id, 0, 0, 0, 0, 0, server)) + self._db_context.save_changes() + + client = self._clients.find_client_by_server_id(server.id) + if client is None: + self._logger.fatal( + __name__, + f"Cannot add client {self._bot.user.id} for server {guild_id}", + ) + + self._logger.trace(__name__, f"Added client: {guild_id}") + except Exception as e: + self._logger.error(__name__, f"Cannot get client", e) results = self._servers.get_servers() if results is None or len(results) == 0: self._logger.error(__name__, f"Table Servers is empty!") - def _check_clients(self): - self._logger.debug(__name__, f"Start checking Clients table") - for g in self._bot.guilds: - g: discord.Guild = g - try: - server: Server = self._servers.find_server_by_discord_id(g.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {g.id}") + def _check_known_user(self, member_id: int): + try: + if self._known_users.find_user_by_discord_id(member_id) is not None: + return - client = self._clients.find_client_by_server_id(server.id) - if client is not None: + self._logger.warn(__name__, f"Unknown user: {member_id}") + self._logger.trace(__name__, f"Add known user: {member_id}") + self._known_users.add_user(KnownUser(member_id)) + self._db_context.save_changes() + + user = self._known_users.find_user_by_discord_id(member_id) + if user is None: + self._logger.fatal(__name__, f"Cannot add user: {member_id}") + + self._logger.trace(__name__, f"Added known user: {member_id}") + except Exception as e: + self._logger.error(__name__, f"Cannot get user", e) + + def _get_or_create_user(self, server: Server, member_id: int) -> User: + try: + user = self._users.find_user_by_discord_id_and_server_id(member_id, server.id) + if user is not None: + return user + + self._logger.warn(__name__, f"User not found in database: {member_id}") + self._logger.debug(__name__, f"Add user: {member_id}") + self._users.add_user(User(member_id, 0, 0, 0, None, server)) + self._db_context.save_changes() + + self._logger.trace(__name__, f"Added User: {member_id}") + return self._users.get_user_by_discord_id_and_server_id(member_id, server.id) + except Exception as e: + self._logger.error(__name__, f"Cannot get User", e) + + results = self._users.get_users() + if results is None or len(results) == 0: + self._logger.error(__name__, f"Table Users is empty!") + + def _check_user_join(self, guild: Guild, member: Member, user: User): + try: + join = self._user_joins.find_active_user_joined_server_by_user_id(user.id) + if join is not None: + return + + self._logger.warn( + __name__, + f"Active UserJoinedServer not found in database: {guild.id}:{member.id}@{member.joined_at}", + ) + self._logger.debug( + __name__, + f"Add UserJoinedServer: {guild.id}:{member.id}@{member.joined_at}", + ) + self._user_joins.add_user_joined_server(UserJoinedServer(user, self._dtp.transform(member.joined_at), None)) + self._db_context.save_changes() + + self._logger.trace(__name__, f"Added UserJoinedServer: {member.id}") + except Exception as e: + self._logger.error(__name__, f"Cannot get UserJoinedServer", e) + + try: + joins = self._user_joins.get_user_joined_servers() + for join in [x for x in joins if x.user.server.discord_id == guild.id and x.leaved_on is None]: + dc_user = guild.get_member(join.user.discord_id) + if dc_user is not None: continue self._logger.warn( __name__, - f"Client for server {g.id} not found in database: {self._bot.user.id}", + f"User {join.user.discord_id} already left the server.", ) - self._logger.debug(__name__, f"Add client: {self._bot.user.id}") - self._clients.add_client(Client(self._bot.user.id, 0, 0, 0, 0, 0, server)) + join.leaved_on = datetime.now() + self._user_joins.update_user_joined_server(join) + self._db_context.save_changes() + except Exception as e: + self._logger.error(__name__, f"Cannot update UserJoinedServer", e) - client = self._clients.find_client_by_server_id(server.id) - if client is None: - self._logger.fatal( - __name__, - f"Cannot add client {self._bot.user.id} for server {g.id}", - ) + def _check_user_joined_vc(self, guild_id: int, member: Member, user: User): + settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild_id}") - self._logger.debug(__name__, f"Added client: {g.id}") - except Exception as e: - self._logger.error(__name__, f"Cannot get client", e) + try: + # close open voice states + joins = self._user_joins_vc.find_active_user_joined_voice_channels_by_user_id(user.id) + if joins is None or len(joins) == 0: + return - results = self._servers.get_servers() - if results is None or len(results) == 0: - self._logger.error(__name__, f"Table Servers is empty!") - - def _check_users(self): - self._logger.debug(__name__, f"Start checking Users table") - for g in self._bot.guilds: - g: discord.Guild = g - - try: - server = self._servers.find_server_by_discord_id(g.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {g.id}") - - for u in g.members: - u: Union[discord.Member, discord.User] = u - if u.bot: - self._logger.trace(__name__, f"User {u.id} is ignored, because its a bot") - continue - - user = self._users.find_user_by_discord_id_and_server_id(u.id, server.id) - if user is not None: - continue - - self._logger.warn(__name__, f"User not found in database: {u.id}") - self._logger.debug(__name__, f"Add user: {u.id}") - self._users.add_user(User(u.id, 0, 0, 0, None, server)) - self._db_context.save_changes() - - self._logger.debug(__name__, f"Added User: {u.id}") - except Exception as e: - self._logger.error(__name__, f"Cannot get User", e) - - results = self._users.get_users() - if results is None or len(results) == 0: - self._logger.error(__name__, f"Table Users is empty!") - - def _check_user_joins(self): - self._logger.debug(__name__, f"Start checking UserJoinedServers table") - for guild in self._bot.guilds: - guild: discord.Guild = guild - - server = self._servers.find_server_by_discord_id(guild.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {guild.id}") - - try: - for u in guild.members: - u: discord.User = u - if u.bot: - self._logger.trace(__name__, f"User {u.id} is ignored, because its a bot") - continue - - user = self._users.find_user_by_discord_id_and_server_id(u.id, server.id) - if user is None: - self._logger.fatal(__name__, f"User not found in database: {u.id}") - - join = self._user_joins.find_active_user_joined_server_by_user_id(user.id) - if join is not None: - continue - - m: discord.Member = u - self._logger.warn( - __name__, - f"Active UserJoinedServer not found in database: {guild.id}:{u.id}@{m.joined_at}", - ) - self._logger.debug( - __name__, - f"Add UserJoinedServer: {guild.id}:{u.id}@{m.joined_at}", - ) - self._user_joins.add_user_joined_server( - UserJoinedServer(user, self._dtp.transform(m.joined_at), None) - ) - self._db_context.save_changes() - - self._logger.debug(__name__, f"Added UserJoinedServer: {u.id}") - except Exception as e: - self._logger.error(__name__, f"Cannot get UserJoinedServer", e) - - results = self._users.get_users() - if results is None or len(results) == 0: - self._logger.error(__name__, f"Table Users is empty!") - - joins = self._user_joins.get_user_joined_servers() for join in joins: - join: UserJoinedServer = join - if join.user.server.discord_id != guild.id: - continue + self._logger.warn( + __name__, + f"Active UserJoinedVoiceChannel found in database: {guild_id}:{member.id}@{join.joined_on}", + ) + join.leaved_on = datetime.now() - if join.leaved_on is not None: - continue + if ((join.leaved_on - join.joined_on).total_seconds() / 60 / 60) > settings.max_voice_state_hours: + join.leaved_on = join.joined_on + timedelta(hours=settings.max_voice_state_hours) - dc_user = guild.get_member(join.user.discord_id) - if dc_user is None: - self._logger.warn( - __name__, - f"User {join.user.discord_id} already left the server.", - ) - join.leaved_on = datetime.now() - self._user_joins.update_user_joined_server(join) + self._user_joins_vc.update_user_joined_voice_channel(join) - self._db_context.save_changes() + if self._is_for_shutdown: + user.xp += round(join.time * settings.xp_per_ontime_hour) + self._users.update_user(user) - def _check_user_joins_vc(self): - self._logger.debug(__name__, f"Start checking UserJoinedVoiceChannel table") - for guild in self._bot.guilds: - guild: discord.Guild = guild - settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild.id}") - - server = self._servers.find_server_by_discord_id(guild.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {guild.id}") - - try: - # close open voice states - for member in guild.members: - if member.bot: - self._logger.trace(__name__, f"User {member.id} is ignored, because its a bot") - continue - - user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) - if user is None: - self._logger.fatal(__name__, f"User not found in database: {member.id}") - - joins = self._user_joins_vc.find_active_user_joined_voice_channels_by_user_id(user.id) - if joins is None or len(joins) == 0: - continue - - for join in joins: - self._logger.warn( - __name__, - f"Active UserJoinedVoiceChannel found in database: {guild.id}:{member.id}@{join.joined_on}", - ) - join.leaved_on = datetime.now() - - if ( - (join.leaved_on - join.joined_on).total_seconds() / 60 / 60 - ) > settings.max_voice_state_hours: - join.leaved_on = join.joined_on + timedelta(hours=settings.max_voice_state_hours) - - self._user_joins_vc.update_user_joined_voice_channel(join) - - if self._is_for_shutdown: - user.xp += round(join.time * settings.xp_per_ontime_hour) - self._users.update_user(user) - - self._db_context.save_changes() - if self._is_for_shutdown: - return - - # add open voice states - for member in guild.members: - if member.bot: - self._logger.trace(__name__, f"User {member.id} is ignored, because its a bot") - continue - - if member.voice is None or member.voice.channel.id in settings.afk_channel_ids: - continue - - user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) - if user is None: - self._logger.fatal(__name__, f"User not found in database: {member.id}") - - join = UserJoinedVoiceChannel(user, member.voice.channel.id, datetime.now()) - self._user_joins_vc.add_user_joined_voice_channel(join) - self._db_context.save_changes() - - except Exception as e: - self._logger.error(__name__, f"Cannot get UserJoinedVoiceChannel", e) - - def _check_user_joined_gs(self): - self._logger.debug(__name__, f"Start checking UserJoinedGameServer table") - for guild in self._bot.guilds: - guild: discord.Guild = guild - - server = self._servers.find_server_by_discord_id(guild.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {guild.id}") - - try: - for member in guild.members: - if member.bot: - self._logger.trace(__name__, f"User {member.id} is ignored, because its a bot") - continue - - user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) - if user is None: - self._logger.fatal(__name__, f"User not found in database: {member.id}") - - joins = self._user_joined_gs.find_active_user_joined_game_servers_by_user_id(user.id) - if joins is None or len(joins) == 0: - continue - - for join in joins: - self._logger.warn( - __name__, - f"Active UserJoinedGameServer found in database: {guild.id}:{member.id}@{join.joined_on}", - ) - join.leaved_on = datetime.now() - settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild.id}") - - if ( - (join.leaved_on - join.joined_on).total_seconds() / 60 / 60 - ) > settings.max_voice_state_hours: - join.leaved_on = join.joined_on + timedelta(hours=settings.max_voice_state_hours) - - self._user_joined_gs.update_user_joined_game_server(join) - if self._is_for_shutdown: - user.xp += round(join.time * settings.xp_per_ontime_hour) - self._users.update_user(user) - - self._db_context.save_changes() - except Exception as e: - self._logger.error(__name__, f"Cannot get UserJoinedGameServer", e) - - async def _check_for_user_achievements(self): - self._logger.debug(__name__, f"Start checking UserGotAchievement table") - - for guild in self._bot.guilds: - server = self._servers.find_server_by_discord_id(guild.id) - if server is None: - self._logger.fatal(__name__, f"Server not found in database: {guild.id}") - - for member in guild.members: - if member.bot: - self._logger.trace(__name__, f"User {member.id} is ignored, because its a bot") - continue - - user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) - if user is None: - self._logger.fatal(__name__, f"User not found in database: {member.id}") - - await self._achievements.validate_achievements_for_user(user) - - async def _check_default_role(self): - for guild in self._bot.guilds: - for member in guild.members: - await self._client_utils.check_default_role(member) - - def _check_for_bots(self): - for guild in self._bot.guilds: - server = self._servers.get_server_by_discord_id(guild.id) - - for member in guild.members.where(lambda x: x.bot): - user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) - if user is None: - continue - - for join in self._user_joins.get_user_joined_servers_by_user_id(user.id): - self._user_joins.delete_user_joined_server(join) - - self._user_joins_vc.delete_user_joined_voice_channel_by_user_id(user.id) - self._users.delete_user(user) self._db_context.save_changes() + if self._is_for_shutdown: + return - async def check_data_integrity(self, is_for_shutdown=False): - if is_for_shutdown != self._is_for_shutdown: - self._is_for_shutdown = is_for_shutdown + # add open voice states + if member.voice is None or member.voice.channel.id in settings.afk_channel_ids: + return - await self._check_default_role() - self._check_known_users() - self.check_servers() - self._check_clients() - self._check_users() - self._check_user_joins() - self._check_user_joins_vc() - self._check_user_joined_gs() - await self._check_for_user_achievements() - self._check_for_bots() + join = UserJoinedVoiceChannel(user, member.voice.channel.id, datetime.now()) + self._user_joins_vc.add_user_joined_voice_channel(join) + self._db_context.save_changes() + except Exception as e: + self._logger.error(__name__, f"Cannot get UserJoinedVoiceChannel", e) + + def _check_user_joined_gs(self, guild_id: int, member_id: int, user: User): + try: + joins = self._user_joined_gs.find_active_user_joined_game_servers_by_user_id(user.id) + if joins is None or len(joins) == 0: + return + + for join in joins: + self._logger.warn( + __name__, + f"Active UserJoinedGameServer found in database: {guild_id}:{member_id}@{join.joined_on}", + ) + join.leaved_on = datetime.now() + settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild_id}") + + if join.time > settings.max_voice_state_hours: + join.leaved_on = join.joined_on + timedelta(hours=settings.max_voice_state_hours) + + self._user_joined_gs.update_user_joined_game_server(join) + if self._is_for_shutdown: + user.xp += round(join.time * settings.xp_per_ontime_hour) + self._users.update_user(user) + + self._db_context.save_changes() + except Exception as e: + self._logger.error(__name__, f"Cannot get UserJoinedGameServer", e) + + async def _check_for_user_achievements(self, user: User): + try: + await self._achievements.validate_achievements_for_user(user) + except Exception as e: + self._logger.error(__name__, f"Cannot check UserGotAchievement for {user.id}", e) + + async def _check_default_role(self, member: Member): + await self._client_utils.check_default_role(member) + + def _remove_bot(self, user: User): + known_user = self._known_users.find_user_by_discord_id(user.discord_id) + if known_user is not None: + self._known_users.delete_user(known_user) + + for join in self._user_joins.get_user_joined_servers_by_user_id(user.id): + self._user_joins.delete_user_joined_server(join) + + self._user_joins_vc.delete_user_joined_voice_channel_by_user_id(user.id) + self._users.delete_user(user) + self._db_context.save_changes() diff --git a/bot/src/bot_data/abc/user_joined_server_repository_abc.py b/bot/src/bot_data/abc/user_joined_server_repository_abc.py index cbc3a718..cfb5a49f 100644 --- a/bot/src/bot_data/abc/user_joined_server_repository_abc.py +++ b/bot/src/bot_data/abc/user_joined_server_repository_abc.py @@ -19,10 +19,6 @@ class UserJoinedServerRepositoryABC(ABC): def get_user_joined_server_by_id(self, id: int) -> UserJoinedServer: pass - @abstractmethod - def get_user_joined_server_by_server_id(self, server_id: int) -> UserJoinedServer: - pass - @abstractmethod def get_user_joined_servers_by_user_id(self, user_id: int) -> list[UserJoinedServer]: pass diff --git a/bot/src/bot_data/model/user_joined_server.py b/bot/src/bot_data/model/user_joined_server.py index e31544cb..43f33bb3 100644 --- a/bot/src/bot_data/model/user_joined_server.py +++ b/bot/src/bot_data/model/user_joined_server.py @@ -67,15 +67,6 @@ class UserJoinedServer(TableABC): """ ) - @staticmethod - def get_select_by_server_id_string(id: int) -> str: - return str( - f""" - SELECT * FROM `UserJoinedServers` - WHERE `ServerId` = {id}; - """ - ) - @staticmethod def get_select_by_user_id_string(id: int) -> str: return str( diff --git a/bot/src/bot_data/service/user_joined_server_repository_service.py b/bot/src/bot_data/service/user_joined_server_repository_service.py index affa9585..0ee3b889 100644 --- a/bot/src/bot_data/service/user_joined_server_repository_service.py +++ b/bot/src/bot_data/service/user_joined_server_repository_service.py @@ -48,13 +48,6 @@ class UserJoinedServerRepositoryService(UserJoinedServerRepositoryABC): ) return self.__from_result(self._context.select(UserJoinedServer.get_select_by_id_string(id))[0]) - def get_user_joined_server_by_server_id(self, server_id: int) -> UserJoinedServer: - self._logger.trace( - __name__, - f"Send SQL command: {UserJoinedServer.get_select_by_server_id_string(server_id)}", - ) - return self.__from_result(self._context.select(UserJoinedServer.get_select_by_id_string(server_id))[0]) - def get_user_joined_servers_by_user_id(self, user_id: int) -> List[UserJoinedServer]: self._logger.trace( __name__, diff --git a/bot/src/modules/config/events/config_on_ready_event.py b/bot/src/modules/config/events/config_on_ready_event.py index 87d3ec20..699063d6 100644 --- a/bot/src/modules/config/events/config_on_ready_event.py +++ b/bot/src/modules/config/events/config_on_ready_event.py @@ -28,7 +28,5 @@ class ConfigOnReadyEvent(OnReadyABC): self._data_integrity_service = data_integrity_service async def on_ready(self): - self._data_integrity_service.check_servers() - for guild in self._bot.guilds: await self._config_service.reload_server_config(self._servers.get_server_by_discord_id(guild.id)) From 0e4419312b1d46545a493b1a2696fbed9068ff72 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 15:03:40 +0100 Subject: [PATCH 06/12] Improved permission loading #446 --- bot/cpl-workspace.json | 1 - bot/src/bot/bot.json | 1 - bot/src/bot/module_list.py | 2 - .../transformer/auth_user_transformer.py | 2 +- .../abc/permission_service_abc.py | 0 .../configuration/feature_flags_enum.py | 1 - .../configuration/feature_flags_settings.py | 1 - .../bot_core/core_extension/core_extension.py | 2 +- bot/src/bot_core/core_module.py | 3 + bot/src/bot_core/helper/command_checks.py | 2 +- .../bot_core/service/permission_service.py | 114 ++++++++++++++++++ .../bot_data/model/team_member_type_enum.py | 1 + bot/src/bot_graphql/abc/query_abc.py | 2 +- .../mutations/achievement_mutation.py | 2 +- .../mutations/scheduled_event_mutation.py | 2 +- .../mutations/server_config_mutation.py | 9 ++ .../mutations/short_role_name_mutation.py | 2 +- .../mutations/technician_config_mutation.py | 9 ++ .../user_joined_game_server_mutation.py | 2 +- .../bot_graphql/mutations/user_mutation.py | 2 +- bot/src/bot_graphql/queries/user_query.py | 2 +- .../auto_role/command/auto_role_group.py | 2 +- .../modules/base/command/game_server_group.py | 2 +- bot/src/modules/base/command/ping_command.py | 2 +- bot/src/modules/base/command/purge_command.py | 2 +- bot/src/modules/base/command/user_group.py | 2 +- .../base/events/base_on_member_join_event.py | 2 +- ...n_voice_state_update_event_help_channel.py | 2 +- .../base/service/user_warnings_service.py | 2 +- bot/src/modules/level/command/level_group.py | 2 +- .../modules/level/service/level_service.py | 10 ++ bot/src/modules/permission/__init__.py | 26 ---- bot/src/modules/permission/abc/__init__.py | 26 ---- bot/src/modules/permission/permission.json | 44 ------- .../modules/permission/permission_module.py | 22 ---- .../modules/permission/service/__init__.py | 26 ---- .../permission/service/permission_service.py | 74 ------------ .../short_role_name_check_command.py | 2 +- .../technician/command/api_key_group.py | 2 +- .../modules/technician/command/log_command.py | 3 +- .../technician/command/restart_command.py | 2 +- .../technician/command/shutdown_command.py | 2 +- .../technician/command/sync_xp_command.py | 2 +- .../view/server/members/members.component.ts | 5 +- 44 files changed, 174 insertions(+), 252 deletions(-) rename bot/src/{modules/permission => bot_core}/abc/permission_service_abc.py (100%) create mode 100644 bot/src/bot_core/service/permission_service.py delete mode 100644 bot/src/modules/permission/__init__.py delete mode 100644 bot/src/modules/permission/abc/__init__.py delete mode 100644 bot/src/modules/permission/permission.json delete mode 100644 bot/src/modules/permission/permission_module.py delete mode 100644 bot/src/modules/permission/service/__init__.py delete mode 100644 bot/src/modules/permission/service/permission_service.py diff --git a/bot/cpl-workspace.json b/bot/cpl-workspace.json index 74d016e7..8061d025 100644 --- a/bot/cpl-workspace.json +++ b/bot/cpl-workspace.json @@ -14,7 +14,6 @@ "config": "src/modules/config/config.json", "database": "src/modules/database/database.json", "level": "src/modules/level/level.json", - "permission": "src/modules/permission/permission.json", "technician": "src/modules/technician/technician.json", "short-role-name": "src/modules/short_role_name/short-role-name.json", "special-offers": "src/modules/special_offers/special-offers.json", diff --git a/bot/src/bot/bot.json b/bot/src/bot/bot.json index 3df77fe5..da730b2c 100644 --- a/bot/src/bot/bot.json +++ b/bot/src/bot/bot.json @@ -70,7 +70,6 @@ "../modules/config/config.json", "../modules/database/database.json", "../modules/level/level.json", - "../modules/permission/permission.json", "../modules/short_role_name/short-role-name.json", "../modules/special_offers/special-offers.json", "../modules/technician/technician.json" diff --git a/bot/src/bot/module_list.py b/bot/src/bot/module_list.py index 88e99721..8b0b72ad 100644 --- a/bot/src/bot/module_list.py +++ b/bot/src/bot/module_list.py @@ -12,7 +12,6 @@ from modules.boot_log.boot_log_module import BootLogModule from modules.config.config_module import ConfigModule from modules.database.database_module import DatabaseModule 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.special_offers.special_offers_module import SteamSpecialOffersModule from modules.technician.technician_module import TechnicianModule @@ -30,7 +29,6 @@ class ModuleList: ConfigModule, # has to be before db check DatabaseModule, GraphQLModule, - PermissionModule, AutoRoleModule, BaseModule, LevelModule, diff --git a/bot/src/bot_api/transformer/auth_user_transformer.py b/bot/src/bot_api/transformer/auth_user_transformer.py index 9e52fec3..66506a3a 100644 --- a/bot/src/bot_api/transformer/auth_user_transformer.py +++ b/bot/src/bot_api/transformer/auth_user_transformer.py @@ -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_user import AuthUser 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): diff --git a/bot/src/modules/permission/abc/permission_service_abc.py b/bot/src/bot_core/abc/permission_service_abc.py similarity index 100% rename from bot/src/modules/permission/abc/permission_service_abc.py rename to bot/src/bot_core/abc/permission_service_abc.py diff --git a/bot/src/bot_core/configuration/feature_flags_enum.py b/bot/src/bot_core/configuration/feature_flags_enum.py index 61a4652e..0a211505 100644 --- a/bot/src/bot_core/configuration/feature_flags_enum.py +++ b/bot/src/bot_core/configuration/feature_flags_enum.py @@ -15,7 +15,6 @@ class FeatureFlagsEnum(Enum): database_module = "DatabaseModule" level_module = "LevelModule" moderator_module = "ModeratorModule" - permission_module = "PermissionModule" short_role_name_module = "ShortRoleNameModule" steam_special_offers_module = "SteamSpecialOffersModule" # features diff --git a/bot/src/bot_core/configuration/feature_flags_settings.py b/bot/src/bot_core/configuration/feature_flags_settings.py index cbea9a97..104ff9e2 100644 --- a/bot/src/bot_core/configuration/feature_flags_settings.py +++ b/bot/src/bot_core/configuration/feature_flags_settings.py @@ -16,7 +16,6 @@ class FeatureFlagsSettings(ConfigurationModelABC): FeatureFlagsEnum.data_module.value: True, # 03.10.2022 #56 FeatureFlagsEnum.database_module.value: True, # 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.short_role_name_module.value: True, # 28.09.2023 #378 FeatureFlagsEnum.steam_special_offers_module.value: True, # 11.10.2023 #188 diff --git a/bot/src/bot_core/core_extension/core_extension.py b/bot/src/bot_core/core_extension/core_extension.py index de5a1781..02dc8171 100644 --- a/bot/src/bot_core/core_extension/core_extension.py +++ b/bot/src/bot_core/core_extension/core_extension.py @@ -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.helper.command_checks import CommandChecks 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): diff --git a/bot/src/bot_core/core_module.py b/bot/src/bot_core/core_module.py index 02611684..9323b43e 100644 --- a/bot/src/bot_core/core_module.py +++ b/bot/src/bot_core/core_module.py @@ -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.message_service_abc import MessageServiceABC 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.events.core_on_ready_event import CoreOnReadyEvent 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.data_integrity_service import DataIntegrityService from bot_core.service.message_service import MessageService +from bot_core.service.permission_service import PermissionService class CoreModule(ModuleABC): @@ -28,6 +30,7 @@ class CoreModule(ModuleABC): services.add_transient(MessageServiceABC, MessageService) services.add_transient(ClientUtilsABC, ClientUtilsService) services.add_transient(DataIntegrityService) + services.add_singleton(PermissionServiceABC, PermissionService) # pipes services.add_transient(DateTimeOffsetPipe) diff --git a/bot/src/bot_core/helper/command_checks.py b/bot/src/bot_core/helper/command_checks.py index e2048409..99e57d5a 100644 --- a/bot/src/bot_core/helper/command_checks.py +++ b/bot/src/bot_core/helper/command_checks.py @@ -7,7 +7,7 @@ from discord.ext.commands import Context from bot_core.abc.client_utils_abc import ClientUtilsABC from bot_core.abc.message_service_abc import MessageServiceABC 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: diff --git a/bot/src/bot_core/service/permission_service.py b/bot/src/bot_core/service/permission_service.py new file mode 100644 index 00000000..96dc92a5 --- /dev/null +++ b/bot/src/bot_core/service/permission_service.py @@ -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 diff --git a/bot/src/bot_data/model/team_member_type_enum.py b/bot/src/bot_data/model/team_member_type_enum.py index 86b3b41d..84dc8fee 100644 --- a/bot/src/bot_data/model/team_member_type_enum.py +++ b/bot/src/bot_data/model/team_member_type_enum.py @@ -4,3 +4,4 @@ from enum import Enum class TeamMemberTypeEnum(Enum): moderator = "Moderator" admin = "Admin" + technician = "Technician" diff --git a/bot/src/bot_graphql/abc/query_abc.py b/bot/src/bot_graphql/abc/query_abc.py index 882a420d..d66fd516 100644 --- a/bot/src/bot_graphql/abc/query_abc.py +++ b/bot/src/bot_graphql/abc/query_abc.py @@ -12,6 +12,7 @@ from bot_api.exception.service_exception import ServiceException from bot_api.route.route import Route from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum 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.auth_role_enum import AuthRoleEnum 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.filter.page import Page from bot_graphql.filter.sort import Sort -from modules.permission.service.permission_service import PermissionService class QueryABC(ObjectType): diff --git a/bot/src/bot_graphql/mutations/achievement_mutation.py b/bot/src/bot_graphql/mutations/achievement_mutation.py index 40975a38..5cc939e0 100644 --- a/bot/src/bot_graphql/mutations/achievement_mutation.py +++ b/bot/src/bot_graphql/mutations/achievement_mutation.py @@ -6,7 +6,7 @@ from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.model.achievement import Achievement from bot_data.model.user_role_enum import UserRoleEnum 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): diff --git a/bot/src/bot_graphql/mutations/scheduled_event_mutation.py b/bot/src/bot_graphql/mutations/scheduled_event_mutation.py index 6544bb42..381c8685 100644 --- a/bot/src/bot_graphql/mutations/scheduled_event_mutation.py +++ b/bot/src/bot_graphql/mutations/scheduled_event_mutation.py @@ -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.user_role_enum import UserRoleEnum 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): diff --git a/bot/src/bot_graphql/mutations/server_config_mutation.py b/bot/src/bot_graphql/mutations/server_config_mutation.py index 6b2ff5eb..88669d83 100644 --- a/bot/src/bot_graphql/mutations/server_config_mutation.py +++ b/bot/src/bot_graphql/mutations/server_config_mutation.py @@ -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.user_role_enum import UserRoleEnum from bot_graphql.abc.query_abc import QueryABC +from bot_core.service.permission_service import PermissionService class ServerConfigMutation(QueryABC): @@ -24,6 +25,7 @@ class ServerConfigMutation(QueryABC): server_configs: ServerConfigRepositoryABC, db: DatabaseContextABC, config_service: ConfigService, + permissions: PermissionService, ): QueryABC.__init__(self, "ServerConfigMutation") @@ -33,6 +35,7 @@ class ServerConfigMutation(QueryABC): self._server_configs = server_configs self._db = db self._config_service = config_service + self._permissions = permissions 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): 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: if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)): continue self._server_configs.delete_server_team_role_id_config(role_id) + has_update = True for role_id in new_config.team_role_ids: guild = self._bot.get_guild(new_config.server.discord_id) @@ -192,3 +197,7 @@ class ServerConfigMutation(QueryABC): continue self._server_configs.add_server_team_role_id_config(role_id) + has_update = True + + if has_update: + self._permissions.reset_cache() diff --git a/bot/src/bot_graphql/mutations/short_role_name_mutation.py b/bot/src/bot_graphql/mutations/short_role_name_mutation.py index 3044af99..14ae37a0 100644 --- a/bot/src/bot_graphql/mutations/short_role_name_mutation.py +++ b/bot/src/bot_graphql/mutations/short_role_name_mutation.py @@ -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.user_role_enum import UserRoleEnum 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): diff --git a/bot/src/bot_graphql/mutations/technician_config_mutation.py b/bot/src/bot_graphql/mutations/technician_config_mutation.py index 67091955..8ca08e86 100644 --- a/bot/src/bot_graphql/mutations/technician_config_mutation.py +++ b/bot/src/bot_graphql/mutations/technician_config_mutation.py @@ -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.service.technician_config_seeder import TechnicianConfigSeeder from bot_graphql.abc.query_abc import QueryABC +from bot_core.service.permission_service import PermissionService class TechnicianConfigMutation(QueryABC): @@ -30,6 +31,7 @@ class TechnicianConfigMutation(QueryABC): config_service: ConfigService, tech_seeder: TechnicianConfigSeeder, client_utils: ClientUtilsABC, + permissions: PermissionService, ): QueryABC.__init__(self, "TechnicianConfigMutation") @@ -42,6 +44,7 @@ class TechnicianConfigMutation(QueryABC): self._config_service = config_service self._tech_seeder = tech_seeder self._client_utils = client_utils + self._permissions = permissions self.set_field("updateTechnicianConfig", self.resolve_update_technician_config) @@ -126,11 +129,13 @@ class TechnicianConfigMutation(QueryABC): def _update_technician_ids(self, new_config: TechnicianConfig): old_config = self._technician_configs.get_technician_config() + has_update = False for technician_id in old_config.technician_ids: if technician_id in new_config.technician_ids: continue self._technician_configs.delete_technician_id_config(TechnicianIdConfig(technician_id)) + has_update = True for technician_id in new_config.technician_ids: user = self._bot.get_user(technician_id) @@ -142,3 +147,7 @@ class TechnicianConfigMutation(QueryABC): continue self._technician_configs.add_technician_id_config(TechnicianIdConfig(technician_id)) + has_update = True + + if has_update: + self._permissions.reset_cache() diff --git a/bot/src/bot_graphql/mutations/user_joined_game_server_mutation.py b/bot/src/bot_graphql/mutations/user_joined_game_server_mutation.py index 4f53a741..c2a3a3ec 100644 --- a/bot/src/bot_graphql/mutations/user_joined_game_server_mutation.py +++ b/bot/src/bot_graphql/mutations/user_joined_game_server_mutation.py @@ -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_role_enum import UserRoleEnum 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): diff --git a/bot/src/bot_graphql/mutations/user_mutation.py b/bot/src/bot_graphql/mutations/user_mutation.py index 9ec5f4cc..e203deb8 100644 --- a/bot/src/bot_graphql/mutations/user_mutation.py +++ b/bot/src/bot_graphql/mutations/user_mutation.py @@ -13,7 +13,7 @@ from bot_data.model.user_role_enum import UserRoleEnum from bot_graphql.abc.query_abc import QueryABC from modules.base.service.user_warnings_service import UserWarningsService 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): diff --git a/bot/src/bot_graphql/queries/user_query.py b/bot/src/bot_graphql/queries/user_query.py index a6cffa64..d503448c 100644 --- a/bot/src/bot_graphql/queries/user_query.py +++ b/bot/src/bot_graphql/queries/user_query.py @@ -22,7 +22,7 @@ from bot_graphql.filter.user_joined_voice_channel_filter import ( ) from bot_graphql.filter.user_warning_filter import UserWarningFilter 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): diff --git a/bot/src/modules/auto_role/command/auto_role_group.py b/bot/src/modules/auto_role/command/auto_role_group.py index f8d48d4e..dba39745 100644 --- a/bot/src/modules/auto_role/command/auto_role_group.py +++ b/bot/src/modules/auto_role/command/auto_role_group.py @@ -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_rule import AutoRoleRule 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): diff --git a/bot/src/modules/base/command/game_server_group.py b/bot/src/modules/base/command/game_server_group.py index 55d235e3..a3d4805e 100644 --- a/bot/src/modules/base/command/game_server_group.py +++ b/bot/src/modules/base/command/game_server_group.py @@ -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.model.game_server import GameServer 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): diff --git a/bot/src/modules/base/command/ping_command.py b/bot/src/modules/base/command/ping_command.py index ca0a14ac..55cb48d4 100644 --- a/bot/src/modules/base/command/ping_command.py +++ b/bot/src/modules/base/command/ping_command.py @@ -11,7 +11,7 @@ from bot_core.helper.command_checks import CommandChecks from bot_core.logging.command_logger import CommandLogger from bot_data.abc.server_repository_abc import ServerRepositoryABC 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): diff --git a/bot/src/modules/base/command/purge_command.py b/bot/src/modules/base/command/purge_command.py index 9816e29f..67a2f44c 100644 --- a/bot/src/modules/base/command/purge_command.py +++ b/bot/src/modules/base/command/purge_command.py @@ -11,7 +11,7 @@ from bot_core.abc.message_service_abc import MessageServiceABC from bot_core.helper.command_checks import CommandChecks from bot_core.logging.command_logger import CommandLogger 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): diff --git a/bot/src/modules/base/command/user_group.py b/bot/src/modules/base/command/user_group.py index 4f1df692..369cc4c6 100644 --- a/bot/src/modules/base/command/user_group.py +++ b/bot/src/modules/base/command/user_group.py @@ -27,7 +27,7 @@ from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC from bot_data.model.server_config import ServerConfig from modules.base.service.user_warnings_service import UserWarningsService 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): diff --git a/bot/src/modules/base/events/base_on_member_join_event.py b/bot/src/modules/base/events/base_on_member_join_event.py index 35a5cf05..63054277 100644 --- a/bot/src/modules/base/events/base_on_member_join_event.py +++ b/bot/src/modules/base/events/base_on_member_join_event.py @@ -20,7 +20,7 @@ from bot_data.model.known_user import KnownUser from bot_data.model.server_config import ServerConfig from bot_data.model.user import User 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): diff --git a/bot/src/modules/base/events/base_on_voice_state_update_event_help_channel.py b/bot/src/modules/base/events/base_on_voice_state_update_event_help_channel.py index 545620ac..8ae95da8 100644 --- a/bot/src/modules/base/events/base_on_voice_state_update_event_help_channel.py +++ b/bot/src/modules/base/events/base_on_voice_state_update_event_help_channel.py @@ -8,7 +8,7 @@ from bot_core.abc.message_service_abc import MessageServiceABC from bot_core.helper.event_checks import EventChecks from bot_data.abc.server_repository_abc import ServerRepositoryABC 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): diff --git a/bot/src/modules/base/service/user_warnings_service.py b/bot/src/modules/base/service/user_warnings_service.py index eea9129a..125b82a2 100644 --- a/bot/src/modules/base/service/user_warnings_service.py +++ b/bot/src/modules/base/service/user_warnings_service.py @@ -14,7 +14,7 @@ from bot_data.model.server_config import ServerConfig from bot_data.model.user import User from bot_data.model.user_warnings import UserWarnings 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: diff --git a/bot/src/modules/level/command/level_group.py b/bot/src/modules/level/command/level_group.py index 50e03692..f7f1e626 100644 --- a/bot/src/modules/level/command/level_group.py +++ b/bot/src/modules/level/command/level_group.py @@ -24,7 +24,7 @@ from bot_data.model.level import Level from bot_data.model.server_config import ServerConfig from modules.level.level_seeder import LevelSeeder 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): diff --git a/bot/src/modules/level/service/level_service.py b/bot/src/modules/level/service/level_service.py index e85c1719..8f05d4d5 100644 --- a/bot/src/modules/level/service/level_service.py +++ b/bot/src/modules/level/service/level_service.py @@ -6,6 +6,8 @@ from cpl_discord.container import Guild, Role, Member from cpl_discord.service import DiscordBotServiceABC 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_data.model.level import Level from bot_data.model.server_config import ServerConfig @@ -38,7 +40,14 @@ class LevelService: self._message_service = message_service 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: + self._check_for_feature(user) + levels_by_server = self._levels.get_levels_by_server_id(user.server.id) if user.xp < 0: return levels_by_server.order_by(lambda l: l.min_xp).first() @@ -51,6 +60,7 @@ class LevelService: return levels.last() 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) 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() diff --git a/bot/src/modules/permission/__init__.py b/bot/src/modules/permission/__init__.py deleted file mode 100644 index 264460c3..00000000 --- a/bot/src/modules/permission/__init__.py +++ /dev/null @@ -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") diff --git a/bot/src/modules/permission/abc/__init__.py b/bot/src/modules/permission/abc/__init__.py deleted file mode 100644 index ff1f315c..00000000 --- a/bot/src/modules/permission/abc/__init__.py +++ /dev/null @@ -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") diff --git a/bot/src/modules/permission/permission.json b/bot/src/modules/permission/permission.json deleted file mode 100644 index 443c982f..00000000 --- a/bot/src/modules/permission/permission.json +++ /dev/null @@ -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": [] - } -} \ No newline at end of file diff --git a/bot/src/modules/permission/permission_module.py b/bot/src/modules/permission/permission_module.py deleted file mode 100644 index 75da783e..00000000 --- a/bot/src/modules/permission/permission_module.py +++ /dev/null @@ -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 diff --git a/bot/src/modules/permission/service/__init__.py b/bot/src/modules/permission/service/__init__.py deleted file mode 100644 index 59ca5137..00000000 --- a/bot/src/modules/permission/service/__init__.py +++ /dev/null @@ -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") diff --git a/bot/src/modules/permission/service/permission_service.py b/bot/src/modules/permission/service/permission_service.py deleted file mode 100644 index 9ac28c55..00000000 --- a/bot/src/modules/permission/service/permission_service.py +++ /dev/null @@ -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 diff --git a/bot/src/modules/short_role_name/short_role_name_check_command.py b/bot/src/modules/short_role_name/short_role_name_check_command.py index 663be0f1..4ff554c0 100644 --- a/bot/src/modules/short_role_name/short_role_name_check_command.py +++ b/bot/src/modules/short_role_name/short_role_name_check_command.py @@ -11,7 +11,7 @@ from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings from bot_core.helper.command_checks import CommandChecks from bot_core.logging.command_logger import CommandLogger 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 diff --git a/bot/src/modules/technician/command/api_key_group.py b/bot/src/modules/technician/command/api_key_group.py index 11912385..48de1bbf 100644 --- a/bot/src/modules/technician/command/api_key_group.py +++ b/bot/src/modules/technician/command/api_key_group.py @@ -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.user_repository_abc import UserRepositoryABC 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): diff --git a/bot/src/modules/technician/command/log_command.py b/bot/src/modules/technician/command/log_command.py index 2f799d61..5030cde5 100644 --- a/bot/src/modules/technician/command/log_command.py +++ b/bot/src/modules/technician/command/log_command.py @@ -1,5 +1,4 @@ import os -from string import Template from zipfile import ZipFile 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.helper.command_checks import CommandChecks 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): diff --git a/bot/src/modules/technician/command/restart_command.py b/bot/src/modules/technician/command/restart_command.py index 76fda82c..00461bba 100644 --- a/bot/src/modules/technician/command/restart_command.py +++ b/bot/src/modules/technician/command/restart_command.py @@ -13,7 +13,7 @@ from bot_core.helper.command_checks import CommandChecks from bot_core.logging.command_logger import CommandLogger from bot_core.service.data_integrity_service import DataIntegrityService 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): diff --git a/bot/src/modules/technician/command/shutdown_command.py b/bot/src/modules/technician/command/shutdown_command.py index db2f807a..b6ea6011 100644 --- a/bot/src/modules/technician/command/shutdown_command.py +++ b/bot/src/modules/technician/command/shutdown_command.py @@ -13,7 +13,7 @@ from bot_core.helper.command_checks import CommandChecks from bot_core.logging.command_logger import CommandLogger from bot_core.service.data_integrity_service import DataIntegrityService 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): diff --git a/bot/src/modules/technician/command/sync_xp_command.py b/bot/src/modules/technician/command/sync_xp_command.py index a14bd8ac..7dde7596 100644 --- a/bot/src/modules/technician/command/sync_xp_command.py +++ b/bot/src/modules/technician/command/sync_xp_command.py @@ -20,7 +20,7 @@ from bot_data.model.server_config import ServerConfig from bot_data.model.technician_config import TechnicianConfig from bot_data.model.user import User 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): diff --git a/web/src/app/modules/view/server/members/members.component.ts b/web/src/app/modules/view/server/members/members.component.ts index 32855b6e..65b43a9a 100644 --- a/web/src/app/modules/view/server/members/members.component.ts +++ b/web/src/app/modules/view/server/members/members.component.ts @@ -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.false"), value: true } ]; + this.spinner.hideSpinner(); this.loadNextPage(); }); } @@ -123,7 +124,8 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe } loadNextPage() { - this.spinner.showSpinner(); + if (!this.server?.id) return; + this.loading = true; this.data.query(Queries.usersQuery, { 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 => { this.totalRecords = data.userCount; this.members = data.users; - this.spinner.hideSpinner(); this.loading = false; }); } From 36887f1bdfe671159d42a9d071e673abbe78280e Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 15:13:20 +0100 Subject: [PATCH 07/12] Improved feature flag loading in frontend #446 --- bot/src/bot_graphql/graphql/query.gql | 1 + bot/src/bot_graphql/graphql/server.gql | 1 + bot/src/bot_graphql/queries/server_query.py | 14 ++++++++ bot/src/bot_graphql/query.py | 14 ++++++++ web/src/app/models/graphql/queries.model.ts | 11 ++++++ web/src/app/models/graphql/query.model.ts | 6 +++- .../app/services/sidebar/sidebar.service.ts | 36 ++++++------------- 7 files changed, 56 insertions(+), 27 deletions(-) diff --git a/bot/src/bot_graphql/graphql/query.gql b/bot/src/bot_graphql/graphql/query.gql index cf1f4223..655abe4d 100644 --- a/bot/src/bot_graphql/graphql/query.gql +++ b/bot/src/bot_graphql/graphql/query.gql @@ -52,4 +52,5 @@ type Query { discord: Discord hasFeatureFlag(flag: String): FeatureFlag + featureFlags: [FeatureFlag] } \ No newline at end of file diff --git a/bot/src/bot_graphql/graphql/server.gql b/bot/src/bot_graphql/graphql/server.gql index 4624ffca..63d07b3f 100644 --- a/bot/src/bot_graphql/graphql/server.gql +++ b/bot/src/bot_graphql/graphql/server.gql @@ -40,6 +40,7 @@ type Server implements TableWithHistoryQuery { config: ServerConfig hasFeatureFlag(flag: String): FeatureFlag + featureFlags: [FeatureFlag] statistic(date: String): ServerStatistic diff --git a/bot/src/bot_graphql/queries/server_query.py b/bot/src/bot_graphql/queries/server_query.py index 3760db07..eac863b9 100644 --- a/bot/src/bot_graphql/queries/server_query.py +++ b/bot/src/bot_graphql/queries/server_query.py @@ -116,6 +116,10 @@ class ServerQuery(DataQueryWithHistoryABC): "hasFeatureFlag", lambda server, *_, **kwargs: self._resolve_has_feature_flag(server, *_, **kwargs), ) + self.set_field( + "featureFlags", + lambda server, *_, **kwargs: self._resolve_feature_flags(server, *_), + ) self.set_field("statistic", lambda server, *_, **kwargs: ServerStatistics(server, kwargs)) @staticmethod @@ -142,3 +146,13 @@ class ServerQuery(DataQueryWithHistoryABC): "key": kwargs["flag"], "value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(kwargs["flag"])), } + + def _resolve_feature_flags(self, server: Server, *_) -> list[dict]: + settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}") + return [ + { + "key": flag, + "value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)), + } + for flag in [e.value for e in FeatureFlagsEnum] + ] diff --git a/bot/src/bot_graphql/query.py b/bot/src/bot_graphql/query.py index aa3f56b6..71223f91 100644 --- a/bot/src/bot_graphql/query.py +++ b/bot/src/bot_graphql/query.py @@ -131,6 +131,10 @@ class Query(QueryABC): "hasFeatureFlag", lambda *_, **kwargs: self._resolve_has_feature_flag(*_, **kwargs), ) + self.set_field( + "featureFlags", + lambda *_, **kwargs: self._resolve_feature_flags(*_), + ) def _resolve_has_feature_flag(self, *_, **kwargs): settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig) @@ -140,3 +144,13 @@ class Query(QueryABC): "key": kwargs["flag"], "value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(kwargs["flag"])), } + + def _resolve_feature_flags(self, *_) -> list[dict]: + settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig) + return [ + { + "key": flag, + "value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)), + } + for flag in [e.value for e in FeatureFlagsEnum] + ] diff --git a/web/src/app/models/graphql/queries.model.ts b/web/src/app/models/graphql/queries.model.ts index 402d9f09..aacf980d 100644 --- a/web/src/app/models/graphql/queries.model.ts +++ b/web/src/app/models/graphql/queries.model.ts @@ -128,6 +128,17 @@ export class Queries { } `; + static serverFeatureFlags = ` + query HasServerFeatureFlag($filter: ServerFilter) { + servers(filter: $filter) { + featureFlags { + key + value + } + } + } + `; + static gameServerQuery = ` query GameServersList($serverId: ID) { servers(filter: {id: $serverId}) { diff --git a/web/src/app/models/graphql/query.model.ts b/web/src/app/models/graphql/query.model.ts index b7da6553..d909cc28 100644 --- a/web/src/app/models/graphql/query.model.ts +++ b/web/src/app/models/graphql/query.model.ts @@ -1,7 +1,7 @@ import { GameServer, Server } from "../data/server.model"; import { User } from "../data/user.model"; import { AutoRole, AutoRoleRule } from "../data/auto_role.model"; -import { Discord, Guild } from "../data/discord.model"; +import { Discord } from "../data/discord.model"; import { Level } from "../data/level.model"; import { Achievement, AchievementAttribute } from "../data/achievement.model"; import { TechnicianConfig } from "../config/technician-config.model"; @@ -82,6 +82,10 @@ export interface HasServerFeatureFlagQuery { hasFeatureFlag: FeatureFlag; } +export interface FeatureFlagsQuery { + featureFlags: FeatureFlag[]; +} + export interface ShortRoleNameListQuery { shortRoleNameCount: number; shortRoleNames: ShortRoleName[]; diff --git a/web/src/app/services/sidebar/sidebar.service.ts b/web/src/app/services/sidebar/sidebar.service.ts index 14c55841..b5c887f6 100644 --- a/web/src/app/services/sidebar/sidebar.service.ts +++ b/web/src/app/services/sidebar/sidebar.service.ts @@ -1,6 +1,6 @@ import { Injectable } from "@angular/core"; import { MenuItem } from "primeng/api"; -import { BehaviorSubject, forkJoin, Observable } from "rxjs"; +import { BehaviorSubject } from "rxjs"; import { AuthRoles } from "../../models/auth/auth-roles.enum"; import { AuthService } from "../auth/auth.service"; import { TranslateService } from "@ngx-translate/core"; @@ -9,7 +9,7 @@ import { ThemeService } from "../theme/theme.service"; import { Server } from "../../models/data/server.model"; import { UserDTO } from "../../models/auth/auth-user.dto"; import { ServerService } from "../server.service"; -import { HasServerFeatureFlagQuery, PossibleFeatureFlagsQuery, Query } from "../../models/graphql/query.model"; +import { FeatureFlagsQuery, Query } from "../../models/graphql/query.model"; import { Queries } from "../../models/graphql/queries.model"; import { DataService } from "../data/data.service"; import { FeatureFlag } from "../../models/config/feature-flags.model"; @@ -165,31 +165,15 @@ export class SidebarService { if (server) { this.featureFlags = []; - this.data.query("{possibleFeatureFlags}" - ).subscribe(data => { - let observables: Observable[] = []; - data.possibleFeatureFlags.forEach(flag => { - observables.push( - this.data.query(Queries.hasServerFeatureFlag, { - filter: { id: server.id }, - flag: flag - }, - function(data: Query) { - return data.servers[0]; - } - ) - ); - }); - forkJoin(observables).subscribe(data => { - data.forEach(flag => { - if (!flag.hasFeatureFlag.value) { - return; - } - this.featureFlags.push(flag.hasFeatureFlag); - }); - this._setMenu(build); - }); + this.data.query(Queries.serverFeatureFlags, { + filter: { id: server.id } + }, + function(data: Query) { + return data.servers[0]; + }).subscribe(data => { + this.featureFlags = data.featureFlags; + this._setMenu(build); }); } else { this._setMenu(build); From 3d211237866d7c7fd5de85f8e869eecd507e2964 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 15:24:53 +0100 Subject: [PATCH 08/12] Fixed profile design #446 --- .../server/profile/profile.component.html | 19 ++++++++++++++----- web/src/styles.scss | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/web/src/app/modules/view/server/profile/profile.component.html b/web/src/app/modules/view/server/profile/profile.component.html index 7feb406d..ae920b18 100644 --- a/web/src/app/modules/view/server/profile/profile.component.html +++ b/web/src/app/modules/view/server/profile/profile.component.html @@ -233,11 +233,13 @@
-
{{'view.server.profile.joined_voice_channel.time' | translate}}:
+
{{'view.server.profile.joined_voice_channel.time' | translate}}: +
{{join.time}} {{'general.hours' | translate}}
-
+
{{'view.server.profile.joined_voice_channel.channel' | translate}}:
{{join.channelName}}
@@ -260,12 +262,19 @@ (onBeforeToggle)="onBeforeToggle($event.event, $event.collapsed)">
-
-
{{'view.server.profile.joined_game_server.time' | translate}}:
+
+
{{'common.id' | translate}}:
+
{{join.id}}
+
+ +
+
{{'view.server.profile.joined_game_server.time' | translate}}: +
{{join.time}} {{'general.hours' | translate}}
-
+
{{'view.server.profile.joined_game_server.name' | translate}}:
{{join.gameServer}}
diff --git a/web/src/styles.scss b/web/src/styles.scss index 8656a5b0..a35e587f 100644 --- a/web/src/styles.scss +++ b/web/src/styles.scss @@ -189,6 +189,7 @@ header { align-items: center; font-size: 18px; + flex: 1; } .content-data-value { @@ -196,6 +197,7 @@ header { align-items: center; font-size: 18px; + flex: 1; input { width: 100% !important; From 6c5b514b4150767563379e218f526e4ccdd61f5a Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 15:31:29 +0100 Subject: [PATCH 09/12] Set new version --- bot/src/bot/__init__.py | 4 ++-- bot/src/bot/bot.json | 2 +- bot/src/bot/extension/__init__.py | 4 ++-- bot/src/bot_api/__init__.py | 4 ++-- bot/src/bot_api/abc/__init__.py | 4 ++-- bot/src/bot_api/bot-api.json | 2 +- bot/src/bot_api/configuration/__init__.py | 4 ++-- bot/src/bot_api/controller/__init__.py | 4 ++-- bot/src/bot_api/event/__init__.py | 4 ++-- bot/src/bot_api/exception/__init__.py | 4 ++-- bot/src/bot_api/filter/__init__.py | 4 ++-- bot/src/bot_api/filter/discord/__init__.py | 4 ++-- bot/src/bot_api/logging/__init__.py | 4 ++-- bot/src/bot_api/model/__init__.py | 4 ++-- bot/src/bot_api/model/discord/__init__.py | 4 ++-- bot/src/bot_api/route/__init__.py | 4 ++-- bot/src/bot_api/service/__init__.py | 4 ++-- bot/src/bot_api/transformer/__init__.py | 4 ++-- bot/src/bot_core/__init__.py | 4 ++-- bot/src/bot_core/abc/__init__.py | 4 ++-- bot/src/bot_core/bot-core.json | 2 +- bot/src/bot_core/configuration/__init__.py | 4 ++-- bot/src/bot_core/core_extension/__init__.py | 4 ++-- bot/src/bot_core/events/__init__.py | 4 ++-- bot/src/bot_core/exception/__init__.py | 4 ++-- bot/src/bot_core/helper/__init__.py | 4 ++-- bot/src/bot_core/logging/__init__.py | 4 ++-- bot/src/bot_core/pipes/__init__.py | 4 ++-- bot/src/bot_core/service/__init__.py | 4 ++-- bot/src/bot_data/__init__.py | 4 ++-- bot/src/bot_data/abc/__init__.py | 4 ++-- bot/src/bot_data/bot-data.json | 2 +- bot/src/bot_data/model/__init__.py | 4 ++-- bot/src/bot_data/service/__init__.py | 4 ++-- bot/src/bot_graphql/__init__.py | 4 ++-- bot/src/bot_graphql/abc/__init__.py | 4 ++-- bot/src/bot_graphql/bot-graphql.json | 2 +- bot/src/bot_graphql/filter/__init__.py | 4 ++-- bot/src/bot_graphql/model/__init__.py | 4 ++-- bot/src/bot_graphql/mutations/__init__.py | 4 ++-- bot/src/bot_graphql/queries/__init__.py | 4 ++-- bot/src/bot_graphql/queries/discord/__init__.py | 4 ++-- bot/src/modules/achievements/__init__.py | 4 ++-- bot/src/modules/achievements/achievements.json | 2 +- bot/src/modules/achievements/commands/__init__.py | 4 ++-- bot/src/modules/achievements/events/__init__.py | 4 ++-- bot/src/modules/achievements/model/__init__.py | 4 ++-- bot/src/modules/auto_role/__init__.py | 4 ++-- bot/src/modules/auto_role/auto-role.json | 2 +- bot/src/modules/auto_role/command/__init__.py | 4 ++-- bot/src/modules/auto_role/events/__init__.py | 4 ++-- bot/src/modules/auto_role/helper/__init__.py | 4 ++-- bot/src/modules/base/__init__.py | 4 ++-- bot/src/modules/base/base.json | 2 +- bot/src/modules/base/command/__init__.py | 4 ++-- bot/src/modules/base/events/__init__.py | 4 ++-- bot/src/modules/base/forms/__init__.py | 4 ++-- bot/src/modules/base/helper/__init__.py | 4 ++-- bot/src/modules/base/model/__init__.py | 4 ++-- bot/src/modules/base/service/__init__.py | 4 ++-- bot/src/modules/base/tasks/__init__.py | 4 ++-- bot/src/modules/boot_log/__init__.py | 4 ++-- bot/src/modules/boot_log/boot-log.json | 2 +- bot/src/modules/config/__init__.py | 4 ++-- bot/src/modules/config/config.json | 2 +- bot/src/modules/config/events/__init__.py | 4 ++-- bot/src/modules/config/service/__init__.py | 4 ++-- bot/src/modules/database/__init__.py | 4 ++-- bot/src/modules/database/database.json | 2 +- bot/src/modules/level/__init__.py | 4 ++-- bot/src/modules/level/command/__init__.py | 4 ++-- bot/src/modules/level/configuration/__init__.py | 4 ++-- bot/src/modules/level/events/__init__.py | 4 ++-- bot/src/modules/level/level.json | 2 +- bot/src/modules/level/service/__init__.py | 4 ++-- bot/src/modules/short_role_name/__init__.py | 4 ++-- bot/src/modules/short_role_name/events/__init__.py | 4 ++-- bot/src/modules/short_role_name/service/__init__.py | 4 ++-- bot/src/modules/short_role_name/short-role-name.json | 2 +- bot/src/modules/special_offers/__init__.py | 4 ++-- bot/src/modules/special_offers/special-offers.json | 2 +- bot/src/modules/technician/__init__.py | 4 ++-- bot/src/modules/technician/command/__init__.py | 4 ++-- bot/src/modules/technician/technician.json | 2 +- bot/tools/checks/checks.json | 2 +- bot/tools/get_version/get-version.json | 2 +- bot/tools/migration_to_sql/migration-to-sql.json | 2 +- bot/tools/post_build/post-build.json | 2 +- bot/tools/set_version/set-version.json | 2 +- web/package.json | 2 +- web/src/assets/version.json | 2 +- 91 files changed, 160 insertions(+), 160 deletions(-) diff --git a/bot/src/bot/__init__.py b/bot/src/bot/__init__.py index 2c48083c..ede30721 100644 --- a/bot/src/bot/__init__.py +++ b/bot/src/bot/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot/bot.json b/bot/src/bot/bot.json index da730b2c..d71760cd 100644 --- a/bot/src/bot/bot.json +++ b/bot/src/bot/bot.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/bot/extension/__init__.py b/bot/src/bot/extension/__init__.py index 11e2f1a9..e2eb725e 100644 --- a/bot/src/bot/extension/__init__.py +++ b/bot/src/bot/extension/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot.extension" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/__init__.py b/bot/src/bot_api/__init__.py index df9c0c6a..ad8a9c26 100644 --- a/bot/src/bot_api/__init__.py +++ b/bot/src/bot_api/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/abc/__init__.py b/bot/src/bot_api/abc/__init__.py index 875a258f..8df940d6 100644 --- a/bot/src/bot_api/abc/__init__.py +++ b/bot/src/bot_api/abc/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.abc" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/bot-api.json b/bot/src/bot_api/bot-api.json index e78dd5fc..2a3b6254 100644 --- a/bot/src/bot_api/bot-api.json +++ b/bot/src/bot_api/bot-api.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/bot_api/configuration/__init__.py b/bot/src/bot_api/configuration/__init__.py index acc0d2a9..d6362551 100644 --- a/bot/src/bot_api/configuration/__init__.py +++ b/bot/src/bot_api/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.configuration" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/controller/__init__.py b/bot/src/bot_api/controller/__init__.py index 1a9d01c3..ad8aff7d 100644 --- a/bot/src/bot_api/controller/__init__.py +++ b/bot/src/bot_api/controller/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.controller" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/event/__init__.py b/bot/src/bot_api/event/__init__.py index 6df9eef0..933a8fac 100644 --- a/bot/src/bot_api/event/__init__.py +++ b/bot/src/bot_api/event/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.event" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/exception/__init__.py b/bot/src/bot_api/exception/__init__.py index 074f8b7f..1607622c 100644 --- a/bot/src/bot_api/exception/__init__.py +++ b/bot/src/bot_api/exception/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.exception" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/filter/__init__.py b/bot/src/bot_api/filter/__init__.py index 7e1611d0..5da317f5 100644 --- a/bot/src/bot_api/filter/__init__.py +++ b/bot/src/bot_api/filter/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.filter" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/filter/discord/__init__.py b/bot/src/bot_api/filter/discord/__init__.py index 61a90876..17145205 100644 --- a/bot/src/bot_api/filter/discord/__init__.py +++ b/bot/src/bot_api/filter/discord/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.filter.discord" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/logging/__init__.py b/bot/src/bot_api/logging/__init__.py index a6edbdab..a044a459 100644 --- a/bot/src/bot_api/logging/__init__.py +++ b/bot/src/bot_api/logging/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.logging" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/model/__init__.py b/bot/src/bot_api/model/__init__.py index af65112c..f811c99b 100644 --- a/bot/src/bot_api/model/__init__.py +++ b/bot/src/bot_api/model/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.model" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/model/discord/__init__.py b/bot/src/bot_api/model/discord/__init__.py index 239b55f8..17902e62 100644 --- a/bot/src/bot_api/model/discord/__init__.py +++ b/bot/src/bot_api/model/discord/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.model.discord" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/route/__init__.py b/bot/src/bot_api/route/__init__.py index 3869fb82..71418409 100644 --- a/bot/src/bot_api/route/__init__.py +++ b/bot/src/bot_api/route/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.route" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/service/__init__.py b/bot/src/bot_api/service/__init__.py index 3a6d2aed..e90a199d 100644 --- a/bot/src/bot_api/service/__init__.py +++ b/bot/src/bot_api/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_api/transformer/__init__.py b/bot/src/bot_api/transformer/__init__.py index 91d52f24..b3ab743f 100644 --- a/bot/src/bot_api/transformer/__init__.py +++ b/bot/src/bot_api/transformer/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_api.transformer" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/__init__.py b/bot/src/bot_core/__init__.py index 67d1ae08..e1220bf6 100644 --- a/bot/src/bot_core/__init__.py +++ b/bot/src/bot_core/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/abc/__init__.py b/bot/src/bot_core/abc/__init__.py index 51f03ef1..38117eb7 100644 --- a/bot/src/bot_core/abc/__init__.py +++ b/bot/src/bot_core/abc/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.abc" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/bot-core.json b/bot/src/bot_core/bot-core.json index 88bca2f3..b487a8c2 100644 --- a/bot/src/bot_core/bot-core.json +++ b/bot/src/bot_core/bot-core.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/bot_core/configuration/__init__.py b/bot/src/bot_core/configuration/__init__.py index 8f30f1b4..6cecd704 100644 --- a/bot/src/bot_core/configuration/__init__.py +++ b/bot/src/bot_core/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.configuration" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/core_extension/__init__.py b/bot/src/bot_core/core_extension/__init__.py index 4c6536e7..f08f3680 100644 --- a/bot/src/bot_core/core_extension/__init__.py +++ b/bot/src/bot_core/core_extension/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.core_extension" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/events/__init__.py b/bot/src/bot_core/events/__init__.py index a8c10680..b06a8c59 100644 --- a/bot/src/bot_core/events/__init__.py +++ b/bot/src/bot_core/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/exception/__init__.py b/bot/src/bot_core/exception/__init__.py index 90187d93..ea4dc40e 100644 --- a/bot/src/bot_core/exception/__init__.py +++ b/bot/src/bot_core/exception/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.exception" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/helper/__init__.py b/bot/src/bot_core/helper/__init__.py index 2a55905b..7a755460 100644 --- a/bot/src/bot_core/helper/__init__.py +++ b/bot/src/bot_core/helper/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.helper" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/logging/__init__.py b/bot/src/bot_core/logging/__init__.py index e0321bbb..870f1127 100644 --- a/bot/src/bot_core/logging/__init__.py +++ b/bot/src/bot_core/logging/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.logging" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/pipes/__init__.py b/bot/src/bot_core/pipes/__init__.py index b894175a..ac3665d9 100644 --- a/bot/src/bot_core/pipes/__init__.py +++ b/bot/src/bot_core/pipes/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.pipes" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_core/service/__init__.py b/bot/src/bot_core/service/__init__.py index d4e02c25..eb809109 100644 --- a/bot/src/bot_core/service/__init__.py +++ b/bot/src/bot_core/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_core.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_data/__init__.py b/bot/src/bot_data/__init__.py index 352e5ee4..2046b7b3 100644 --- a/bot/src/bot_data/__init__.py +++ b/bot/src/bot_data/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_data" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_data/abc/__init__.py b/bot/src/bot_data/abc/__init__.py index 15cf6b03..07f80535 100644 --- a/bot/src/bot_data/abc/__init__.py +++ b/bot/src/bot_data/abc/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_data.abc" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_data/bot-data.json b/bot/src/bot_data/bot-data.json index e2a92ba9..8b20043c 100644 --- a/bot/src/bot_data/bot-data.json +++ b/bot/src/bot_data/bot-data.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/bot_data/model/__init__.py b/bot/src/bot_data/model/__init__.py index 063b19b8..deffc730 100644 --- a/bot/src/bot_data/model/__init__.py +++ b/bot/src/bot_data/model/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_data.model" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_data/service/__init__.py b/bot/src/bot_data/service/__init__.py index ac893727..5ff7280a 100644 --- a/bot/src/bot_data/service/__init__.py +++ b/bot/src/bot_data/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_data.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/__init__.py b/bot/src/bot_graphql/__init__.py index 6ea1d53d..0f5e9fb0 100644 --- a/bot/src/bot_graphql/__init__.py +++ b/bot/src/bot_graphql/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/abc/__init__.py b/bot/src/bot_graphql/abc/__init__.py index a14102bf..3d11d11a 100644 --- a/bot/src/bot_graphql/abc/__init__.py +++ b/bot/src/bot_graphql/abc/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.abc" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/bot-graphql.json b/bot/src/bot_graphql/bot-graphql.json index 862bf950..d18cad0b 100644 --- a/bot/src/bot_graphql/bot-graphql.json +++ b/bot/src/bot_graphql/bot-graphql.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/bot_graphql/filter/__init__.py b/bot/src/bot_graphql/filter/__init__.py index c05ec36e..a8e2ba20 100644 --- a/bot/src/bot_graphql/filter/__init__.py +++ b/bot/src/bot_graphql/filter/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.filter" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/model/__init__.py b/bot/src/bot_graphql/model/__init__.py index acad138f..ba50ca77 100644 --- a/bot/src/bot_graphql/model/__init__.py +++ b/bot/src/bot_graphql/model/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.model" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/mutations/__init__.py b/bot/src/bot_graphql/mutations/__init__.py index 0c794ed7..0510b006 100644 --- a/bot/src/bot_graphql/mutations/__init__.py +++ b/bot/src/bot_graphql/mutations/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.mutations" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/queries/__init__.py b/bot/src/bot_graphql/queries/__init__.py index b2d4b8c9..81fafcdc 100644 --- a/bot/src/bot_graphql/queries/__init__.py +++ b/bot/src/bot_graphql/queries/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.queries" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/bot_graphql/queries/discord/__init__.py b/bot/src/bot_graphql/queries/discord/__init__.py index b7b4de75..ae6338a4 100644 --- a/bot/src/bot_graphql/queries/discord/__init__.py +++ b/bot/src/bot_graphql/queries/discord/__init__.py @@ -15,7 +15,7 @@ __title__ = "bot_graphql.queries.discord" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/achievements/__init__.py b/bot/src/modules/achievements/__init__.py index 32980d3a..5a515655 100644 --- a/bot/src/modules/achievements/__init__.py +++ b/bot/src/modules/achievements/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.achievements" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/achievements/achievements.json b/bot/src/modules/achievements/achievements.json index 911cf740..a7d12f1c 100644 --- a/bot/src/modules/achievements/achievements.json +++ b/bot/src/modules/achievements/achievements.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/modules/achievements/commands/__init__.py b/bot/src/modules/achievements/commands/__init__.py index 0b5a21c5..795adef3 100644 --- a/bot/src/modules/achievements/commands/__init__.py +++ b/bot/src/modules/achievements/commands/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.achievements.commands" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/achievements/events/__init__.py b/bot/src/modules/achievements/events/__init__.py index bcf3de06..6ea099e1 100644 --- a/bot/src/modules/achievements/events/__init__.py +++ b/bot/src/modules/achievements/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.achievements.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/achievements/model/__init__.py b/bot/src/modules/achievements/model/__init__.py index 32469894..d2df4eff 100644 --- a/bot/src/modules/achievements/model/__init__.py +++ b/bot/src/modules/achievements/model/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.achievements.model" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/auto_role/__init__.py b/bot/src/modules/auto_role/__init__.py index 5a9f8582..ca2e19ee 100644 --- a/bot/src/modules/auto_role/__init__.py +++ b/bot/src/modules/auto_role/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.auto_role" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/auto_role/auto-role.json b/bot/src/modules/auto_role/auto-role.json index b6a4ebf1..4850d169 100644 --- a/bot/src/modules/auto_role/auto-role.json +++ b/bot/src/modules/auto_role/auto-role.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/auto_role/command/__init__.py b/bot/src/modules/auto_role/command/__init__.py index 760937ed..af18fdfa 100644 --- a/bot/src/modules/auto_role/command/__init__.py +++ b/bot/src/modules/auto_role/command/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.auto_role.command" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/auto_role/events/__init__.py b/bot/src/modules/auto_role/events/__init__.py index b32c4f28..20df0dce 100644 --- a/bot/src/modules/auto_role/events/__init__.py +++ b/bot/src/modules/auto_role/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.auto_role.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/auto_role/helper/__init__.py b/bot/src/modules/auto_role/helper/__init__.py index 54c8fea8..f922ea6b 100644 --- a/bot/src/modules/auto_role/helper/__init__.py +++ b/bot/src/modules/auto_role/helper/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.auto_role.helper" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/__init__.py b/bot/src/modules/base/__init__.py index 9b5d1e5b..9a3b8f37 100644 --- a/bot/src/modules/base/__init__.py +++ b/bot/src/modules/base/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/base.json b/bot/src/modules/base/base.json index d0f94e12..4f7f0d66 100644 --- a/bot/src/modules/base/base.json +++ b/bot/src/modules/base/base.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/base/command/__init__.py b/bot/src/modules/base/command/__init__.py index 9e8eaf78..95188d93 100644 --- a/bot/src/modules/base/command/__init__.py +++ b/bot/src/modules/base/command/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.command" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/events/__init__.py b/bot/src/modules/base/events/__init__.py index c04095a7..e36fb3b7 100644 --- a/bot/src/modules/base/events/__init__.py +++ b/bot/src/modules/base/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/forms/__init__.py b/bot/src/modules/base/forms/__init__.py index 375cae8d..4c32358c 100644 --- a/bot/src/modules/base/forms/__init__.py +++ b/bot/src/modules/base/forms/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.forms" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/helper/__init__.py b/bot/src/modules/base/helper/__init__.py index 8faf1b90..df7174fe 100644 --- a/bot/src/modules/base/helper/__init__.py +++ b/bot/src/modules/base/helper/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.helper" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/model/__init__.py b/bot/src/modules/base/model/__init__.py index cd5ec210..751bd5cb 100644 --- a/bot/src/modules/base/model/__init__.py +++ b/bot/src/modules/base/model/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.model" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/service/__init__.py b/bot/src/modules/base/service/__init__.py index e6a05ca8..65c151ec 100644 --- a/bot/src/modules/base/service/__init__.py +++ b/bot/src/modules/base/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/base/tasks/__init__.py b/bot/src/modules/base/tasks/__init__.py index 41959bff..5a6527b3 100644 --- a/bot/src/modules/base/tasks/__init__.py +++ b/bot/src/modules/base/tasks/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.base.tasks" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/boot_log/__init__.py b/bot/src/modules/boot_log/__init__.py index 62933abb..f44630ce 100644 --- a/bot/src/modules/boot_log/__init__.py +++ b/bot/src/modules/boot_log/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.boot_log" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/boot_log/boot-log.json b/bot/src/modules/boot_log/boot-log.json index 840b75b5..36c149cd 100644 --- a/bot/src/modules/boot_log/boot-log.json +++ b/bot/src/modules/boot_log/boot-log.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/config/__init__.py b/bot/src/modules/config/__init__.py index 43967e28..e98a633a 100644 --- a/bot/src/modules/config/__init__.py +++ b/bot/src/modules/config/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.config" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/config/config.json b/bot/src/modules/config/config.json index 6a80a8c4..511f21f9 100644 --- a/bot/src/modules/config/config.json +++ b/bot/src/modules/config/config.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/config/events/__init__.py b/bot/src/modules/config/events/__init__.py index 8200e59f..ee18320d 100644 --- a/bot/src/modules/config/events/__init__.py +++ b/bot/src/modules/config/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.config.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/config/service/__init__.py b/bot/src/modules/config/service/__init__.py index ca507f9b..57eace87 100644 --- a/bot/src/modules/config/service/__init__.py +++ b/bot/src/modules/config/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.config.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/database/__init__.py b/bot/src/modules/database/__init__.py index 566c8544..4c869766 100644 --- a/bot/src/modules/database/__init__.py +++ b/bot/src/modules/database/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.database" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/database/database.json b/bot/src/modules/database/database.json index f9305a00..79ef8549 100644 --- a/bot/src/modules/database/database.json +++ b/bot/src/modules/database/database.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/src/modules/level/__init__.py b/bot/src/modules/level/__init__.py index 6d26c52d..6c40cc3b 100644 --- a/bot/src/modules/level/__init__.py +++ b/bot/src/modules/level/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.level" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/level/command/__init__.py b/bot/src/modules/level/command/__init__.py index 57257060..4dae1895 100644 --- a/bot/src/modules/level/command/__init__.py +++ b/bot/src/modules/level/command/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.level.command" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/level/configuration/__init__.py b/bot/src/modules/level/configuration/__init__.py index 3422722d..62d131d9 100644 --- a/bot/src/modules/level/configuration/__init__.py +++ b/bot/src/modules/level/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.level.configuration" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/level/events/__init__.py b/bot/src/modules/level/events/__init__.py index b817fc78..494be94c 100644 --- a/bot/src/modules/level/events/__init__.py +++ b/bot/src/modules/level/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.level.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/level/level.json b/bot/src/modules/level/level.json index bf6f5294..83abafe7 100644 --- a/bot/src/modules/level/level.json +++ b/bot/src/modules/level/level.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/level/service/__init__.py b/bot/src/modules/level/service/__init__.py index b25809dd..02f8210b 100644 --- a/bot/src/modules/level/service/__init__.py +++ b/bot/src/modules/level/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.level.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/short_role_name/__init__.py b/bot/src/modules/short_role_name/__init__.py index effc8194..9d1ad394 100644 --- a/bot/src/modules/short_role_name/__init__.py +++ b/bot/src/modules/short_role_name/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.short_role_name" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/short_role_name/events/__init__.py b/bot/src/modules/short_role_name/events/__init__.py index 3ba5c637..e767db05 100644 --- a/bot/src/modules/short_role_name/events/__init__.py +++ b/bot/src/modules/short_role_name/events/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.short_role_name.events" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/short_role_name/service/__init__.py b/bot/src/modules/short_role_name/service/__init__.py index bbf1c082..10277e21 100644 --- a/bot/src/modules/short_role_name/service/__init__.py +++ b/bot/src/modules/short_role_name/service/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.short_role_name.service" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/short_role_name/short-role-name.json b/bot/src/modules/short_role_name/short-role-name.json index 23b81e41..42ffeb41 100644 --- a/bot/src/modules/short_role_name/short-role-name.json +++ b/bot/src/modules/short_role_name/short-role-name.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/special_offers/__init__.py b/bot/src/modules/special_offers/__init__.py index f85a6ae2..c4bb30aa 100644 --- a/bot/src/modules/special_offers/__init__.py +++ b/bot/src/modules/special_offers/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.special_offers" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/special_offers/special-offers.json b/bot/src/modules/special_offers/special-offers.json index cd6b44b1..ec7d544d 100644 --- a/bot/src/modules/special_offers/special-offers.json +++ b/bot/src/modules/special_offers/special-offers.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/src/modules/technician/__init__.py b/bot/src/modules/technician/__init__.py index 1ce4e3a9..af28e6c4 100644 --- a/bot/src/modules/technician/__init__.py +++ b/bot/src/modules/technician/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.technician" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/technician/command/__init__.py b/bot/src/modules/technician/command/__init__.py index 52f7fb4f..b66a249c 100644 --- a/bot/src/modules/technician/command/__init__.py +++ b/bot/src/modules/technician/command/__init__.py @@ -15,7 +15,7 @@ __title__ = "modules.technician.command" __author__ = "Sven Heidemann" __license__ = "MIT" __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "1.2.2" +__version__ = "1.2.3" from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="1", minor="2", micro="2") +version_info = VersionInfo(major="1", minor="2", micro="3") diff --git a/bot/src/modules/technician/technician.json b/bot/src/modules/technician/technician.json index d3607bec..dfdf7f18 100644 --- a/bot/src/modules/technician/technician.json +++ b/bot/src/modules/technician/technician.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/tools/checks/checks.json b/bot/tools/checks/checks.json index c13f9018..50d69325 100644 --- a/bot/tools/checks/checks.json +++ b/bot/tools/checks/checks.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/tools/get_version/get-version.json b/bot/tools/get_version/get-version.json index 85a0251c..538a045e 100644 --- a/bot/tools/get_version/get-version.json +++ b/bot/tools/get_version/get-version.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/tools/migration_to_sql/migration-to-sql.json b/bot/tools/migration_to_sql/migration-to-sql.json index 6be85895..b3de0fc5 100644 --- a/bot/tools/migration_to_sql/migration-to-sql.json +++ b/bot/tools/migration_to_sql/migration-to-sql.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "", "AuthorEmail": "", diff --git a/bot/tools/post_build/post-build.json b/bot/tools/post_build/post-build.json index 6ca832ce..0c5e5cf4 100644 --- a/bot/tools/post_build/post-build.json +++ b/bot/tools/post_build/post-build.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/bot/tools/set_version/set-version.json b/bot/tools/set_version/set-version.json index 4919b58a..9f196731 100644 --- a/bot/tools/set_version/set-version.json +++ b/bot/tools/set_version/set-version.json @@ -4,7 +4,7 @@ "Version": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/web/package.json b/web/package.json index 3255abc5..0b1829b7 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.2.2", + "version": "1.2.3", "scripts": { "ng": "ng", "update-version": "ts-node update-version.ts", diff --git a/web/src/assets/version.json b/web/src/assets/version.json index 0e2d8ac7..5ff7884e 100644 --- a/web/src/assets/version.json +++ b/web/src/assets/version.json @@ -2,6 +2,6 @@ "WebVersion": { "Major": "1", "Minor": "2", - "Micro": "2" + "Micro": "3" } } From 0a47393510ff0339684ab1c3e195928609d59703 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 16:04:56 +0100 Subject: [PATCH 10/12] Improved ontime loading & added game ontime #446 --- bot/src/bot_data/model/user.py | 29 +++++++++-- bot/src/bot_graphql/graphql/user.gql | 1 + .../queries/server_statistic_query.py | 2 +- bot/src/bot_graphql/queries/user_query.py | 52 ++++--------------- web/src/app/models/data/user.model.ts | 1 + web/src/app/models/graphql/queries.model.ts | 2 + .../server/members/members.component.html | 40 +++++++++++--- .../view/server/members/members.component.ts | 2 +- .../server/profile/profile.component.html | 11 +++- web/src/assets/i18n/de.json | 2 +- web/src/assets/i18n/en.json | 2 +- 11 files changed, 86 insertions(+), 58 deletions(-) diff --git a/bot/src/bot_data/model/user.py b/bot/src/bot_data/model/user.py index 5d8ac8c2..dee1e355 100644 --- a/bot/src/bot_data/model/user.py +++ b/bot/src/bot_data/model/user.py @@ -2,6 +2,7 @@ from datetime import datetime, date from typing import Optional from cpl_core.database import TableABC +from cpl_core.database.context import DatabaseContextABC from cpl_core.dependency_injection import ServiceProviderABC from cpl_discord.service import DiscordBotServiceABC from cpl_query.extension import List @@ -92,10 +93,32 @@ class User(TableABC): @property @ServiceProviderABC.inject def ontime(self, services: ServiceProviderABC) -> float: - from bot_core.abc.client_utils_abc import ClientUtilsABC + db: DatabaseContextABC = services.get_service(DatabaseContextABC) + result = db.select( + f""" + SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedVoiceChannel.LeavedOn, UserJoinedVoiceChannel.JoinedOn)) / 3600),2) + FROM UserJoinedVoiceChannel + WHERE UserId = {self._user_id}; + """ + )[0][0] + if result is None: + return 0 + return float(result) - client_utils: ClientUtilsABC = services.get_service(ClientUtilsABC) - return client_utils.get_ontime_for_user(self) + @property + @ServiceProviderABC.inject + def game_ontime(self, services: ServiceProviderABC) -> float: + db: DatabaseContextABC = services.get_service(DatabaseContextABC) + result = db.select( + f""" + SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn)) / 3600),2) + FROM UserJoinedGameServer + WHERE UserId = {self._user_id}; + """ + )[0][0] + if result is None: + return 0 + return float(result) @property @ServiceProviderABC.inject diff --git a/bot/src/bot_graphql/graphql/user.gql b/bot/src/bot_graphql/graphql/user.gql index f05ee950..f7d2b990 100644 --- a/bot/src/bot_graphql/graphql/user.gql +++ b/bot/src/bot_graphql/graphql/user.gql @@ -7,6 +7,7 @@ type User implements TableWithHistoryQuery { reactionCount: Int birthday: String ontime: Float + gameOntime: Float level: Level joinedServers(filter: UserJoinedServerFilter, page: Page, sort: Sort): [UserJoinedServer] diff --git a/bot/src/bot_graphql/queries/server_statistic_query.py b/bot/src/bot_graphql/queries/server_statistic_query.py index 661d8142..e511dfdb 100644 --- a/bot/src/bot_graphql/queries/server_statistic_query.py +++ b/bot/src/bot_graphql/queries/server_statistic_query.py @@ -132,7 +132,7 @@ class ServerStatisticQuery(QueryABC): def _resolve_game_server_ontime(self, server, *_): query = f""" - SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn)) / 3600),{server.server.id}) FROM UserJoinedGameServer + SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn)) / 3600),2) FROM UserJoinedGameServer INNER JOIN Users ON UserJoinedGameServer.UserId = Users.UserId WHERE Users.ServerId = {server.server.id} AND UserJoinedGameServer.CreatedAt >= "{self._get_date(**server.kwargs)}"; diff --git a/bot/src/bot_graphql/queries/user_query.py b/bot/src/bot_graphql/queries/user_query.py index d503448c..219a1526 100644 --- a/bot/src/bot_graphql/queries/user_query.py +++ b/bot/src/bot_graphql/queries/user_query.py @@ -2,6 +2,7 @@ from cpl_core.database.context import DatabaseContextABC from cpl_discord.service import DiscordBotServiceABC from bot_core.abc.client_utils_abc import ClientUtilsABC +from bot_core.abc.permission_service_abc import PermissionServiceABC from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC from bot_data.abc.user_joined_game_server_repository_abc import ( UserJoinedGameServerRepositoryABC, @@ -11,7 +12,6 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import ( UserJoinedVoiceChannelRepositoryABC, ) from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC -from bot_data.model.user import User from bot_data.model.user_history import UserHistory from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC from bot_graphql.filter.achievement_filter import AchievementFilter @@ -22,7 +22,6 @@ from bot_graphql.filter.user_joined_voice_channel_filter import ( ) from bot_graphql.filter.user_warning_filter import UserWarningFilter from modules.level.service.level_service import LevelService -from bot_core.abc.permission_service_abc import PermissionServiceABC class UserQuery(DataQueryWithHistoryABC): @@ -50,15 +49,16 @@ class UserQuery(DataQueryWithHistoryABC): self._permissions = permissions self._achievements = achievements - self.set_field("id", self.resolve_id) - self.set_field("discordId", self.resolve_discord_id) - self.set_field("name", self.resolve_name) - self.set_field("xp", self.resolve_xp) + self.set_field("id", lambda user, *_: user.id) + self.set_field("discordId", lambda user, *_: user.discord_id) + self.set_field("name", lambda user, *_: user.name) + self.set_field("xp", lambda user, *_: user.xp) self.set_field("messageCount", lambda x, *_: x.message_count) self.set_field("reactionCount", lambda x, *_: x.reaction_count) self.set_field("birthday", lambda x, *_: None if x.birthday is None else x.birthday.strftime("%d.%m.%Y")) - self.set_field("ontime", self.resolve_ontime) - self.set_field("level", self.resolve_level) + self.set_field("ontime", lambda user, *_: user.ontime) + self.set_field("gameOntime", lambda user, *_: user.game_ontime) + self.set_field("level", lambda user, *_: user.level) self.add_collection( "joinedServer", lambda user, *_: self._ujs.get_user_joined_servers_by_user_id(user.id), @@ -85,37 +85,5 @@ class UserQuery(DataQueryWithHistoryABC): UserWarningFilter, ) - self.set_field("server", self.resolve_server) - self.set_field("leftServer", self.resolve_left_server) - - @staticmethod - def resolve_id(user: User, *_): - return user.id - - @staticmethod - def resolve_discord_id(user: User, *_): - return user.discord_id - - @staticmethod - def resolve_name(user: User, *_): - return user.name - - @staticmethod - def resolve_xp(user: User, *_): - return user.xp - - @staticmethod - def resolve_ontime(user: User, *_): - return user.ontime - - @staticmethod - def resolve_level(user: User, *_): - return user.level - - @staticmethod - def resolve_server(user: User, *_): - return user.server - - @staticmethod - def resolve_left_server(user: User, *_): - return user.left_server + self.set_field("server", lambda user, *_: user.server) + self.set_field("leftServer", lambda user, *_: user.left_server) diff --git a/web/src/app/models/data/user.model.ts b/web/src/app/models/data/user.model.ts index 5dcd05aa..37c00950 100644 --- a/web/src/app/models/data/user.model.ts +++ b/web/src/app/models/data/user.model.ts @@ -16,6 +16,7 @@ export interface User extends DataWithHistory { reactionCount?: number; birthday?: string; ontime?: number; + gameOntime?: number; level?: Level; server?: Server; leftServer?: boolean; diff --git a/web/src/app/models/graphql/queries.model.ts b/web/src/app/models/graphql/queries.model.ts index aacf980d..bf803943 100644 --- a/web/src/app/models/graphql/queries.model.ts +++ b/web/src/app/models/graphql/queries.model.ts @@ -361,6 +361,7 @@ export class Queries { name xp ontime + gameOntime level { id name @@ -386,6 +387,7 @@ export class Queries { reactionCount birthday ontime + gameOntime level { id name diff --git a/web/src/app/modules/view/server/members/members.component.html b/web/src/app/modules/view/server/members/members.component.html index a5b465b2..b633ae05 100644 --- a/web/src/app/modules/view/server/members/members.component.html +++ b/web/src/app/modules/view/server/members/members.component.html @@ -3,7 +3,8 @@
- @@ -17,7 +18,8 @@ {{'view.server.members.members' | translate}}
- +
@@ -65,6 +67,13 @@
+ +
+
{{'common.game_ontime' | translate}}
+ +
+ +
{{'common.left_server' | translate}}
@@ -106,7 +115,8 @@
- +
@@ -116,14 +126,17 @@ +
- +
- +
@@ -189,6 +202,17 @@ + + {{'common.game_ontime' | translate}}: + + + {{member.gameOntime}} + + + {{member.gameOntime}} + + + {{'common.left_server' | translate}}: @@ -204,7 +228,8 @@ {{'common.level' | translate}}: - + {{member.level.name}} @@ -235,7 +260,8 @@
- +
+
+
+
{{'common.game_ontime' | translate}}:
+
{{user.gameOntime}}
+
+
+
{{'view.server.profile.level' | translate}}:
@@ -266,7 +273,7 @@
{{'common.id' | translate}}:
{{join.id}}
- +
{{'view.server.profile.joined_game_server.time' | translate}}: diff --git a/web/src/assets/i18n/de.json b/web/src/assets/i18n/de.json index 00c2c1ed..9c5fec08 100644 --- a/web/src/assets/i18n/de.json +++ b/web/src/assets/i18n/de.json @@ -154,6 +154,7 @@ "uploaded": "Daten wurden erfolgreich importiert." }, "first_name": "Vorname", + "game_ontime": "Spiel Ontime", "hidden_columns": "Ausgeblendete Spalten", "history": { "attribute": "Attribut", @@ -542,7 +543,6 @@ "message_count": "Anzahl Nachrichten", "minecraft_id": "Minecraft Id", "name": "Name", - "ontime": "Ontime", "permission_denied": "Zugriff verweigert!", "permission_denied_d": "Du musst Moderator sein, um andere Profile sehen zu können!", "reaction_count": "Anzahl Reaktionen", diff --git a/web/src/assets/i18n/en.json b/web/src/assets/i18n/en.json index 14453e12..dbfd4101 100644 --- a/web/src/assets/i18n/en.json +++ b/web/src/assets/i18n/en.json @@ -154,6 +154,7 @@ "uploaded": "Data was imported successfully." }, "first_name": "First name", + "game_ontime": "Game ontime", "hidden_columns": "Hidden columns", "history": { "attribute": "Attribute", @@ -542,7 +543,6 @@ "message_count": "Message count", "minecraft_id": "Minecraft Id", "name": "Name", - "ontime": "Ontime", "permission_denied": "Access denied!", "permission_denied_d": "You have to be moderator to see other profiles!", "reaction_count": "Reaction count", From 9976c593029bc9bda3b9ae21fe061b04c15e249d Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 3 Dec 2023 16:42:33 +0100 Subject: [PATCH 11/12] Fixed permission service --- bot/src/bot_core/service/permission_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/src/bot_core/service/permission_service.py b/bot/src/bot_core/service/permission_service.py index 96dc92a5..de76e15a 100644 --- a/bot/src/bot_core/service/permission_service.py +++ b/bot/src/bot_core/service/permission_service.py @@ -74,7 +74,7 @@ class PermissionService(PermissionServiceABC): 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 + member.guild.get_role(x.role_id) 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 From e6667c78c82f7a330ef8108732c6fd15e4da2762 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 4 Dec 2023 22:48:05 +0100 Subject: [PATCH 12/12] Added user activity score #451 --- bot/src/bot_data/abc/user_repository_abc.py | 4 + bot/src/bot_data/model/user.py | 10 ++ .../service/user_repository_service.py | 104 +++++++++++++++++- bot/src/bot_graphql/abc/query_abc.py | 8 +- bot/src/bot_graphql/graphql/user.gql | 1 + bot/src/bot_graphql/queries/server_query.py | 2 +- .../queries/server_statistic_query.py | 9 +- bot/src/bot_graphql/queries/user_query.py | 1 + web/src/app/models/data/user.model.ts | 1 + web/src/app/models/graphql/queries.model.ts | 2 + .../server/members/members.component.html | 19 ++++ .../view/server/members/members.component.ts | 2 +- .../server/profile/profile.component.html | 7 ++ web/src/assets/i18n/de.json | 1 + web/src/assets/i18n/en.json | 1 + 15 files changed, 162 insertions(+), 10 deletions(-) diff --git a/bot/src/bot_data/abc/user_repository_abc.py b/bot/src/bot_data/abc/user_repository_abc.py index 0e3ced21..b5c7051d 100644 --- a/bot/src/bot_data/abc/user_repository_abc.py +++ b/bot/src/bot_data/abc/user_repository_abc.py @@ -31,6 +31,10 @@ class UserRepositoryABC(ABC): def get_users_by_server_id(self, server_id: int) -> List[User]: pass + @abstractmethod + def get_users_with_activity_by_server_id(self, server_id: int) -> List[User]: + pass + @abstractmethod def get_user_by_discord_id_and_server_id(self, discord_id: int, server_id: int) -> User: pass diff --git a/bot/src/bot_data/model/user.py b/bot/src/bot_data/model/user.py index dee1e355..bfb65ae6 100644 --- a/bot/src/bot_data/model/user.py +++ b/bot/src/bot_data/model/user.py @@ -32,6 +32,8 @@ class User(TableABC): self._birthday = birthday self._server = server + self._activity = 0 + TableABC.__init__(self) self._created_at = created_at if created_at is not None else self._created_at self._modified_at = modified_at if modified_at is not None else self._modified_at @@ -120,6 +122,14 @@ class User(TableABC): return 0 return float(result) + @property + def activity(self) -> int: + return self._activity + + @activity.setter + def activity(self, value: int): + self._activity = value + @property @ServiceProviderABC.inject def level(self, services: ServiceProviderABC) -> Level: diff --git a/bot/src/bot_data/service/user_repository_service.py b/bot/src/bot_data/service/user_repository_service.py index 90e501c7..6a5a00bc 100644 --- a/bot/src/bot_data/service/user_repository_service.py +++ b/bot/src/bot_data/service/user_repository_service.py @@ -1,6 +1,8 @@ +import datetime from typing import Optional from cpl_core.database.context import DatabaseContextABC +from cpl_core.type import T, R from cpl_query.extension import List from bot_core.logging.database_logger import DatabaseLogger @@ -38,7 +40,9 @@ class UserRepositoryService(UserRepositoryABC): def get_users(self) -> List[User]: self._logger.trace(__name__, f"Send SQL command: {User.get_select_all_string()}") - return List(User, [self._from_result(user) for user in self._context.select(User.get_select_all_string())]) + return List( + User, [self._from_result(user) for user in self._context.select(User.get_select_all_string())] + ).for_each(lambda x: self._set_user_activity(x)) def get_user_by_id(self, id: int) -> User: self._logger.trace(__name__, f"Send SQL command: {User.get_select_by_id_string(id)}") @@ -77,6 +81,16 @@ class UserRepositoryService(UserRepositoryABC): [self._from_result(user) for user in self._context.select(User.get_select_by_server_id_string(server_id))], ) + def get_users_with_activity_by_server_id(self, server_id: int) -> List[User]: + self._logger.trace( + __name__, + f"Send SQL command: {User.get_select_by_server_id_string(server_id)}", + ) + return List( + User, + [self._from_result(user) for user in self._context.select(User.get_select_by_server_id_string(server_id))], + ).for_each(lambda x: self._set_user_activity(x)) + def get_user_by_discord_id_and_server_id(self, discord_id: int, server_id: int) -> User: self._logger.trace( __name__, @@ -109,3 +123,91 @@ class UserRepositoryService(UserRepositoryABC): def delete_user(self, user: User): self._logger.trace(__name__, f"Send SQL command: {user.delete_string}") self._context.cursor.execute(user.delete_string) + + def _set_user_activity(self, user): + days = (datetime.date.today() - (datetime.date.today() - datetime.timedelta(days=7))).days + query = f""" + SELECT ( + ( + SELECT Count(UserGotAchievements.CreatedAt) + FROM UserGotAchievements + INNER JOIN Achievements ON UserGotAchievements.AchievementId = Achievements.Id + INNER JOIN Users ON UserGotAchievements.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserGotAchievements.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + + ( + SELECT SUM( + UserMessageCountPerHour.XPCount / ( + SELECT XpPerMessage + FROM CFG_Server + WHERE ServerId = {user.server.id} + ) + ) + FROM UserMessageCountPerHour + INNER JOIN Users ON UserMessageCountPerHour.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserMessageCountPerHour.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + + ( + SELECT Count(UserJoinedVoiceChannel.CreatedAt) + FROM UserJoinedVoiceChannel + INNER JOIN Users ON UserJoinedVoiceChannel.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserJoinedVoiceChannel.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + + ( + SELECT IFNULL(ROUND(SUM(TIME_TO_SEC( + TIMEDIFF(UserJoinedVoiceChannel.LeavedOn, UserJoinedVoiceChannel.JoinedOn) + ) / 3600), 2), 0) + FROM UserJoinedVoiceChannel + INNER JOIN Users ON UserJoinedVoiceChannel.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserJoinedVoiceChannel.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + + ( + SELECT Count(UserJoinedGameServer.CreatedAt) + FROM UserJoinedGameServer + INNER JOIN Users ON UserJoinedGameServer.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserJoinedGameServer.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + + ( + SELECT IFNULL(ROUND(SUM(TIME_TO_SEC( + TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn) + ) / 3600), 2), 0) + FROM UserJoinedGameServer + INNER JOIN Users ON UserJoinedGameServer.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserJoinedGameServer.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) - + ( + SELECT COUNT(UserWarnings.CreatedAt) + FROM UserWarnings + INNER JOIN Users ON UserWarnings.UserId = Users.UserId + WHERE Users.ServerId = {user.server.id} + AND Users.UserId = {user.id} + AND UserWarnings.CreatedAt >= "{datetime.date.today() - datetime.timedelta(days=7)}" + ) + ) / {days} * 1000 as count; + """ + user.activity = self._cast_query_result(query, int) + + def _cast_query_result(self, query: str, r_type: T) -> Optional[R]: + results = self._context.select(query) + if len(results) == 0 or len(results[0]) == 0: + return None + result = results[0][0] + default = None + if r_type is int or r_type is float: + default = 0 + elif r_type is str: + default = "" + + return r_type(result) if result is not None else default diff --git a/bot/src/bot_graphql/abc/query_abc.py b/bot/src/bot_graphql/abc/query_abc.py index d66fd516..cfd18ac6 100644 --- a/bot/src/bot_graphql/abc/query_abc.py +++ b/bot/src/bot_graphql/abc/query_abc.py @@ -64,11 +64,9 @@ class QueryABC(ObjectType): if user == "system" or user.auth_role == AuthRoleEnum.admin: return self._resolve_collection(collection, *args, **kwargs) - for x in collection.to_list(): - if not self._can_user_see_element(user, x): - collection.remove(x) - - return self._resolve_collection(collection, *args, **kwargs) + return self._resolve_collection( + collection.where(lambda x: self._can_user_see_element(user, x)), *args, **kwargs + ) self.set_field(f"{name}s", wrapper) self.set_field(f"{name}Count", lambda *args: wrapper(*args).count()) diff --git a/bot/src/bot_graphql/graphql/user.gql b/bot/src/bot_graphql/graphql/user.gql index f7d2b990..e4ed9ea1 100644 --- a/bot/src/bot_graphql/graphql/user.gql +++ b/bot/src/bot_graphql/graphql/user.gql @@ -9,6 +9,7 @@ type User implements TableWithHistoryQuery { ontime: Float gameOntime: Float level: Level + activityScore: Int joinedServers(filter: UserJoinedServerFilter, page: Page, sort: Sort): [UserJoinedServer] joinedServerCount: Int diff --git a/bot/src/bot_graphql/queries/server_query.py b/bot/src/bot_graphql/queries/server_query.py index eac863b9..9b8b9cbf 100644 --- a/bot/src/bot_graphql/queries/server_query.py +++ b/bot/src/bot_graphql/queries/server_query.py @@ -86,7 +86,7 @@ class ServerQuery(DataQueryWithHistoryABC): ) self.add_collection( "user", - lambda server, *_: self._users.get_users_by_server_id(server.id), + lambda server, *_: self._users.get_users_with_activity_by_server_id(server.id), UserFilter, ) self.add_collection( diff --git a/bot/src/bot_graphql/queries/server_statistic_query.py b/bot/src/bot_graphql/queries/server_statistic_query.py index e511dfdb..1dd82b41 100644 --- a/bot/src/bot_graphql/queries/server_statistic_query.py +++ b/bot/src/bot_graphql/queries/server_statistic_query.py @@ -114,7 +114,9 @@ class ServerStatisticQuery(QueryABC): def _resolve_voice_channel_ontime(self, server, *_): query = f""" - SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedVoiceChannel.LeavedOn, UserJoinedVoiceChannel.JoinedOn)) / 3600),{server.server.id}) FROM UserJoinedVoiceChannel + SELECT IFNULL(ROUND(SUM( + TIME_TO_SEC(TIMEDIFF(UserJoinedVoiceChannel.LeavedOn, UserJoinedVoiceChannel.JoinedOn)) / 3600 + ), 2), 0) FROM UserJoinedVoiceChannel INNER JOIN Users ON UserJoinedVoiceChannel.UserId = Users.UserId WHERE Users.ServerId = {server.server.id} AND UserJoinedVoiceChannel.CreatedAt >= "{self._get_date(**server.kwargs)}"; @@ -132,7 +134,10 @@ class ServerStatisticQuery(QueryABC): def _resolve_game_server_ontime(self, server, *_): query = f""" - SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn)) / 3600),2) FROM UserJoinedGameServer + SELECT IFNULL(ROUND(SUM( + TIME_TO_SEC(TIMEDIFF(UserJoinedGameServer.LeavedOn, UserJoinedGameServer.JoinedOn)) / 3600 + ), 2), 0) + FROM UserJoinedGameServer INNER JOIN Users ON UserJoinedGameServer.UserId = Users.UserId WHERE Users.ServerId = {server.server.id} AND UserJoinedGameServer.CreatedAt >= "{self._get_date(**server.kwargs)}"; diff --git a/bot/src/bot_graphql/queries/user_query.py b/bot/src/bot_graphql/queries/user_query.py index 219a1526..1d31312f 100644 --- a/bot/src/bot_graphql/queries/user_query.py +++ b/bot/src/bot_graphql/queries/user_query.py @@ -59,6 +59,7 @@ class UserQuery(DataQueryWithHistoryABC): self.set_field("ontime", lambda user, *_: user.ontime) self.set_field("gameOntime", lambda user, *_: user.game_ontime) self.set_field("level", lambda user, *_: user.level) + self.set_field("activityScore", lambda user, *_: user.activity) self.add_collection( "joinedServer", lambda user, *_: self._ujs.get_user_joined_servers_by_user_id(user.id), diff --git a/web/src/app/models/data/user.model.ts b/web/src/app/models/data/user.model.ts index 37c00950..f7ae3454 100644 --- a/web/src/app/models/data/user.model.ts +++ b/web/src/app/models/data/user.model.ts @@ -18,6 +18,7 @@ export interface User extends DataWithHistory { ontime?: number; gameOntime?: number; level?: Level; + activityScore?: number; server?: Server; leftServer?: boolean; diff --git a/web/src/app/models/graphql/queries.model.ts b/web/src/app/models/graphql/queries.model.ts index bf803943..2db56afa 100644 --- a/web/src/app/models/graphql/queries.model.ts +++ b/web/src/app/models/graphql/queries.model.ts @@ -362,6 +362,7 @@ export class Queries { xp ontime gameOntime + activityScore level { id name @@ -388,6 +389,7 @@ export class Queries { birthday ontime gameOntime + activityScore level { id name diff --git a/web/src/app/modules/view/server/members/members.component.html b/web/src/app/modules/view/server/members/members.component.html index b633ae05..da87353e 100644 --- a/web/src/app/modules/view/server/members/members.component.html +++ b/web/src/app/modules/view/server/members/members.component.html @@ -74,6 +74,13 @@
+ +
+
{{'common.activity' | translate}}
+ +
+ +
{{'common.left_server' | translate}}
@@ -127,6 +134,7 @@ +
+ + {{'common.activity' | translate}}: + + + {{member.activityScore}} + + + {{member.activityScore}} + + + {{'common.left_server' | translate}}: diff --git a/web/src/app/modules/view/server/members/members.component.ts b/web/src/app/modules/view/server/members/members.component.ts index c9d23f1d..ded4f2a4 100644 --- a/web/src/app/modules/view/server/members/members.component.ts +++ b/web/src/app/modules/view/server/members/members.component.ts @@ -89,7 +89,7 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe private data: DataService, private route: ActivatedRoute ) { - super("member", ["id", "discord_id", "name", "xp", "ontime", "game_ontime", "left_server", "level"]); + super("member", ["id", "discord_id", "name", "xp", "ontime", "game_ontime", "activity", "left_server", "level"]); } ngOnInit(): void { diff --git a/web/src/app/modules/view/server/profile/profile.component.html b/web/src/app/modules/view/server/profile/profile.component.html index 80e27d0b..ea14ad09 100644 --- a/web/src/app/modules/view/server/profile/profile.component.html +++ b/web/src/app/modules/view/server/profile/profile.component.html @@ -75,6 +75,13 @@
+
+
+
{{'common.activity' | translate}}:
+
{{user.activityScore}}
+
+
+
{{'view.server.profile.level' | translate}}:
diff --git a/web/src/assets/i18n/de.json b/web/src/assets/i18n/de.json index 9c5fec08..e31ade5d 100644 --- a/web/src/assets/i18n/de.json +++ b/web/src/assets/i18n/de.json @@ -127,6 +127,7 @@ "abort": "Abbrechen", "actions": "Aktionen", "active": "Aktiv", + "activity": "Aktivität", "add": "Hinzufügen", "attribute": "Attribut", "auth_role": "Rolle", diff --git a/web/src/assets/i18n/en.json b/web/src/assets/i18n/en.json index dbfd4101..49b1b59d 100644 --- a/web/src/assets/i18n/en.json +++ b/web/src/assets/i18n/en.json @@ -127,6 +127,7 @@ "abort": "Abort", "actions": "Actions", "active": "Active", + "activity": "Activity", "add": "Add", "attribute": "Attribute", "auth_role": "Role",