Compare commits
	
		
			170 Commits
		
	
	
		
			7c7786d2d1
			...
			1.1.3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9226a1188e | |||
| c06cb02cd6 | |||
| 20747001b0 | |||
| b4be6b4ac2 | |||
| bd3dd39dbc | |||
| 9e0905d49e | |||
| 3c0719f50e | |||
| 77d3668a06 | |||
| e914c7d02b | |||
| b40f521212 | |||
| d40ca88cd5 | |||
| 1e63baed97 | |||
| cdfd151851 | |||
| 12fbc972d9 | |||
| dca939f025 | |||
| ed9b893c12 | |||
| 731f80bd5f | |||
| 85852bf2f0 | |||
| 2c3ef97a14 | |||
| 9ec65689ba | |||
| 44f5de32a5 | |||
| c016d5fc84 | |||
| 306ce2664c | |||
| 3ce5471ef4 | |||
| 4cdd6c05bf | |||
| d364ea1b4c | |||
| 6fa08ea828 | |||
| 296c6e8044 | |||
| 0541f3dfde | |||
| 052e0f976a | |||
| f41dfc9be2 | |||
| 74437fdc20 | |||
| df2b660b75 | |||
| 12f231aa41 | |||
| 2f3ae229c9 | |||
| 5bbed854a4 | |||
| 2321c12bc9 | |||
| 1cdfd1291f | |||
| 223946ad76 | |||
| 4ea1b5b94c | |||
| 919970d199 | |||
| 19ed164845 | |||
| 92001a45be | |||
| 78b761a672 | |||
| 7bfa39f459 | |||
| d586cca672 | |||
| efce172c01 | |||
| 0974325148 | |||
| 206754919f | |||
| b49512e28d | |||
| fa71759a20 | |||
| 9338e35504 | |||
| 2956dcb9c2 | |||
| 762bebf416 | |||
| f3b5cef253 | |||
| 6869c5a671 | |||
| 352b44be0f | |||
| 5912708d3a | |||
| 45a3127696 | |||
| 10c20621a8 | |||
| 49e0e44461 | |||
| ec6b080ba6 | |||
| 28944755ac | |||
| 7318239b2d | |||
| cf66d246a9 | |||
| 41fe6faa52 | |||
| 685c96bb38 | |||
| 2c3e5268e4 | |||
| 2d5ce58612 | |||
| fe3d67eff5 | |||
| 4cea31fce5 | |||
| aa2c80ec12 | |||
| e283a18def | |||
| f5b2bec356 | |||
| c2b32996fd | |||
| 195566a2b6 | |||
| 073c318671 | |||
| caeec47b7c | |||
| 44f6b36347 | |||
| 4e32414f48 | |||
| 573c9c999e | |||
| 825fcff82d | |||
| a95bf7bc6c | |||
| 0bc3bff58e | |||
| c3b86fab6b | |||
| 906602134e | |||
| 30791f7529 | |||
| 456d939b47 | |||
| 1f47636e8d | |||
| f4acc2669d | |||
| 46b5757fd1 | |||
| 1cd75cd78f | |||
| f7f3fea7a7 | |||
| 5dd2000f10 | |||
| 1b2bb85b37 | |||
| 113b188a40 | |||
| e549341196 | |||
| 8a0d939147 | |||
| 4b57d7f102 | |||
| 02e0c72a80 | |||
| bfc9979961 | |||
| 8d76f79732 | |||
| 4add293186 | |||
| 1fc5ef76a6 | |||
| e6c9959381 | |||
| 9db00516c3 | |||
| 44e225c273 | |||
| 99e75ba325 | |||
| 3a078271ff | |||
| 1f9991eeda | |||
| bfe72668dc | |||
| 51d95c81c1 | |||
| 6c39cd1ae1 | |||
| 5d36f1188a | |||
| 4c42949516 | |||
| 8922524f44 | |||
| eac367c611 | |||
| f02acd7f94 | |||
| 05ddfb3de3 | |||
| 5c2c89ca45 | |||
| ec1ce4adef | |||
| 71f1f972c9 | |||
| 23757bc841 | |||
| 9671090385 | |||
| a03ddf3fc2 | |||
| da3538a836 | |||
| c782c11b6d | |||
| 05a2ea9b18 | |||
| a482c72a56 | |||
| 22bdf13835 | |||
| 0a3affc5d0 | |||
| d642322985 | |||
| 9f63a9c6dd | |||
| 11a4874bfb | |||
| d4dd55944a | |||
| 23d6216029 | |||
| f7297ddf78 | |||
| eb3715d00b | |||
| aae6472e11 | |||
| a71e3e4720 | |||
| 189128f0d3 | |||
| 3fb951a748 | |||
| 2293849d94 | |||
| cd5b3b6523 | |||
| c8a2ed290b | |||
| 184d241695 | |||
| cab65477b0 | |||
| 3507623c92 | |||
| b99dd1bded | |||
| a0d38bec49 | |||
| f312a2d776 | |||
| bfb816dd17 | |||
| d6854d44b7 | |||
| fdbba1b89c | |||
| 7f197a0ea7 | |||
| 2c9569b75f | |||
| 607b7d8aee | |||
| 00db6ac10f | |||
| f034413e35 | |||
| ff16eae477 | |||
| dbd82930d4 | |||
| 2e9cf0bd97 | |||
| 8a2edc7228 | |||
| 6d14ba9d79 | |||
| ba5f83f3d0 | |||
| 9f614e8a31 | |||
| 6e0d4a5144 | |||
| c7a1069c0c | |||
| dc0c6ca6a0 | |||
| 9201cbf357 | 
@@ -11,7 +11,7 @@
 | 
				
			|||||||
      "auto-role": "src/modules/auto_role/auto-role.json",
 | 
					      "auto-role": "src/modules/auto_role/auto-role.json",
 | 
				
			||||||
      "base": "src/modules/base/base.json",
 | 
					      "base": "src/modules/base/base.json",
 | 
				
			||||||
      "boot-log": "src/modules/boot_log/boot-log.json",
 | 
					      "boot-log": "src/modules/boot_log/boot-log.json",
 | 
				
			||||||
      "config": "src/modules/config/modules/config.json",
 | 
					      "config": "src/modules/config/config.json",
 | 
				
			||||||
      "database": "src/modules/database/database.json",
 | 
					      "database": "src/modules/database/database.json",
 | 
				
			||||||
      "level": "src/modules/level/level.json",
 | 
					      "level": "src/modules/level/level.json",
 | 
				
			||||||
      "permission": "src/modules/permission/permission.json",
 | 
					      "permission": "src/modules/permission/permission.json",
 | 
				
			||||||
 
 | 
				
			|||||||
 Submodule kdb-bot/docker updated: 62475d6546...7ae4783874
									
								
							@@ -15,7 +15,7 @@ __title__ = "bot"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,7 +71,7 @@ class Application(DiscordBotApplicationABC):
 | 
				
			|||||||
                self._api.stop()
 | 
					                self._api.stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await self._bot.close()
 | 
					            await self._bot.close()
 | 
				
			||||||
            self._data_integrity.check_data_integrity(is_for_shutdown=True)
 | 
					            await self._data_integrity.check_data_integrity(is_for_shutdown=True)
 | 
				
			||||||
            self._logger.info(__name__, f"Stopped {DiscordBotService.__name__}")
 | 
					            self._logger.info(__name__, f"Stopped {DiscordBotService.__name__}")
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            self._logger.error(__name__, "stop failed", e)
 | 
					            self._logger.error(__name__, "stop failed", e)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
    "Name": "bot",
 | 
					    "Name": "bot",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "1",
 | 
					      "Major": "1",
 | 
				
			||||||
      "Minor": "0",
 | 
					      "Minor": "1",
 | 
				
			||||||
      "Micro": "7"
 | 
					      "Micro": "3"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
					    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
				
			||||||
@@ -30,7 +30,8 @@
 | 
				
			|||||||
      "requests-oauthlib==1.3.1",
 | 
					      "requests-oauthlib==1.3.1",
 | 
				
			||||||
      "icmplib==3.0.3",
 | 
					      "icmplib==3.0.3",
 | 
				
			||||||
      "ariadne==0.20.1",
 | 
					      "ariadne==0.20.1",
 | 
				
			||||||
      "cryptography==41.0.2"
 | 
					      "cryptography==41.0.2",
 | 
				
			||||||
 | 
					      "discord>=2.3.2"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [
 | 
					    "DevDependencies": [
 | 
				
			||||||
      "cpl-cli==2023.4.0.post3",
 | 
					      "cpl-cli==2023.4.0.post3",
 | 
				
			||||||
@@ -59,9 +60,11 @@
 | 
				
			|||||||
      "../bot_core/bot-core.json",
 | 
					      "../bot_core/bot-core.json",
 | 
				
			||||||
      "../bot_data/bot-data.json",
 | 
					      "../bot_data/bot-data.json",
 | 
				
			||||||
      "../bot_graphql/bot-graphql.json",
 | 
					      "../bot_graphql/bot-graphql.json",
 | 
				
			||||||
 | 
					      "../modules/achievements/achievements.json",
 | 
				
			||||||
      "../modules/auto_role/auto-role.json",
 | 
					      "../modules/auto_role/auto-role.json",
 | 
				
			||||||
      "../modules/base/base.json",
 | 
					      "../modules/base/base.json",
 | 
				
			||||||
      "../modules/boot_log/boot-log.json",
 | 
					      "../modules/boot_log/boot-log.json",
 | 
				
			||||||
 | 
					      "../modules/config/config.json",
 | 
				
			||||||
      "../modules/database/database.json",
 | 
					      "../modules/database/database.json",
 | 
				
			||||||
      "../modules/level/level.json",
 | 
					      "../modules/level/level.json",
 | 
				
			||||||
      "../modules/permission/permission.json",
 | 
					      "../modules/permission/permission.json",
 | 
				
			||||||
 
 | 
				
			|||||||
 Submodule kdb-bot/src/bot/config updated: 359f9c38c3...23eafb2e21
									
								
							@@ -15,7 +15,7 @@ __title__ = "bot.extension"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,10 +31,10 @@ class Program:
 | 
				
			|||||||
            .use_extension(StartupDiscordExtension)
 | 
					            .use_extension(StartupDiscordExtension)
 | 
				
			||||||
            .use_extension(StartupModuleExtension)
 | 
					            .use_extension(StartupModuleExtension)
 | 
				
			||||||
            .use_extension(StartupMigrationExtension)
 | 
					            .use_extension(StartupMigrationExtension)
 | 
				
			||||||
 | 
					            .use_extension(DatabaseExtension)
 | 
				
			||||||
            .use_extension(ConfigExtension)
 | 
					            .use_extension(ConfigExtension)
 | 
				
			||||||
            .use_extension(InitBotExtension)
 | 
					            .use_extension(InitBotExtension)
 | 
				
			||||||
            .use_extension(BootLogExtension)
 | 
					            .use_extension(BootLogExtension)
 | 
				
			||||||
            .use_extension(DatabaseExtension)
 | 
					 | 
				
			||||||
            .use_extension(AppApiExtension)
 | 
					            .use_extension(AppApiExtension)
 | 
				
			||||||
            .use_extension(CoreExtension)
 | 
					            .use_extension(CoreExtension)
 | 
				
			||||||
            .use_startup(Startup)
 | 
					            .use_startup(Startup)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,8 +25,8 @@ class ModuleList:
 | 
				
			|||||||
            [
 | 
					            [
 | 
				
			||||||
                CoreModule,  # has to be first!
 | 
					                CoreModule,  # has to be first!
 | 
				
			||||||
                DataModule,
 | 
					                DataModule,
 | 
				
			||||||
 | 
					                ConfigModule,  # has to be before db check
 | 
				
			||||||
                DatabaseModule,
 | 
					                DatabaseModule,
 | 
				
			||||||
                ConfigModule,  # has be to after db check
 | 
					 | 
				
			||||||
                GraphQLModule,
 | 
					                GraphQLModule,
 | 
				
			||||||
                PermissionModule,
 | 
					                PermissionModule,
 | 
				
			||||||
                AutoRoleModule,
 | 
					                AutoRoleModule,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,10 @@ from bot_data.migration.api_key_migration import ApiKeyMigration
 | 
				
			|||||||
from bot_data.migration.api_migration import ApiMigration
 | 
					from bot_data.migration.api_migration import ApiMigration
 | 
				
			||||||
from bot_data.migration.auto_role_fix1_migration import AutoRoleFix1Migration
 | 
					from bot_data.migration.auto_role_fix1_migration import AutoRoleFix1Migration
 | 
				
			||||||
from bot_data.migration.auto_role_migration import AutoRoleMigration
 | 
					from bot_data.migration.auto_role_migration import AutoRoleMigration
 | 
				
			||||||
 | 
					from bot_data.migration.config_feature_flags_migration import ConfigFeatureFlagsMigration
 | 
				
			||||||
from bot_data.migration.config_migration import ConfigMigration
 | 
					from bot_data.migration.config_migration import ConfigMigration
 | 
				
			||||||
from bot_data.migration.db_history_migration import DBHistoryMigration
 | 
					from bot_data.migration.db_history_migration import DBHistoryMigration
 | 
				
			||||||
 | 
					from bot_data.migration.default_role_migration import DefaultRoleMigration
 | 
				
			||||||
from bot_data.migration.initial_migration import InitialMigration
 | 
					from bot_data.migration.initial_migration import InitialMigration
 | 
				
			||||||
from bot_data.migration.level_migration import LevelMigration
 | 
					from bot_data.migration.level_migration import LevelMigration
 | 
				
			||||||
from bot_data.migration.remove_stats_migration import RemoveStatsMigration
 | 
					from bot_data.migration.remove_stats_migration import RemoveStatsMigration
 | 
				
			||||||
@@ -46,3 +48,5 @@ class StartupMigrationExtension(StartupExtensionABC):
 | 
				
			|||||||
        services.add_transient(MigrationABC, DBHistoryMigration)  # 06.03.2023 #246 - 1.0.0
 | 
					        services.add_transient(MigrationABC, DBHistoryMigration)  # 06.03.2023 #246 - 1.0.0
 | 
				
			||||||
        services.add_transient(MigrationABC, AchievementsMigration)  # 14.06.2023 #268 - 1.1.0
 | 
					        services.add_transient(MigrationABC, AchievementsMigration)  # 14.06.2023 #268 - 1.1.0
 | 
				
			||||||
        services.add_transient(MigrationABC, ConfigMigration)  # 19.07.2023 #127 - 1.1.0
 | 
					        services.add_transient(MigrationABC, ConfigMigration)  # 19.07.2023 #127 - 1.1.0
 | 
				
			||||||
 | 
					        services.add_transient(MigrationABC, ConfigFeatureFlagsMigration)  # 15.08.2023 #334 - 1.1.0
 | 
				
			||||||
 | 
					        services.add_transient(MigrationABC, DefaultRoleMigration)  # 24.09.2023 #360 - 1.1.3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.abc"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
    "Name": "bot-api",
 | 
					    "Name": "bot-api",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "1",
 | 
					      "Major": "1",
 | 
				
			||||||
      "Minor": "0",
 | 
					      "Minor": "1",
 | 
				
			||||||
      "Micro": "7"
 | 
					      "Micro": "3"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "",
 | 
					    "Author": "",
 | 
				
			||||||
    "AuthorEmail": "",
 | 
					    "AuthorEmail": "",
 | 
				
			||||||
 
 | 
				
			|||||||
 Submodule kdb-bot/src/bot_api/config updated: 6d3f253f41...b6ffed4da1
									
								
							@@ -15,7 +15,7 @@ __title__ = "bot_api.configuration"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.controller"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.event"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.exception"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.filter"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.filter.discord"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.logging"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.model"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.model.discord"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.route"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.service"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -494,8 +494,13 @@ class AuthService(AuthServiceABC):
 | 
				
			|||||||
            added_user = True
 | 
					            added_user = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
 | 
					        db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
 | 
				
			||||||
        if db_user.users.count() == 0:
 | 
					        user_ids = db_user.users.select(lambda x: x.id)
 | 
				
			||||||
            members.for_each(lambda x: self._auth_users.add_auth_user_user_rel(AuthUserUsersRelation(db_user, x)))
 | 
					
 | 
				
			||||||
 | 
					        for user in self._users.get_users_by_discord_id(dc_id):
 | 
				
			||||||
 | 
					            if user.id in user_ids:
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            self._auth_users.add_auth_user_user_rel(AuthUserUsersRelation(db_user, user))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if db_user.confirmation_id is not None and not added_user:
 | 
					        if db_user.confirmation_id is not None and not added_user:
 | 
				
			||||||
            raise ServiceException(ServiceErrorCode.Forbidden, "E-Mail not verified")
 | 
					            raise ServiceException(ServiceErrorCode.Forbidden, "E-Mail not verified")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_api.transformer"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.abc"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
from abc import ABC, abstractmethod
 | 
					from abc import ABC, abstractmethod
 | 
				
			||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
from typing import Callable
 | 
					from typing import Callable, Union
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import discord
 | 
					import discord
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
@@ -67,3 +67,7 @@ class ClientUtilsABC(ABC):
 | 
				
			|||||||
        self, discord_channel_id: int, discord_message_id: int, rule: AutoRoleRule, guild: discord.Guild
 | 
					        self, discord_channel_id: int, discord_message_id: int, rule: AutoRoleRule, guild: discord.Guild
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @abstractmethod
 | 
				
			||||||
 | 
					    async def check_default_role(self, member: Union[discord.User, discord.Member]):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
    "Name": "bot-core",
 | 
					    "Name": "bot-core",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "1",
 | 
					      "Major": "1",
 | 
				
			||||||
      "Minor": "0",
 | 
					      "Minor": "1",
 | 
				
			||||||
      "Micro": "7"
 | 
					      "Micro": "3"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
					    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.configuration"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,18 +5,17 @@ class FeatureFlagsEnum(Enum):
 | 
				
			|||||||
    # modules
 | 
					    # modules
 | 
				
			||||||
    achievements_module = "AchievementsModule"
 | 
					    achievements_module = "AchievementsModule"
 | 
				
			||||||
    api_module = "ApiModule"
 | 
					    api_module = "ApiModule"
 | 
				
			||||||
    admin_module = "AdminModule"
 | 
					 | 
				
			||||||
    auto_role_module = "AutoRoleModule"
 | 
					    auto_role_module = "AutoRoleModule"
 | 
				
			||||||
    base_module = "BaseModule"
 | 
					    base_module = "BaseModule"
 | 
				
			||||||
    boot_log_module = "BootLogModule"
 | 
					    boot_log_module = "BootLogModule"
 | 
				
			||||||
    core_module = "CoreModule"
 | 
					    core_module = "CoreModule"
 | 
				
			||||||
    core_extension_module = "CoreExtensionModule"
 | 
					    core_extension_module = "CoreExtensionModule"
 | 
				
			||||||
 | 
					    config_module = "ConfigModule"
 | 
				
			||||||
    data_module = "DataModule"
 | 
					    data_module = "DataModule"
 | 
				
			||||||
    database_module = "DatabaseModule"
 | 
					    database_module = "DatabaseModule"
 | 
				
			||||||
    level_module = "LevelModule"
 | 
					    level_module = "LevelModule"
 | 
				
			||||||
    moderator_module = "ModeratorModule"
 | 
					    moderator_module = "ModeratorModule"
 | 
				
			||||||
    permission_module = "PermissionModule"
 | 
					    permission_module = "PermissionModule"
 | 
				
			||||||
    config_module = "ConfigModule"
 | 
					 | 
				
			||||||
    # features
 | 
					    # features
 | 
				
			||||||
    api_only = "ApiOnly"
 | 
					    api_only = "ApiOnly"
 | 
				
			||||||
    presence = "Presence"
 | 
					    presence = "Presence"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,7 @@ class FeatureFlagsSettings(ConfigurationModelABC):
 | 
				
			|||||||
        # modules
 | 
					        # modules
 | 
				
			||||||
        FeatureFlagsEnum.achievements_module.value: False,  # 14.06.2023 #268
 | 
					        FeatureFlagsEnum.achievements_module.value: False,  # 14.06.2023 #268
 | 
				
			||||||
        FeatureFlagsEnum.api_module.value: False,  # 13.10.2022 #70
 | 
					        FeatureFlagsEnum.api_module.value: False,  # 13.10.2022 #70
 | 
				
			||||||
        FeatureFlagsEnum.admin_module.value: False,  # 02.10.2022 #48
 | 
					        FeatureFlagsEnum.auto_role_module.value: False,  # 03.10.2022 #54
 | 
				
			||||||
        FeatureFlagsEnum.auto_role_module.value: True,  # 03.10.2022 #54
 | 
					 | 
				
			||||||
        FeatureFlagsEnum.base_module.value: True,  # 02.10.2022 #48
 | 
					        FeatureFlagsEnum.base_module.value: True,  # 02.10.2022 #48
 | 
				
			||||||
        FeatureFlagsEnum.boot_log_module.value: True,  # 02.10.2022 #48
 | 
					        FeatureFlagsEnum.boot_log_module.value: True,  # 02.10.2022 #48
 | 
				
			||||||
        FeatureFlagsEnum.core_module.value: True,  # 03.10.2022 #56
 | 
					        FeatureFlagsEnum.core_module.value: True,  # 03.10.2022 #56
 | 
				
			||||||
@@ -34,6 +33,17 @@ class FeatureFlagsSettings(ConfigurationModelABC):
 | 
				
			|||||||
        for flag in [f.value for f in FeatureFlagsEnum]:
 | 
					        for flag in [f.value for f in FeatureFlagsEnum]:
 | 
				
			||||||
            self._load_flag(kwargs, FeatureFlagsEnum(flag))
 | 
					            self._load_flag(kwargs, FeatureFlagsEnum(flag))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def get_flag_from_dict(cls, flags: dict, key: FeatureFlagsEnum) -> bool:
 | 
				
			||||||
 | 
					        def get_flag():
 | 
				
			||||||
 | 
					            if key.value not in cls._flags:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					            return cls._flags[key.value]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if key.value not in flags:
 | 
				
			||||||
 | 
					            return get_flag()
 | 
				
			||||||
 | 
					        return flags[key.value]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_flag(self, key: FeatureFlagsEnum) -> bool:
 | 
					    def get_flag(self, key: FeatureFlagsEnum) -> bool:
 | 
				
			||||||
        if key.value not in self._flags:
 | 
					        if key.value not in self._flags:
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.core_extension"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@ from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
				
			|||||||
from bot_core.events.core_on_ready_event import CoreOnReadyEvent
 | 
					from bot_core.events.core_on_ready_event import CoreOnReadyEvent
 | 
				
			||||||
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
 | 
					from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
 | 
				
			||||||
from bot_core.service.client_utils_service import ClientUtilsService
 | 
					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.data_integrity_service import DataIntegrityService
 | 
				
			||||||
from bot_core.service.message_service import MessageService
 | 
					from bot_core.service.message_service import MessageService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,6 +24,7 @@ class CoreModule(ModuleABC):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
					    def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
				
			||||||
 | 
					        services.add_transient(ConfigService)
 | 
				
			||||||
        services.add_transient(MessageServiceABC, MessageService)
 | 
					        services.add_transient(MessageServiceABC, MessageService)
 | 
				
			||||||
        services.add_transient(ClientUtilsABC, ClientUtilsService)
 | 
					        services.add_transient(ClientUtilsABC, ClientUtilsService)
 | 
				
			||||||
        services.add_transient(DataIntegrityService)
 | 
					        services.add_transient(DataIntegrityService)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.events"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.exception"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.helper"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.logging"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.pipes"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_core.service"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
from typing import Callable
 | 
					from typing import Callable, Union
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import discord
 | 
					import discord
 | 
				
			||||||
from cpl_core.configuration import ConfigurationABC
 | 
					from cpl_core.configuration import ConfigurationABC
 | 
				
			||||||
@@ -218,3 +218,20 @@ class ClientUtilsService(ClientUtilsABC):
 | 
				
			|||||||
                f"Cannot add reaction {rule.emoji_name} to message: {discord_message_id}",
 | 
					                f"Cannot add reaction {rule.emoji_name} to message: {discord_message_id}",
 | 
				
			||||||
                e,
 | 
					                e,
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def check_default_role(self, member: Union[discord.User, discord.Member]):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            server = self._servers.get_server_by_discord_id(member.guild.id)
 | 
				
			||||||
 | 
					            settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if settings.default_role_id is None:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            default_role = member.guild.get_role(settings.default_role_id)
 | 
				
			||||||
 | 
					            if default_role in member.roles:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await member.add_roles(default_role)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            self._logger.error(__name__, f"Cannot check for default role for member {member.id}", e)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								kdb-bot/src/bot_core/service/config_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								kdb-bot/src/bot_core/service/config_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					from cpl_core.configuration import ConfigurationABC
 | 
				
			||||||
 | 
					from cpl_core.dependency_injection import ServiceProviderABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
 | 
				
			||||||
 | 
					from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
 | 
				
			||||||
 | 
					from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
 | 
				
			||||||
 | 
					from bot_data.model.server import Server
 | 
				
			||||||
 | 
					from bot_data.model.technician_config import TechnicianConfig
 | 
				
			||||||
 | 
					from bot_data.service.server_config_seeder import ServerConfigSeeder
 | 
				
			||||||
 | 
					from bot_data.service.technician_config_seeder import TechnicianConfigSeeder
 | 
				
			||||||
 | 
					from modules.permission.abc.permission_service_abc import PermissionServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConfigService:
 | 
				
			||||||
 | 
					    def __init__(
 | 
				
			||||||
 | 
					        self,
 | 
				
			||||||
 | 
					        config: ConfigurationABC,
 | 
				
			||||||
 | 
					        services: ServiceProviderABC,
 | 
				
			||||||
 | 
					        technician_config_repo: TechnicianConfigRepositoryABC,
 | 
				
			||||||
 | 
					        server_config_repo: ServerConfigRepositoryABC,
 | 
				
			||||||
 | 
					        tech_seeder: TechnicianConfigSeeder,
 | 
				
			||||||
 | 
					        server_seeder: ServerConfigSeeder,
 | 
				
			||||||
 | 
					    ):
 | 
				
			||||||
 | 
					        self._config = config
 | 
				
			||||||
 | 
					        self._services = services
 | 
				
			||||||
 | 
					        self._technician_config_repo = technician_config_repo
 | 
				
			||||||
 | 
					        self._server_config_repo = server_config_repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._tech_seeder = tech_seeder
 | 
				
			||||||
 | 
					        self._server_seeder = server_seeder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def reload_technician_config(self):
 | 
				
			||||||
 | 
					        if not self._technician_config_repo.does_technician_config_exists():
 | 
				
			||||||
 | 
					            await self._tech_seeder.seed()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        technician_config = self._technician_config_repo.get_technician_config()
 | 
				
			||||||
 | 
					        self._config.add_configuration(TechnicianConfig, technician_config)
 | 
				
			||||||
 | 
					        self._config.add_configuration(FeatureFlagsSettings, FeatureFlagsSettings(**technician_config.feature_flags))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def reload_server_config(self, server: Server):
 | 
				
			||||||
 | 
					        if not self._server_config_repo.does_server_config_exists(server.id):
 | 
				
			||||||
 | 
					            await self._server_seeder.seed()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        server_config = self._server_config_repo.get_server_config_by_server(server.id)
 | 
				
			||||||
 | 
					        self._config.add_configuration(
 | 
				
			||||||
 | 
					            f"{type(server_config).__name__}_{server_config.server.discord_id}", server_config
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        permissions: PermissionServiceABC = self._services.get_service(PermissionServiceABC)
 | 
				
			||||||
 | 
					        permissions.on_ready()
 | 
				
			||||||
@@ -6,6 +6,7 @@ from cpl_core.configuration import ConfigurationABC
 | 
				
			|||||||
from cpl_core.database.context import DatabaseContextABC
 | 
					from cpl_core.database.context import DatabaseContextABC
 | 
				
			||||||
from cpl_discord.service import DiscordBotServiceABC
 | 
					from cpl_discord.service import DiscordBotServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
				
			||||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
					from bot_core.logging.database_logger import DatabaseLogger
 | 
				
			||||||
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
 | 
					from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
 | 
				
			||||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
 | 
					from bot_data.abc.client_repository_abc import ClientRepositoryABC
 | 
				
			||||||
@@ -44,6 +45,7 @@ class DataIntegrityService:
 | 
				
			|||||||
        user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
 | 
					        user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
 | 
				
			||||||
        user_joined_gs: UserJoinedGameServerRepositoryABC,
 | 
					        user_joined_gs: UserJoinedGameServerRepositoryABC,
 | 
				
			||||||
        achievement_service: AchievementService,
 | 
					        achievement_service: AchievementService,
 | 
				
			||||||
 | 
					        client_utils: ClientUtilsABC,
 | 
				
			||||||
        dtp: DateTimeOffsetPipe,
 | 
					        dtp: DateTimeOffsetPipe,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        self._config = config
 | 
					        self._config = config
 | 
				
			||||||
@@ -60,6 +62,7 @@ class DataIntegrityService:
 | 
				
			|||||||
        self._user_joins_vc = user_joins_vc
 | 
					        self._user_joins_vc = user_joins_vc
 | 
				
			||||||
        self._user_joined_gs = user_joined_gs
 | 
					        self._user_joined_gs = user_joined_gs
 | 
				
			||||||
        self._achievements = achievement_service
 | 
					        self._achievements = achievement_service
 | 
				
			||||||
 | 
					        self._client_utils = client_utils
 | 
				
			||||||
        self._dtp = dtp
 | 
					        self._dtp = dtp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._is_for_shutdown = False
 | 
					        self._is_for_shutdown = False
 | 
				
			||||||
@@ -291,7 +294,7 @@ class DataIntegrityService:
 | 
				
			|||||||
                        self._user_joins_vc.update_user_joined_voice_channel(join)
 | 
					                        self._user_joins_vc.update_user_joined_voice_channel(join)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if self._is_for_shutdown:
 | 
					                        if self._is_for_shutdown:
 | 
				
			||||||
                            user.xp = round(join.time * settings.xp_per_ontime_hour)
 | 
					                            user.xp += round(join.time * settings.xp_per_ontime_hour)
 | 
				
			||||||
                            self._users.update_user(user)
 | 
					                            self._users.update_user(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        self._db_context.save_changes()
 | 
					                        self._db_context.save_changes()
 | 
				
			||||||
@@ -356,14 +359,14 @@ class DataIntegrityService:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        self._user_joined_gs.update_user_joined_game_server(join)
 | 
					                        self._user_joined_gs.update_user_joined_game_server(join)
 | 
				
			||||||
                        if self._is_for_shutdown:
 | 
					                        if self._is_for_shutdown:
 | 
				
			||||||
                            user.xp = round(join.time * settings.xp_per_ontime_hour)
 | 
					                            user.xp += round(join.time * settings.xp_per_ontime_hour)
 | 
				
			||||||
                            self._users.update_user(user)
 | 
					                            self._users.update_user(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        self._db_context.save_changes()
 | 
					                        self._db_context.save_changes()
 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                self._logger.error(__name__, f"Cannot get UserJoinedGameServer", e)
 | 
					                self._logger.error(__name__, f"Cannot get UserJoinedGameServer", e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _check_for_user_achievements(self):
 | 
					    async def _check_for_user_achievements(self):
 | 
				
			||||||
        self._logger.debug(__name__, f"Start checking UserGotAchievement table")
 | 
					        self._logger.debug(__name__, f"Start checking UserGotAchievement table")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for guild in self._bot.guilds:
 | 
					        for guild in self._bot.guilds:
 | 
				
			||||||
@@ -380,12 +383,18 @@ class DataIntegrityService:
 | 
				
			|||||||
                if user is None:
 | 
					                if user is None:
 | 
				
			||||||
                    self._logger.fatal(__name__, f"User not found in database: {member.id}")
 | 
					                    self._logger.fatal(__name__, f"User not found in database: {member.id}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                self._bot.loop.create_task(self._achievements.validate_achievements_for_user(user))
 | 
					                await self._achievements.validate_achievements_for_user(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def check_data_integrity(self, is_for_shutdown=False):
 | 
					    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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def check_data_integrity(self, is_for_shutdown=False):
 | 
				
			||||||
        if is_for_shutdown != self._is_for_shutdown:
 | 
					        if is_for_shutdown != self._is_for_shutdown:
 | 
				
			||||||
            self._is_for_shutdown = is_for_shutdown
 | 
					            self._is_for_shutdown = is_for_shutdown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await self._check_default_role()
 | 
				
			||||||
        self._check_known_users()
 | 
					        self._check_known_users()
 | 
				
			||||||
        self._check_servers()
 | 
					        self._check_servers()
 | 
				
			||||||
        self._check_clients()
 | 
					        self._check_clients()
 | 
				
			||||||
@@ -393,4 +402,4 @@ class DataIntegrityService:
 | 
				
			|||||||
        self._check_user_joins()
 | 
					        self._check_user_joins()
 | 
				
			||||||
        self._check_user_joins_vc()
 | 
					        self._check_user_joins_vc()
 | 
				
			||||||
        self._check_user_joined_gs()
 | 
					        self._check_user_joined_gs()
 | 
				
			||||||
        self._check_for_user_achievements()
 | 
					        await self._check_for_user_achievements()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_data"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_data.abc"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,10 @@ class AuthUserRepositoryABC(ABC):
 | 
				
			|||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @abstractmethod
 | 
				
			||||||
 | 
					    def get_auth_user_relation_ids(self, auth_user: AuthUser) -> List[int]:
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_all_auth_users(self) -> List[AuthUser]:
 | 
					    def get_all_auth_users(self) -> List[AuthUser]:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
    "Name": "bot-data",
 | 
					    "Name": "bot-data",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "1",
 | 
					      "Major": "1",
 | 
				
			||||||
      "Minor": "0",
 | 
					      "Minor": "1",
 | 
				
			||||||
      "Micro": "7"
 | 
					      "Micro": "3"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
					    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_data.migration"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					from bot_core.logging.database_logger import DatabaseLogger
 | 
				
			||||||
 | 
					from bot_data.abc.migration_abc import MigrationABC
 | 
				
			||||||
 | 
					from bot_data.db_context import DBContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConfigFeatureFlagsMigration(MigrationABC):
 | 
				
			||||||
 | 
					    name = "1.1.0_ConfigFeatureFlagsMigration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, logger: DatabaseLogger, db: DBContext):
 | 
				
			||||||
 | 
					        MigrationABC.__init__(self)
 | 
				
			||||||
 | 
					        self._logger = logger
 | 
				
			||||||
 | 
					        self._db = db
 | 
				
			||||||
 | 
					        self._cursor = db.cursor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def upgrade(self):
 | 
				
			||||||
 | 
					        self._logger.debug(__name__, "Running upgrade")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._cursor.execute(
 | 
				
			||||||
 | 
					            str("""ALTER TABLE CFG_Technician ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER CacheMaxMessages;""")
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._cursor.execute(
 | 
				
			||||||
 | 
					            str("""ALTER TABLE CFG_Server ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER LoginMessageChannelId;""")
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def downgrade(self):
 | 
				
			||||||
 | 
					        self._logger.debug(__name__, "Running downgrade")
 | 
				
			||||||
 | 
					        self._cursor.execute("ALTER TABLE CFG_Technician DROP COLUMN FeatureFlags;")
 | 
				
			||||||
 | 
					        self._cursor.execute("ALTER TABLE CFG_Server DROP COLUMN FeatureFlags;")
 | 
				
			||||||
@@ -143,6 +143,8 @@ class ConfigMigration(MigrationABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def downgrade(self):
 | 
					    def downgrade(self):
 | 
				
			||||||
        self._logger.debug(__name__, "Running downgrade")
 | 
					        self._logger.debug(__name__, "Running downgrade")
 | 
				
			||||||
 | 
					        self._server_downgrade()
 | 
				
			||||||
 | 
					        self._technician_downgrade()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _server_downgrade(self):
 | 
					    def _server_downgrade(self):
 | 
				
			||||||
        self._cursor.execute("DROP TABLE `CFG_Server`;")
 | 
					        self._cursor.execute("DROP TABLE `CFG_Server`;")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								kdb-bot/src/bot_data/migration/default_role_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								kdb-bot/src/bot_data/migration/default_role_migration.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					from bot_core.logging.database_logger import DatabaseLogger
 | 
				
			||||||
 | 
					from bot_data.abc.migration_abc import MigrationABC
 | 
				
			||||||
 | 
					from bot_data.db_context import DBContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DefaultRoleMigration(MigrationABC):
 | 
				
			||||||
 | 
					    name = "1.1.3_DefaultRoleMigration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, logger: DatabaseLogger, db: DBContext):
 | 
				
			||||||
 | 
					        MigrationABC.__init__(self)
 | 
				
			||||||
 | 
					        self._logger = logger
 | 
				
			||||||
 | 
					        self._db = db
 | 
				
			||||||
 | 
					        self._cursor = db.cursor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def upgrade(self):
 | 
				
			||||||
 | 
					        self._logger.debug(__name__, "Running upgrade")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._cursor.execute(
 | 
				
			||||||
 | 
					            str(
 | 
				
			||||||
 | 
					                f"""
 | 
				
			||||||
 | 
					                    ALTER TABLE CFG_Server
 | 
				
			||||||
 | 
					                    ADD DefaultRoleId BIGINT NULL AFTER LoginMessageChannelId;
 | 
				
			||||||
 | 
					                """
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def downgrade(self):
 | 
				
			||||||
 | 
					        self._cursor.execute(
 | 
				
			||||||
 | 
					            str(
 | 
				
			||||||
 | 
					                f"""
 | 
				
			||||||
 | 
					                    ALTER TABLE CFG_Server DROP COLUMN DefaultRoleId;
 | 
				
			||||||
 | 
					                """
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
@@ -15,7 +15,7 @@ __title__ = "bot_data.model"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,6 +108,15 @@ class Achievement(TableABC):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def get_select_by_server_id_string(id: int) -> str:
 | 
				
			||||||
 | 
					        return str(
 | 
				
			||||||
 | 
					            f"""
 | 
				
			||||||
 | 
					            SELECT * FROM `Achievements`
 | 
				
			||||||
 | 
					            WHERE `ServerId` = {id};
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def insert_string(self) -> str:
 | 
					    def insert_string(self) -> str:
 | 
				
			||||||
        return str(
 | 
					        return str(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,11 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.configuration import ConfigurationModelABC
 | 
					from cpl_core.configuration import ConfigurationModelABC
 | 
				
			||||||
from cpl_core.database import TableABC
 | 
					from cpl_core.database import TableABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
				
			||||||
from bot_data.model.server import Server
 | 
					from bot_data.model.server import Server
 | 
				
			||||||
from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
 | 
					from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,6 +26,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
        help_voice_channel_id: int,
 | 
					        help_voice_channel_id: int,
 | 
				
			||||||
        team_channel_id: int,
 | 
					        team_channel_id: int,
 | 
				
			||||||
        login_message_channel_id: int,
 | 
					        login_message_channel_id: int,
 | 
				
			||||||
 | 
					        default_role_id: int,
 | 
				
			||||||
 | 
					        feature_flags: dict[FeatureFlagsEnum],
 | 
				
			||||||
        server: Server,
 | 
					        server: Server,
 | 
				
			||||||
        afk_channel_ids: List[int],
 | 
					        afk_channel_ids: List[int],
 | 
				
			||||||
        team_role_ids: List[ServerTeamRoleIdsConfig],
 | 
					        team_role_ids: List[ServerTeamRoleIdsConfig],
 | 
				
			||||||
@@ -45,6 +49,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
        self._help_voice_channel_id = help_voice_channel_id
 | 
					        self._help_voice_channel_id = help_voice_channel_id
 | 
				
			||||||
        self._team_channel_id = team_channel_id
 | 
					        self._team_channel_id = team_channel_id
 | 
				
			||||||
        self._login_message_channel_id = login_message_channel_id
 | 
					        self._login_message_channel_id = login_message_channel_id
 | 
				
			||||||
 | 
					        self._default_role_id = default_role_id
 | 
				
			||||||
 | 
					        self._feature_flags = feature_flags
 | 
				
			||||||
        self._server = server
 | 
					        self._server = server
 | 
				
			||||||
        self._afk_channel_ids = afk_channel_ids
 | 
					        self._afk_channel_ids = afk_channel_ids
 | 
				
			||||||
        self._team_role_ids = team_role_ids
 | 
					        self._team_role_ids = team_role_ids
 | 
				
			||||||
@@ -161,6 +167,22 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
    def login_message_channel_id(self, value: int):
 | 
					    def login_message_channel_id(self, value: int):
 | 
				
			||||||
        self._login_message_channel_id = value
 | 
					        self._login_message_channel_id = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def default_role_id(self) -> int:
 | 
				
			||||||
 | 
					        return self._default_role_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @default_role_id.setter
 | 
				
			||||||
 | 
					    def default_role_id(self, value: int):
 | 
				
			||||||
 | 
					        self._default_role_id = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def feature_flags(self) -> dict[FeatureFlagsEnum]:
 | 
				
			||||||
 | 
					        return self._feature_flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @feature_flags.setter
 | 
				
			||||||
 | 
					    def feature_flags(self, value: dict[FeatureFlagsEnum]):
 | 
				
			||||||
 | 
					        self._feature_flags = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def afk_channel_ids(self) -> List[int]:
 | 
					    def afk_channel_ids(self) -> List[int]:
 | 
				
			||||||
        return self._afk_channel_ids
 | 
					        return self._afk_channel_ids
 | 
				
			||||||
@@ -225,6 +247,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
                    `HelpVoiceChannelId`,
 | 
					                    `HelpVoiceChannelId`,
 | 
				
			||||||
                    `TeamChannelId`,
 | 
					                    `TeamChannelId`,
 | 
				
			||||||
                    `LoginMessageChannelId`,
 | 
					                    `LoginMessageChannelId`,
 | 
				
			||||||
 | 
					                    `DefaultRoleId`,
 | 
				
			||||||
 | 
					                    `FeatureFlags`,
 | 
				
			||||||
                    `ServerId`
 | 
					                    `ServerId`
 | 
				
			||||||
                ) VALUES (
 | 
					                ) VALUES (
 | 
				
			||||||
                    {self._message_delete_timer},
 | 
					                    {self._message_delete_timer},
 | 
				
			||||||
@@ -240,6 +264,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
                    {self._help_voice_channel_id},
 | 
					                    {self._help_voice_channel_id},
 | 
				
			||||||
                    {self._team_channel_id},
 | 
					                    {self._team_channel_id},
 | 
				
			||||||
                    {self._login_message_channel_id},
 | 
					                    {self._login_message_channel_id},
 | 
				
			||||||
 | 
					                    {self._default_role_id},
 | 
				
			||||||
 | 
					                    '{json.dumps(self._feature_flags)}',
 | 
				
			||||||
                    {self._server.id}
 | 
					                    {self._server.id}
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            """
 | 
					            """
 | 
				
			||||||
@@ -263,6 +289,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
                `HelpVoiceChannelId` = {self._help_voice_channel_id},
 | 
					                `HelpVoiceChannelId` = {self._help_voice_channel_id},
 | 
				
			||||||
                `TeamChannelId` = {self._team_channel_id},
 | 
					                `TeamChannelId` = {self._team_channel_id},
 | 
				
			||||||
                `LoginMessageChannelId` = {self._login_message_channel_id},
 | 
					                `LoginMessageChannelId` = {self._login_message_channel_id},
 | 
				
			||||||
 | 
					                `DefaultRoleId` = {self._default_role_id},
 | 
				
			||||||
 | 
					                `FeatureFlags` = '{json.dumps(self._feature_flags)}',
 | 
				
			||||||
                `ServerId` = {self._server.id}
 | 
					                `ServerId` = {self._server.id}
 | 
				
			||||||
                WHERE `Id` = {self._id};
 | 
					                WHERE `Id` = {self._id};
 | 
				
			||||||
            """
 | 
					            """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,8 @@ class ServerConfigHistory(HistoryTableABC):
 | 
				
			|||||||
        help_voice_channel_id: int,
 | 
					        help_voice_channel_id: int,
 | 
				
			||||||
        team_channel_id: int,
 | 
					        team_channel_id: int,
 | 
				
			||||||
        login_message_channel_id: int,
 | 
					        login_message_channel_id: int,
 | 
				
			||||||
 | 
					        default_role_id: int,
 | 
				
			||||||
 | 
					        feature_flags: dict[str],
 | 
				
			||||||
        server_id: int,
 | 
					        server_id: int,
 | 
				
			||||||
        deleted: bool,
 | 
					        deleted: bool,
 | 
				
			||||||
        date_from: str,
 | 
					        date_from: str,
 | 
				
			||||||
@@ -39,6 +41,8 @@ class ServerConfigHistory(HistoryTableABC):
 | 
				
			|||||||
        self._help_voice_channel_id = help_voice_channel_id
 | 
					        self._help_voice_channel_id = help_voice_channel_id
 | 
				
			||||||
        self._team_channel_id = team_channel_id
 | 
					        self._team_channel_id = team_channel_id
 | 
				
			||||||
        self._login_message_channel_id = login_message_channel_id
 | 
					        self._login_message_channel_id = login_message_channel_id
 | 
				
			||||||
 | 
					        self._default_role_id = default_role_id
 | 
				
			||||||
 | 
					        self._feature_flags = feature_flags
 | 
				
			||||||
        self._server_id = server_id
 | 
					        self._server_id = server_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._deleted = deleted
 | 
					        self._deleted = deleted
 | 
				
			||||||
@@ -97,6 +101,14 @@ class ServerConfigHistory(HistoryTableABC):
 | 
				
			|||||||
    def login_message_channel_id(self) -> int:
 | 
					    def login_message_channel_id(self) -> int:
 | 
				
			||||||
        return self._login_message_channel_id
 | 
					        return self._login_message_channel_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def default_role_id(self) -> int:
 | 
				
			||||||
 | 
					        return self._default_role_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def feature_flags(self) -> dict[str]:
 | 
				
			||||||
 | 
					        return self._feature_flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def server_id(self) -> int:
 | 
					    def server_id(self) -> int:
 | 
				
			||||||
        return self._server_id
 | 
					        return self._server_id
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,12 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.configuration import ConfigurationModelABC
 | 
					from cpl_core.configuration import ConfigurationModelABC
 | 
				
			||||||
from cpl_core.database import TableABC
 | 
					from cpl_core.database import TableABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
					class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			||||||
    def __init__(
 | 
					    def __init__(
 | 
				
			||||||
@@ -12,6 +15,7 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
        wait_for_restart: int,
 | 
					        wait_for_restart: int,
 | 
				
			||||||
        wait_for_shutdown: int,
 | 
					        wait_for_shutdown: int,
 | 
				
			||||||
        cache_max_messages: int,
 | 
					        cache_max_messages: int,
 | 
				
			||||||
 | 
					        feature_flags: dict[FeatureFlagsEnum],
 | 
				
			||||||
        technician_ids: List[int],
 | 
					        technician_ids: List[int],
 | 
				
			||||||
        ping_urls: List[str],
 | 
					        ping_urls: List[str],
 | 
				
			||||||
        created_at: datetime = None,
 | 
					        created_at: datetime = None,
 | 
				
			||||||
@@ -23,6 +27,7 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
        self._wait_for_restart = wait_for_restart
 | 
					        self._wait_for_restart = wait_for_restart
 | 
				
			||||||
        self._wait_for_shutdown = wait_for_shutdown
 | 
					        self._wait_for_shutdown = wait_for_shutdown
 | 
				
			||||||
        self._cache_max_messages = cache_max_messages
 | 
					        self._cache_max_messages = cache_max_messages
 | 
				
			||||||
 | 
					        self._feature_flags = feature_flags
 | 
				
			||||||
        self._technician_ids = technician_ids
 | 
					        self._technician_ids = technician_ids
 | 
				
			||||||
        self._ping_urls = ping_urls
 | 
					        self._ping_urls = ping_urls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,6 +71,14 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
    def cache_max_messages(self, value: int):
 | 
					    def cache_max_messages(self, value: int):
 | 
				
			||||||
        self._cache_max_messages = value
 | 
					        self._cache_max_messages = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def feature_flags(self) -> dict[FeatureFlagsEnum]:
 | 
				
			||||||
 | 
					        return self._feature_flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @feature_flags.setter
 | 
				
			||||||
 | 
					    def feature_flags(self, value: dict[FeatureFlagsEnum]):
 | 
				
			||||||
 | 
					        self._feature_flags = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def technician_ids(self) -> List[int]:
 | 
					    def technician_ids(self) -> List[int]:
 | 
				
			||||||
        return self._technician_ids
 | 
					        return self._technician_ids
 | 
				
			||||||
@@ -104,12 +117,13 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
        return str(
 | 
					        return str(
 | 
				
			||||||
            f"""
 | 
					            f"""
 | 
				
			||||||
                INSERT INTO `CFG_Technician` (
 | 
					                INSERT INTO `CFG_Technician` (
 | 
				
			||||||
                    `HelpCommandReferenceUrl`, `WaitForRestart`, `WaitForShutdown`, `CacheMaxMessages`
 | 
					                    `HelpCommandReferenceUrl`, `WaitForRestart`, `WaitForShutdown`, `CacheMaxMessages`, `FeatureFlags`
 | 
				
			||||||
                ) VALUES (
 | 
					                ) VALUES (
 | 
				
			||||||
                    '{self._help_command_reference_url}',
 | 
					                    '{self._help_command_reference_url}',
 | 
				
			||||||
                    {self._wait_for_restart},
 | 
					                    {self._wait_for_restart},
 | 
				
			||||||
                    {self._wait_for_shutdown},
 | 
					                    {self._wait_for_shutdown},
 | 
				
			||||||
                    {self._cache_max_messages}
 | 
					                    {self._cache_max_messages},
 | 
				
			||||||
 | 
					                    '{json.dumps(self._feature_flags)}'
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            """
 | 
					            """
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -122,7 +136,8 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
 | 
				
			|||||||
                SET `HelpCommandReferenceUrl` = '{self._help_command_reference_url}',
 | 
					                SET `HelpCommandReferenceUrl` = '{self._help_command_reference_url}',
 | 
				
			||||||
                `WaitForRestart` = {self._wait_for_restart},
 | 
					                `WaitForRestart` = {self._wait_for_restart},
 | 
				
			||||||
                `WaitForShutdown` = {self._wait_for_shutdown},
 | 
					                `WaitForShutdown` = {self._wait_for_shutdown},
 | 
				
			||||||
                `CacheMaxMessages` = {self._cache_max_messages}
 | 
					                `CacheMaxMessages` = {self._cache_max_messages},
 | 
				
			||||||
 | 
					                `FeatureFlags` = '{json.dumps(self._feature_flags)}'
 | 
				
			||||||
                WHERE `Id` = {self._id};
 | 
					                WHERE `Id` = {self._id};
 | 
				
			||||||
            """
 | 
					            """
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,8 @@ class User(TableABC):
 | 
				
			|||||||
        self,
 | 
					        self,
 | 
				
			||||||
        dc_id: int,
 | 
					        dc_id: int,
 | 
				
			||||||
        xp: int,
 | 
					        xp: int,
 | 
				
			||||||
        message_count: int,
 | 
					 | 
				
			||||||
        reaction_count: int,
 | 
					        reaction_count: int,
 | 
				
			||||||
 | 
					        message_count: int,
 | 
				
			||||||
        server: Optional[Server],
 | 
					        server: Optional[Server],
 | 
				
			||||||
        created_at: datetime = None,
 | 
					        created_at: datetime = None,
 | 
				
			||||||
        modified_at: datetime = None,
 | 
					        modified_at: datetime = None,
 | 
				
			||||||
@@ -25,8 +25,8 @@ class User(TableABC):
 | 
				
			|||||||
        self._user_id = id
 | 
					        self._user_id = id
 | 
				
			||||||
        self._discord_id = dc_id
 | 
					        self._discord_id = dc_id
 | 
				
			||||||
        self._xp = xp
 | 
					        self._xp = xp
 | 
				
			||||||
        self._message_count = message_count
 | 
					 | 
				
			||||||
        self._reaction_count = reaction_count
 | 
					        self._reaction_count = reaction_count
 | 
				
			||||||
 | 
					        self._message_count = message_count
 | 
				
			||||||
        self._server = server
 | 
					        self._server = server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TableABC.__init__(self)
 | 
					        TableABC.__init__(self)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_data.service"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,8 +65,8 @@ class AchievementRepositoryService(AchievementRepositoryABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def get_achievements_by_server_id(self, server_id: int) -> List[Achievement]:
 | 
					    def get_achievements_by_server_id(self, server_id: int) -> List[Achievement]:
 | 
				
			||||||
        achievements = List(Achievement)
 | 
					        achievements = List(Achievement)
 | 
				
			||||||
        self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_by_id_string(server_id)}")
 | 
					        self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_by_server_id_string(server_id)}")
 | 
				
			||||||
        results = self._context.select(Achievement.get_select_all_string())
 | 
					        results = self._context.select(Achievement.get_select_by_server_id_string(server_id))
 | 
				
			||||||
        for result in results:
 | 
					        for result in results:
 | 
				
			||||||
            self._logger.trace(__name__, f"Get user with id {result[0]}")
 | 
					            self._logger.trace(__name__, f"Get user with id {result[0]}")
 | 
				
			||||||
            achievements.append(self._from_result(result))
 | 
					            achievements.append(self._from_result(result))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					from enum import Enum
 | 
				
			||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.database.context import DatabaseContextABC
 | 
					from cpl_core.database.context import DatabaseContextABC
 | 
				
			||||||
@@ -49,13 +50,7 @@ class AuthUserRepositoryService(AuthUserRepositoryABC):
 | 
				
			|||||||
            auth_user_id=self._get_value_from_result(au_result[0]),
 | 
					            auth_user_id=self._get_value_from_result(au_result[0]),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._logger.trace(
 | 
					        for user_id in self.get_auth_user_relation_ids(auth_user):
 | 
				
			||||||
            __name__,
 | 
					 | 
				
			||||||
            f"Send SQL command: {auth_user.get_select_user_id_from_relations()}",
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        results = self._context.select(auth_user.get_select_user_id_from_relations())
 | 
					 | 
				
			||||||
        for result in results:
 | 
					 | 
				
			||||||
            user_id = self._get_value_from_result(result[0])
 | 
					 | 
				
			||||||
            if user_id is None:
 | 
					            if user_id is None:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,6 +59,19 @@ class AuthUserRepositoryService(AuthUserRepositoryABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return auth_user
 | 
					        return auth_user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_auth_user_relation_ids(self, auth_user: AuthUser) -> List[int]:
 | 
				
			||||||
 | 
					        self._logger.trace(
 | 
				
			||||||
 | 
					            __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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_all_auth_users(self) -> List[AuthUser]:
 | 
					    def get_all_auth_users(self) -> List[AuthUser]:
 | 
				
			||||||
        users = List(AuthUser)
 | 
					        users = List(AuthUser)
 | 
				
			||||||
        self._logger.trace(__name__, f"Send SQL command: {AuthUser.get_select_all_string()}")
 | 
					        self._logger.trace(__name__, f"Send SQL command: {AuthUser.get_select_all_string()}")
 | 
				
			||||||
@@ -100,9 +108,17 @@ class AuthUserRepositoryService(AuthUserRepositoryABC):
 | 
				
			|||||||
        ):
 | 
					        ):
 | 
				
			||||||
            crit_sort_direction = criteria.sort_direction.lower()
 | 
					            crit_sort_direction = criteria.sort_direction.lower()
 | 
				
			||||||
            if crit_sort_direction == "desc" or crit_sort_direction == "descending":
 | 
					            if crit_sort_direction == "desc" or crit_sort_direction == "descending":
 | 
				
			||||||
                query = query.order_by_descending(lambda x: getattr(x, criteria.sort_column))
 | 
					                query = query.order_by_descending(
 | 
				
			||||||
 | 
					                    lambda x: getattr(x, criteria.sort_column)
 | 
				
			||||||
 | 
					                    if not isinstance(getattr(x, criteria.sort_column), Enum)
 | 
				
			||||||
 | 
					                    else getattr(x, criteria.sort_column).value
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                query = query.order_by(lambda x: getattr(x, criteria.sort_column))
 | 
					                query = query.order_by(
 | 
				
			||||||
 | 
					                    lambda x: getattr(x, criteria.sort_column)
 | 
				
			||||||
 | 
					                    if not isinstance(getattr(x, criteria.sort_column), Enum)
 | 
				
			||||||
 | 
					                    else getattr(x, criteria.sort_column).value
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        result = FilteredResult()
 | 
					        result = FilteredResult()
 | 
				
			||||||
        result.total_count = query.count()
 | 
					        result.total_count = query.count()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.database.context import DatabaseContextABC
 | 
					from cpl_core.database.context import DatabaseContextABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,23 +64,25 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC):
 | 
				
			|||||||
            result[11],
 | 
					            result[11],
 | 
				
			||||||
            result[12],
 | 
					            result[12],
 | 
				
			||||||
            result[13],
 | 
					            result[13],
 | 
				
			||||||
            self._servers.get_server_by_id(result[14]),
 | 
					            result[14],
 | 
				
			||||||
            self._get_afk_channel_ids(result[14]),
 | 
					            json.loads(result[15]),
 | 
				
			||||||
            self._get_team_role_ids(result[14]),
 | 
					            self._servers.get_server_by_id(result[16]),
 | 
				
			||||||
            result[15],
 | 
					            self._get_afk_channel_ids(result[16]),
 | 
				
			||||||
            result[16],
 | 
					            self._get_team_role_ids(result[16]),
 | 
				
			||||||
 | 
					            result[17],
 | 
				
			||||||
 | 
					            result[18],
 | 
				
			||||||
            id=result[0],
 | 
					            id=result[0],
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def does_server_config_exists(self, server_id: int) -> bool:
 | 
					    def does_server_config_exists(self, server_id: int) -> bool:
 | 
				
			||||||
        self._logger.trace(__name__, f"Send SQL command: {ServerConfig.get_select_by_id_string(server_id)}")
 | 
					        self._logger.trace(__name__, f"Send SQL command: {ServerConfig.get_select_by_server_id_string(server_id)}")
 | 
				
			||||||
        result = self._context.select(ServerConfig.get_select_by_id_string(server_id))
 | 
					        result = self._context.select(ServerConfig.get_select_by_server_id_string(server_id))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return len(result) > 0
 | 
					        return len(result) > 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_server_config_by_server(self, server_id: int) -> ServerConfig:
 | 
					    def get_server_config_by_server(self, server_id: int) -> ServerConfig:
 | 
				
			||||||
        self._logger.trace(__name__, f"Send SQL command: {ServerConfig.get_select_by_id_string(server_id)}")
 | 
					        self._logger.trace(__name__, f"Send SQL command: {ServerConfig.get_select_by_server_id_string(server_id)}")
 | 
				
			||||||
        result = self._context.select(ServerConfig.get_select_by_id_string(server_id))[0]
 | 
					        result = self._context.select(ServerConfig.get_select_by_server_id_string(server_id))[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return self._from_result(result)
 | 
					        return self._from_result(result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,6 +48,7 @@ class ServerConfigSeeder(DataSeederABC):
 | 
				
			|||||||
                    guild.system_channel.id,
 | 
					                    guild.system_channel.id,
 | 
				
			||||||
                    guild.system_channel.id,
 | 
					                    guild.system_channel.id,
 | 
				
			||||||
                    guild.system_channel.id,
 | 
					                    guild.system_channel.id,
 | 
				
			||||||
 | 
					                    {},
 | 
				
			||||||
                    server,
 | 
					                    server,
 | 
				
			||||||
                    [],
 | 
					                    [],
 | 
				
			||||||
                    [],
 | 
					                    [],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.database.context import DatabaseContextABC
 | 
					from cpl_core.database.context import DatabaseContextABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,10 +43,11 @@ class TechnicianConfigRepositoryService(TechnicianConfigRepositoryABC):
 | 
				
			|||||||
            result[2],
 | 
					            result[2],
 | 
				
			||||||
            result[3],
 | 
					            result[3],
 | 
				
			||||||
            result[4],
 | 
					            result[4],
 | 
				
			||||||
 | 
					            json.loads(result[5]),
 | 
				
			||||||
            self._get_technician_ids(),
 | 
					            self._get_technician_ids(),
 | 
				
			||||||
            self._get_technician_ping_urls(),
 | 
					            self._get_technician_ping_urls(),
 | 
				
			||||||
            result[5],
 | 
					 | 
				
			||||||
            result[6],
 | 
					            result[6],
 | 
				
			||||||
 | 
					            result[7],
 | 
				
			||||||
            id=result[0],
 | 
					            id=result[0],
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ class TechnicianConfigSeeder(DataSeederABC):
 | 
				
			|||||||
                8,
 | 
					                8,
 | 
				
			||||||
                8,
 | 
					                8,
 | 
				
			||||||
                1000000,
 | 
					                1000000,
 | 
				
			||||||
 | 
					                {},
 | 
				
			||||||
                List(int, [240160344557879316]),
 | 
					                List(int, [240160344557879316]),
 | 
				
			||||||
                List(str, ["www.google.com", "www.sh-edraft.de", "www.keksdose-gaming.de"]),
 | 
					                List(str, ["www.google.com", "www.sh-edraft.de", "www.keksdose-gaming.de"]),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql.abc"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,12 +2,15 @@ from typing import Callable
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from ariadne import ObjectType
 | 
					from ariadne import ObjectType
 | 
				
			||||||
from cpl_core.dependency_injection import ServiceProviderABC
 | 
					from cpl_core.dependency_injection import ServiceProviderABC
 | 
				
			||||||
 | 
					from cpl_core.type import T
 | 
				
			||||||
from cpl_discord.service import DiscordBotServiceABC
 | 
					from cpl_discord.service import DiscordBotServiceABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from bot_api.exception.service_error_code_enum import ServiceErrorCode
 | 
					from bot_api.exception.service_error_code_enum import ServiceErrorCode
 | 
				
			||||||
from bot_api.exception.service_exception import ServiceException
 | 
					from bot_api.exception.service_exception import ServiceException
 | 
				
			||||||
from bot_api.route.route import Route
 | 
					from bot_api.route.route import Route
 | 
				
			||||||
 | 
					from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
				
			||||||
 | 
					from bot_data.model.achievement import Achievement
 | 
				
			||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
 | 
					from bot_data.model.auth_role_enum import AuthRoleEnum
 | 
				
			||||||
from bot_data.model.auth_user import AuthUser
 | 
					from bot_data.model.auth_user import AuthUser
 | 
				
			||||||
from bot_data.model.auto_role import AutoRole
 | 
					from bot_data.model.auto_role import AutoRole
 | 
				
			||||||
@@ -16,6 +19,7 @@ from bot_data.model.client import Client
 | 
				
			|||||||
from bot_data.model.known_user import KnownUser
 | 
					from bot_data.model.known_user import KnownUser
 | 
				
			||||||
from bot_data.model.level import Level
 | 
					from bot_data.model.level import Level
 | 
				
			||||||
from bot_data.model.server import Server
 | 
					from bot_data.model.server import Server
 | 
				
			||||||
 | 
					from bot_data.model.server_config import ServerConfig
 | 
				
			||||||
from bot_data.model.user import User
 | 
					from bot_data.model.user import User
 | 
				
			||||||
from bot_data.model.user_joined_game_server import UserJoinedGameServer
 | 
					from bot_data.model.user_joined_game_server import UserJoinedGameServer
 | 
				
			||||||
from bot_data.model.user_joined_server import UserJoinedServer
 | 
					from bot_data.model.user_joined_server import UserJoinedServer
 | 
				
			||||||
@@ -65,13 +69,27 @@ class QueryABC(ObjectType):
 | 
				
			|||||||
        self.set_field(f"{name}s", wrapper)
 | 
					        self.set_field(f"{name}s", wrapper)
 | 
				
			||||||
        self.set_field(f"{name}Count", lambda *args: wrapper(*args).count())
 | 
					        self.set_field(f"{name}Count", lambda *args: wrapper(*args).count())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ServiceProviderABC.inject
 | 
					    def _can_user_see_element(self, user: AuthUser, element: T) -> bool:
 | 
				
			||||||
    def _can_user_see_element(self, user: AuthUser, element, services: ServiceProviderABC) -> bool:
 | 
					        @ServiceProviderABC.inject
 | 
				
			||||||
 | 
					        def get_services(services: ServiceProviderABC) -> ServiceProviderABC:
 | 
				
			||||||
 | 
					            return services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        services = get_services()
 | 
				
			||||||
        permissions: PermissionService = services.get_service(PermissionService)
 | 
					        permissions: PermissionService = services.get_service(PermissionService)
 | 
				
			||||||
        bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
 | 
					        bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        access = False
 | 
					        access = False
 | 
				
			||||||
        if type(element) == AutoRole:
 | 
					        if type(element) == Achievement:
 | 
				
			||||||
 | 
					            element: Achievement = element
 | 
				
			||||||
 | 
					            for u in user.users:
 | 
				
			||||||
 | 
					                u: User = u
 | 
				
			||||||
 | 
					                guild = bot.get_guild(u.server.discord_id)
 | 
				
			||||||
 | 
					                member = guild.get_member(u.discord_id)
 | 
				
			||||||
 | 
					                if permissions.is_member_moderator(member) and u.server.id == element.server.id:
 | 
				
			||||||
 | 
					                    access = True
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        elif type(element) == AutoRole:
 | 
				
			||||||
            element: AutoRole = element
 | 
					            element: AutoRole = element
 | 
				
			||||||
            for u in user.users:
 | 
					            for u in user.users:
 | 
				
			||||||
                u: User = u
 | 
					                u: User = u
 | 
				
			||||||
@@ -82,12 +100,12 @@ class QueryABC(ObjectType):
 | 
				
			|||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        elif type(element) == AutoRoleRule:
 | 
					        elif type(element) == AutoRoleRule:
 | 
				
			||||||
            element: AutoRole = element
 | 
					            element: AutoRoleRule = element
 | 
				
			||||||
            for u in user.users:
 | 
					            for u in user.users:
 | 
				
			||||||
                u: User = u
 | 
					                u: User = u
 | 
				
			||||||
                guild = bot.get_guild(u.server.discord_id)
 | 
					                guild = bot.get_guild(u.server.discord_id)
 | 
				
			||||||
                member = guild.get_member(u.discord_id)
 | 
					                member = guild.get_member(u.discord_id)
 | 
				
			||||||
                if permissions.is_member_moderator(member) and u.server.id == element.server.id:
 | 
					                if permissions.is_member_moderator(member) and u.server.id == element.auto_role.server.id:
 | 
				
			||||||
                    access = True
 | 
					                    access = True
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -157,6 +175,24 @@ class QueryABC(ObjectType):
 | 
				
			|||||||
                    access = True
 | 
					                    access = True
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        elif type(element) == ServerConfig:
 | 
				
			||||||
 | 
					            for u in user.users:
 | 
				
			||||||
 | 
					                u: User = u
 | 
				
			||||||
 | 
					                guild = bot.get_guild(u.server.discord_id)
 | 
				
			||||||
 | 
					                member = guild.get_member(u.discord_id)
 | 
				
			||||||
 | 
					                if permissions.is_member_technician(member):
 | 
				
			||||||
 | 
					                    access = True
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        elif type(element) == dict and "key" in element and element["key"] in [e.value for e in FeatureFlagsEnum]:
 | 
				
			||||||
 | 
					            for u in user.users:
 | 
				
			||||||
 | 
					                u: User = u
 | 
				
			||||||
 | 
					                guild = bot.get_guild(u.server.discord_id)
 | 
				
			||||||
 | 
					                member = guild.get_member(u.discord_id)
 | 
				
			||||||
 | 
					                if permissions.is_member_technician(member):
 | 
				
			||||||
 | 
					                    access = True
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return access
 | 
					        return access
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ServiceProviderABC.inject
 | 
					    @ServiceProviderABC.inject
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
    "Name": "bot-data",
 | 
					    "Name": "bot-data",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "1",
 | 
					      "Major": "1",
 | 
				
			||||||
      "Minor": "0",
 | 
					      "Minor": "1",
 | 
				
			||||||
      "Micro": "7"
 | 
					      "Micro": "3"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
					    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql.filter"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								kdb-bot/src/bot_graphql/graphql/discord.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								kdb-bot/src/bot_graphql/graphql/discord.gql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					type Discord {
 | 
				
			||||||
 | 
					    guilds(filter: GuildFilter): [Guild]
 | 
				
			||||||
 | 
					    users(filter: DiscordUserFilter): [DiscordUser]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Guild {
 | 
				
			||||||
 | 
					    id: ID
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    channels(filter: ChannelFilter): [Channel]
 | 
				
			||||||
 | 
					    roles: [Role]
 | 
				
			||||||
 | 
					    emojis: [Emoji]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input GuildFilter {
 | 
				
			||||||
 | 
					    id: ID
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Channel {
 | 
				
			||||||
 | 
					    id: String
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					    type: String
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input ChannelFilter {
 | 
				
			||||||
 | 
					    id: String
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					    type: String
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Role {
 | 
				
			||||||
 | 
					    id: String
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DiscordUser {
 | 
				
			||||||
 | 
					    id: String
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					    bot: Boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input DiscordUserFilter {
 | 
				
			||||||
 | 
					    id: ID
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					    bot: Boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Emoji {
 | 
				
			||||||
 | 
					    id: String
 | 
				
			||||||
 | 
					    name: String
 | 
				
			||||||
 | 
					    url: String
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								kdb-bot/src/bot_graphql/graphql/featureFlags.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								kdb-bot/src/bot_graphql/graphql/featureFlags.gql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					type FeatureFlag {
 | 
				
			||||||
 | 
					    key: String
 | 
				
			||||||
 | 
					    value: Boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input FeatureFlagInput {
 | 
				
			||||||
 | 
					    key: String
 | 
				
			||||||
 | 
					    value: Boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -38,6 +38,6 @@ type Query {
 | 
				
			|||||||
    achievementOperators: [String]
 | 
					    achievementOperators: [String]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    technicianConfig: TechnicianConfig
 | 
					    technicianConfig: TechnicianConfig
 | 
				
			||||||
 | 
					    possibleFeatureFlags: [String]
 | 
				
			||||||
    guilds(filter: GuildFilter): [Guild]
 | 
					    discord: Discord
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -13,6 +13,9 @@ type ServerConfig implements TableWithHistoryQuery {
 | 
				
			|||||||
    helpVoiceChannelId: String
 | 
					    helpVoiceChannelId: String
 | 
				
			||||||
    teamChannelId: String
 | 
					    teamChannelId: String
 | 
				
			||||||
    loginMessageChannelId: String
 | 
					    loginMessageChannelId: String
 | 
				
			||||||
 | 
					    defaultRoleId: String
 | 
				
			||||||
 | 
					    featureFlagCount: Int
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlag]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    afkChannelIds: [String]
 | 
					    afkChannelIds: [String]
 | 
				
			||||||
    moderatorRoleIds: [String]
 | 
					    moderatorRoleIds: [String]
 | 
				
			||||||
@@ -41,6 +44,9 @@ type ServerConfigHistory implements HistoryTableQuery {
 | 
				
			|||||||
    helpVoiceChannelId: String
 | 
					    helpVoiceChannelId: String
 | 
				
			||||||
    teamChannelId: String
 | 
					    teamChannelId: String
 | 
				
			||||||
    loginMessageChannelId: String
 | 
					    loginMessageChannelId: String
 | 
				
			||||||
 | 
					    defaultRoleId: String
 | 
				
			||||||
 | 
					    featureFlagCount: Int
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlag]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serverId: ID
 | 
					    serverId: ID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,6 +93,8 @@ input ServerConfigInput {
 | 
				
			|||||||
    helpVoiceChannelId: String
 | 
					    helpVoiceChannelId: String
 | 
				
			||||||
    teamChannelId: String
 | 
					    teamChannelId: String
 | 
				
			||||||
    loginMessageChannelId: String
 | 
					    loginMessageChannelId: String
 | 
				
			||||||
 | 
					    defaultRoleId: String
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlagInput]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    afkChannelIds: [String]
 | 
					    afkChannelIds: [String]
 | 
				
			||||||
    moderatorRoleIds: [String]
 | 
					    moderatorRoleIds: [String]
 | 
				
			||||||
@@ -4,6 +4,8 @@ type TechnicianConfig implements TableWithHistoryQuery {
 | 
				
			|||||||
    waitForRestart: Int
 | 
					    waitForRestart: Int
 | 
				
			||||||
    waitForShutdown: Int
 | 
					    waitForShutdown: Int
 | 
				
			||||||
    cacheMaxMessages: Int
 | 
					    cacheMaxMessages: Int
 | 
				
			||||||
 | 
					    featureFlagCount: Int
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlag]
 | 
				
			||||||
    pingURLs: [String]
 | 
					    pingURLs: [String]
 | 
				
			||||||
    technicianIds: [String]
 | 
					    technicianIds: [String]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,6 +23,8 @@ type TechnicianConfigHistory implements HistoryTableQuery {
 | 
				
			|||||||
    waitForRestart: Int
 | 
					    waitForRestart: Int
 | 
				
			||||||
    waitForShutdown: Int
 | 
					    waitForShutdown: Int
 | 
				
			||||||
    cacheMaxMessages: Int
 | 
					    cacheMaxMessages: Int
 | 
				
			||||||
 | 
					    featureFlagCount: Int
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlag]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    deleted: Boolean
 | 
					    deleted: Boolean
 | 
				
			||||||
    dateFrom: String
 | 
					    dateFrom: String
 | 
				
			||||||
@@ -55,6 +59,7 @@ input TechnicianConfigInput {
 | 
				
			|||||||
    waitForRestart: Int
 | 
					    waitForRestart: Int
 | 
				
			||||||
    waitForShutdown: Int
 | 
					    waitForShutdown: Int
 | 
				
			||||||
    cacheMaxMessages: Int
 | 
					    cacheMaxMessages: Int
 | 
				
			||||||
 | 
					    featureFlags: [FeatureFlagInput]
 | 
				
			||||||
    pingURLs: [String]
 | 
					    pingURLs: [String]
 | 
				
			||||||
    technicianIds: [String]
 | 
					    technicianIds: [String]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -37,6 +37,12 @@ from bot_graphql.queries.auto_role_rule_history_query import AutoRoleRuleHistory
 | 
				
			|||||||
from bot_graphql.queries.auto_role_rule_query import AutoRoleRuleQuery
 | 
					from bot_graphql.queries.auto_role_rule_query import AutoRoleRuleQuery
 | 
				
			||||||
from bot_graphql.queries.client_history_query import ClientHistoryQuery
 | 
					from bot_graphql.queries.client_history_query import ClientHistoryQuery
 | 
				
			||||||
from bot_graphql.queries.client_query import ClientQuery
 | 
					from bot_graphql.queries.client_query import ClientQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.channel_query import ChannelQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.discord_query import DiscordQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.discord_user_query import DiscordUserQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.emoji_query import EmojiQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.guild_query import GuildQuery
 | 
				
			||||||
 | 
					from bot_graphql.queries.discord.role_query import RoleQuery
 | 
				
			||||||
from bot_graphql.queries.game_server_query import GameServerQuery
 | 
					from bot_graphql.queries.game_server_query import GameServerQuery
 | 
				
			||||||
from bot_graphql.queries.known_user_history_query import KnownUserHistoryQuery
 | 
					from bot_graphql.queries.known_user_history_query import KnownUserHistoryQuery
 | 
				
			||||||
from bot_graphql.queries.known_user_query import KnownUserQuery
 | 
					from bot_graphql.queries.known_user_query import KnownUserQuery
 | 
				
			||||||
@@ -105,6 +111,13 @@ class GraphQLModule(ModuleABC):
 | 
				
			|||||||
        services.add_transient(QueryABC, UserJoinedGameServerHistoryQuery)
 | 
					        services.add_transient(QueryABC, UserJoinedGameServerHistoryQuery)
 | 
				
			||||||
        services.add_transient(QueryABC, UserJoinedGameServerQuery)
 | 
					        services.add_transient(QueryABC, UserJoinedGameServerQuery)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, DiscordQuery)
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, GuildQuery)
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, ChannelQuery)
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, RoleQuery)
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, EmojiQuery)
 | 
				
			||||||
 | 
					        services.add_transient(QueryABC, DiscordUserQuery)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # filters
 | 
					        # filters
 | 
				
			||||||
        services.add_transient(FilterABC, AutoRoleFilter)
 | 
					        services.add_transient(FilterABC, AutoRoleFilter)
 | 
				
			||||||
        services.add_transient(FilterABC, AutoRoleRuleFilter)
 | 
					        services.add_transient(FilterABC, AutoRoleRuleFilter)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								kdb-bot/src/bot_graphql/model/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kdb-bot/src/bot_graphql/model/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					bot Keksdose bot
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Discord bot  for the Keksdose discord Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:copyright: (c) 2022 - 2023 sh-edraft.de
 | 
				
			||||||
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__title__ = "bot_graphql.model"
 | 
				
			||||||
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
 | 
					__license__ = "MIT"
 | 
				
			||||||
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
@@ -1,29 +0,0 @@
 | 
				
			|||||||
type Guild {
 | 
					 | 
				
			||||||
    id: ID
 | 
					 | 
				
			||||||
    name: String
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    channels: [Channel]
 | 
					 | 
				
			||||||
    roles: [Role]
 | 
					 | 
				
			||||||
    emojis: [Emoji]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
input GuildFilter {
 | 
					 | 
				
			||||||
    id: ID
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Channel {
 | 
					 | 
				
			||||||
    id: String
 | 
					 | 
				
			||||||
    name: String
 | 
					 | 
				
			||||||
    type: String
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Role {
 | 
					 | 
				
			||||||
    id: String
 | 
					 | 
				
			||||||
    name: String
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Emoji {
 | 
					 | 
				
			||||||
    id: String
 | 
					 | 
				
			||||||
    name: String
 | 
					 | 
				
			||||||
    url: String
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								kdb-bot/src/bot_graphql/model/discord.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								kdb-bot/src/bot_graphql/model/discord.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					from discord import Guild, User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Discord:
 | 
				
			||||||
 | 
					    def __init__(self, guilds: List[Guild], users: List[User]):
 | 
				
			||||||
 | 
					        self._guilds = guilds
 | 
				
			||||||
 | 
					        self._users = users
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def guilds(self) -> List[Guild]:
 | 
				
			||||||
 | 
					        return self._guilds
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def users(self) -> List[User]:
 | 
				
			||||||
 | 
					        return self._users
 | 
				
			||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql.mutations"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,8 @@ from cpl_discord.service import DiscordBotServiceABC
 | 
				
			|||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from bot_api.logging.api_logger import ApiLogger
 | 
					from bot_api.logging.api_logger import ApiLogger
 | 
				
			||||||
 | 
					from bot_api.route.route import Route
 | 
				
			||||||
 | 
					from bot_core.service.config_service import ConfigService
 | 
				
			||||||
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
 | 
					from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
 | 
				
			||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
					from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
				
			||||||
from bot_data.model.server_afk_channel_ids_config import ServerAFKChannelIdsConfig
 | 
					from bot_data.model.server_afk_channel_ids_config import ServerAFKChannelIdsConfig
 | 
				
			||||||
@@ -11,6 +13,7 @@ from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
 | 
				
			|||||||
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
 | 
					from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
 | 
				
			||||||
from bot_data.model.user_role_enum import UserRoleEnum
 | 
					from bot_data.model.user_role_enum import UserRoleEnum
 | 
				
			||||||
from bot_graphql.abc.query_abc import QueryABC
 | 
					from bot_graphql.abc.query_abc import QueryABC
 | 
				
			||||||
 | 
					from modules.permission.abc.permission_service_abc import PermissionServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServerConfigMutation(QueryABC):
 | 
					class ServerConfigMutation(QueryABC):
 | 
				
			||||||
@@ -21,6 +24,8 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
        servers: ServerRepositoryABC,
 | 
					        servers: ServerRepositoryABC,
 | 
				
			||||||
        server_configs: ServerConfigRepositoryABC,
 | 
					        server_configs: ServerConfigRepositoryABC,
 | 
				
			||||||
        db: DatabaseContextABC,
 | 
					        db: DatabaseContextABC,
 | 
				
			||||||
 | 
					        config_service: ConfigService,
 | 
				
			||||||
 | 
					        permissions: PermissionServiceABC,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        QueryABC.__init__(self, "ServerConfigMutation")
 | 
					        QueryABC.__init__(self, "ServerConfigMutation")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,6 +34,8 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
        self._servers = servers
 | 
					        self._servers = servers
 | 
				
			||||||
        self._server_configs = server_configs
 | 
					        self._server_configs = server_configs
 | 
				
			||||||
        self._db = db
 | 
					        self._db = db
 | 
				
			||||||
 | 
					        self._config_service = config_service
 | 
				
			||||||
 | 
					        self._permissions = permissions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.set_field("updateServerConfig", self.resolve_update_server_config)
 | 
					        self.set_field("updateServerConfig", self.resolve_update_server_config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,8 +43,8 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
        if "id" not in input:
 | 
					        if "id" not in input:
 | 
				
			||||||
            raise ValueError("Id not set")
 | 
					            raise ValueError("Id not set")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        server_config = self._server_configs.get_server_config_by_server(input["id"])
 | 
					        server_config = self._server_configs.get_server_config_by_id(int(input["id"]))
 | 
				
			||||||
        self._can_user_mutate_data(server_config, UserRoleEnum.admin)
 | 
					        self._can_user_mutate_data(Route.get_user().users[0].server, UserRoleEnum.technician)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        server_config.message_delete_timer = (
 | 
					        server_config.message_delete_timer = (
 | 
				
			||||||
            input["messageDeleteTimer"] if "messageDeleteTimer" in input else server_config.message_delete_timer
 | 
					            input["messageDeleteTimer"] if "messageDeleteTimer" in input else server_config.message_delete_timer
 | 
				
			||||||
@@ -82,6 +89,14 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
            if "loginMessageChannelId" in input
 | 
					            if "loginMessageChannelId" in input
 | 
				
			||||||
            else server_config.login_message_channel_id
 | 
					            else server_config.login_message_channel_id
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        server_config.default_role_id = (
 | 
				
			||||||
 | 
					            input["defaultRoleId"] if "defaultRoleId" in input else server_config.default_role_id
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        server_config.feature_flags = (
 | 
				
			||||||
 | 
					            dict(zip([x["key"] for x in input["featureFlags"]], [x["value"] for x in input["featureFlags"]]))
 | 
				
			||||||
 | 
					            if "featureFlags" in input
 | 
				
			||||||
 | 
					            else server_config.feature_flags
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        server_config.afk_channel_ids = (
 | 
					        server_config.afk_channel_ids = (
 | 
				
			||||||
            List(int).extend([int(x) for x in input["afkChannelIds"]])
 | 
					            List(int).extend([int(x) for x in input["afkChannelIds"]])
 | 
				
			||||||
            if "afkChannelIds" in input
 | 
					            if "afkChannelIds" in input
 | 
				
			||||||
@@ -125,7 +140,7 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
        return server_config
 | 
					        return server_config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _update_afk_channel_ids(self, new_config: ServerConfig):
 | 
					    def _update_afk_channel_ids(self, new_config: ServerConfig):
 | 
				
			||||||
        old_config = self._server_configs.get_server_config_by_id(new_config.server.id)
 | 
					        old_config = self._server_configs.get_server_config_by_server(new_config.server.id)
 | 
				
			||||||
        for channel_id in old_config.afk_channel_ids:
 | 
					        for channel_id in old_config.afk_channel_ids:
 | 
				
			||||||
            if channel_id in new_config.afk_channel_ids:
 | 
					            if channel_id in new_config.afk_channel_ids:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
@@ -143,7 +158,7 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _update_team_role_ids(self, new_config: ServerConfig):
 | 
					    def _update_team_role_ids(self, new_config: ServerConfig):
 | 
				
			||||||
        old_config = self._server_configs.get_server_config_by_id(new_config.server.id)
 | 
					        old_config = self._server_configs.get_server_config_by_server(new_config.server.id)
 | 
				
			||||||
        for role_id in old_config.team_role_ids:
 | 
					        for role_id in old_config.team_role_ids:
 | 
				
			||||||
            if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)):
 | 
					            if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)):
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
@@ -161,3 +176,6 @@ class ServerConfigMutation(QueryABC):
 | 
				
			|||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self._server_configs.add_server_team_role_id_config(role_id)
 | 
					            self._server_configs.add_server_team_role_id_config(role_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._bot.loop.create_task(self._config_service.reload_server_config(new_config.server))
 | 
				
			||||||
 | 
					        self._permissions.on_ready()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,8 @@ from cpl_discord.service import DiscordBotServiceABC
 | 
				
			|||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from bot_api.logging.api_logger import ApiLogger
 | 
					from bot_api.logging.api_logger import ApiLogger
 | 
				
			||||||
 | 
					from bot_api.route.route import Route
 | 
				
			||||||
 | 
					from bot_core.service.config_service import ConfigService
 | 
				
			||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
					from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
				
			||||||
from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
 | 
					from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
 | 
				
			||||||
from bot_data.model.technician_config import TechnicianConfig
 | 
					from bot_data.model.technician_config import TechnicianConfig
 | 
				
			||||||
@@ -10,6 +12,7 @@ from bot_data.model.technician_id_config import TechnicianIdConfig
 | 
				
			|||||||
from bot_data.model.technician_ping_url_config import TechnicianPingUrlConfig
 | 
					from bot_data.model.technician_ping_url_config import TechnicianPingUrlConfig
 | 
				
			||||||
from bot_data.model.user_role_enum import UserRoleEnum
 | 
					from bot_data.model.user_role_enum import UserRoleEnum
 | 
				
			||||||
from bot_graphql.abc.query_abc import QueryABC
 | 
					from bot_graphql.abc.query_abc import QueryABC
 | 
				
			||||||
 | 
					from modules.permission.abc.permission_service_abc import PermissionServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TechnicianConfigMutation(QueryABC):
 | 
					class TechnicianConfigMutation(QueryABC):
 | 
				
			||||||
@@ -20,6 +23,8 @@ class TechnicianConfigMutation(QueryABC):
 | 
				
			|||||||
        servers: ServerRepositoryABC,
 | 
					        servers: ServerRepositoryABC,
 | 
				
			||||||
        technician_configs: TechnicianConfigRepositoryABC,
 | 
					        technician_configs: TechnicianConfigRepositoryABC,
 | 
				
			||||||
        db: DatabaseContextABC,
 | 
					        db: DatabaseContextABC,
 | 
				
			||||||
 | 
					        permissions: PermissionServiceABC,
 | 
				
			||||||
 | 
					        config_service: ConfigService,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        QueryABC.__init__(self, "TechnicianConfigMutation")
 | 
					        QueryABC.__init__(self, "TechnicianConfigMutation")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,12 +33,14 @@ class TechnicianConfigMutation(QueryABC):
 | 
				
			|||||||
        self._servers = servers
 | 
					        self._servers = servers
 | 
				
			||||||
        self._technician_configs = technician_configs
 | 
					        self._technician_configs = technician_configs
 | 
				
			||||||
        self._db = db
 | 
					        self._db = db
 | 
				
			||||||
 | 
					        self._permissions = permissions
 | 
				
			||||||
 | 
					        self._config_service = config_service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.set_field("updateTechnicianConfig", self.resolve_update_technician_config)
 | 
					        self.set_field("updateTechnicianConfig", self.resolve_update_technician_config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def resolve_update_technician_config(self, *_, input: dict):
 | 
					    def resolve_update_technician_config(self, *_, input: dict):
 | 
				
			||||||
        technician_config = self._technician_configs.get_technician_config()
 | 
					        technician_config = self._technician_configs.get_technician_config()
 | 
				
			||||||
        self._can_user_mutate_data(technician_config, UserRoleEnum.admin)
 | 
					        self._can_user_mutate_data(Route.get_user().users[0].server, UserRoleEnum.technician)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        technician_config.help_command_reference_url = (
 | 
					        technician_config.help_command_reference_url = (
 | 
				
			||||||
            input["helpCommandReferenceUrl"]
 | 
					            input["helpCommandReferenceUrl"]
 | 
				
			||||||
@@ -49,6 +56,11 @@ class TechnicianConfigMutation(QueryABC):
 | 
				
			|||||||
        technician_config.cache_max_messages = (
 | 
					        technician_config.cache_max_messages = (
 | 
				
			||||||
            input["cacheMaxMessages"] if "cacheMaxMessages" in input else technician_config.cache_max_messages
 | 
					            input["cacheMaxMessages"] if "cacheMaxMessages" in input else technician_config.cache_max_messages
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        technician_config.feature_flags = (
 | 
				
			||||||
 | 
					            dict(zip([x["key"] for x in input["featureFlags"]], [x["value"] for x in input["featureFlags"]]))
 | 
				
			||||||
 | 
					            if "featureFlags" in input
 | 
				
			||||||
 | 
					            else technician_config.feature_flags
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        technician_config.ping_urls = (
 | 
					        technician_config.ping_urls = (
 | 
				
			||||||
            List(str, input["pingURLs"]) if "pingURLs" in input else technician_config.ping_urls
 | 
					            List(str, input["pingURLs"]) if "pingURLs" in input else technician_config.ping_urls
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -100,3 +112,6 @@ class TechnicianConfigMutation(QueryABC):
 | 
				
			|||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self._technician_configs.add_technician_id_config(TechnicianIdConfig(technician_id))
 | 
					            self._technician_configs.add_technician_id_config(TechnicianIdConfig(technician_id))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._bot.loop.create_task(self._config_service.reload_technician_config())
 | 
				
			||||||
 | 
					        self._permissions.on_ready()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql.queries"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ class ClientQuery(DataQueryWithHistoryABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def resolve_received_message_count(client: Client, *_):
 | 
					    def resolve_received_message_count(client: Client, *_):
 | 
				
			||||||
        return client.received_command_count
 | 
					        return client.received_message_count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def resolve_deleted_message_count(client: Client, *_):
 | 
					    def resolve_deleted_message_count(client: Client, *_):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "bot_graphql.queries.discord"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "1.0.7"
 | 
					__version__ = "1.1.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="1", minor="0", micro="7")
 | 
					version_info = VersionInfo(major="1", minor="1", micro="3")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
from bot_graphql.abc.data_query_abc import DataQueryABC
 | 
					from bot_graphql.abc.query_abc import QueryABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ChannelQuery(DataQueryABC):
 | 
					class ChannelQuery(QueryABC):
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        DataQueryABC.__init__(self, "Channel")
 | 
					        QueryABC.__init__(self, "Channel")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.set_field("id", lambda c, *_: c.id)
 | 
					        self.set_field("id", lambda c, *_: c.id)
 | 
				
			||||||
        self.set_field("name", lambda c, *_: c.name)
 | 
					        self.set_field("name", lambda c, *_: c.name)
 | 
				
			||||||
        self.set_field("type", lambda c, *_: type(c))
 | 
					        self.set_field("type", lambda c, *_: type(c).__name__)
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user