97 Commits

Author SHA1 Message Date
e914c7d02b Fixed auth service 2023-09-24 10:39:27 +02:00
b40f521212 Build version 2023-09-24 10:18:54 +02:00
d40ca88cd5 Updated version 2023-09-24 10:17:24 +02:00
1e63baed97 Merge pull request 'Fixed authUser to user link #358' (#359) from #358 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#359
2023-09-24 10:04:41 +02:00
cdfd151851 Fixed authUser to user link #358 2023-09-24 10:04:13 +02:00
12fbc972d9 Fixed mail dev pw 2023-09-19 21:37:31 +02:00
dca939f025 Merge pull request 'Added check with -xp to get_level' (#357) from fix_get_level_with_negative_xp into support
Reviewed-on: sh-edraft.de/kd_discord_bot#357
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
2023-09-10 22:23:33 +02:00
ed9b893c12 Fixed negative xp check 2023-09-10 18:21:30 +02:00
731f80bd5f Fixed negative xp check 2023-09-10 11:14:11 +02:00
85852bf2f0 Added check with -xp to get_level 2023-09-10 11:07:37 +02:00
2c3ef97a14 Updated to swarm 2023-09-03 15:48:40 +02:00
9ec65689ba Merge pull request '1.1.1' (#355) from 1.1.1 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#355
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
2023-08-25 14:15:54 +02:00
44f5de32a5 Merge branch 'support' into 1.1.1 2023-08-25 14:15:38 +02:00
c016d5fc84 Set new version 2023-08-24 17:59:03 +02:00
306ce2664c Build new version 2023-08-24 17:59:03 +02:00
3ce5471ef4 Fixed can user see element for achievements 2023-08-24 17:59:02 +02:00
4cdd6c05bf Merge pull request '1.1.0' (#352) from 1.1.0 into master
Reviewed-on: sh-edraft.de/kd_discord_bot#352
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
2023-08-24 17:50:24 +02:00
d364ea1b4c Fixed achievement voice state #353 2023-08-21 19:00:55 +02:00
6fa08ea828 Fixed minor bugs #1.1.0 2023-08-21 16:25:42 +02:00
296c6e8044 Fixed stuff #1.1.0 2023-08-21 15:51:54 +02:00
0541f3dfde Fixed translations #1.1.0 2023-08-21 15:22:14 +02:00
052e0f976a Build release version #1.1.0 2023-08-21 14:44:11 +02:00
f41dfc9be2 Merge pull request '1.1.0.rc6' (#351) from 1.1.0.rc6 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#351
2023-08-21 14:41:53 +02:00
74437fdc20 Fixed client styling #1.1.0.rc6 2023-08-19 13:06:07 +02:00
df2b660b75 Fixed sidebar to support responsive mode #1.1.0.rc6 2023-08-19 10:04:38 +02:00
12f231aa41 Merge pull request 'Fixed responsive styling #1.1.0.rc5' (#350) from 1.1.0.rc5 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#350
2023-08-18 16:56:11 +02:00
2f3ae229c9 Fixed responsive styling #1.1.0.rc5 2023-08-18 16:50:19 +02:00
5bbed854a4 Merge pull request '1.1.0.rc5' (#349) from 1.1.0.rc5 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#349
2023-08-18 16:34:40 +02:00
2321c12bc9 Fixed auth user table #1.1.0.rc5 2023-08-18 16:33:13 +02:00
1cdfd1291f Fixed add icons #1.1.0.rc5 2023-08-18 16:31:30 +02:00
223946ad76 Fixed auto role rule emoji loading #1.1.0.rc5 2023-08-18 16:10:45 +02:00
4ea1b5b94c Improved table responsive mode #1.1.0.rc5 2023-08-18 16:01:20 +02:00
919970d199 Fixed add new infinity id bug & fixed translations #1.1.0.rc5 2023-08-18 08:26:00 +02:00
19ed164845 Set version correctly #1.1.0.rc5 2023-08-18 08:16:27 +02:00
92001a45be Fixed xp calculation #1.1.0.rc5 2023-08-18 08:09:43 +02:00
78b761a672 Fixed auto role tables #1.1.0.rc5 2023-08-18 08:05:27 +02:00
7bfa39f459 Merge pull request 'Fixed stylings #1.1.0.rc4 style fixes' (#348) from 1.1.0.rc4 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#348
2023-08-18 00:43:56 +02:00
d586cca672 Fixed stylings #1.1.0.rc4 2023-08-18 00:42:58 +02:00
efce172c01 Fixed table responsive mode #1.1.0 2023-08-17 23:50:36 +02:00
0974325148 Reset version #1.1.0 2023-08-17 23:42:41 +02:00
206754919f Merge pull request '1.1.0_responsive' (#347) from 1.1.0_responsive into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#347
2023-08-17 23:38:20 +02:00
b49512e28d Made hole app responsive #1.1.0 2023-08-17 23:36:44 +02:00
fa71759a20 Made dashboard responsive #1.1.0 2023-08-17 22:35:10 +02:00
9338e35504 Merge pull request 'Fixed hidden columns #1.1.0.rc4' (#346) from 1.1.0.rc4 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#346
2023-08-17 21:27:31 +02:00
2956dcb9c2 Fixed hidden columns #1.1.0.rc4 2023-08-17 21:26:18 +02:00
762bebf416 Merge pull request '1.1.0.rc4' (#345) from 1.1.0.rc4 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#345
Closes #344
2023-08-17 21:02:26 +02:00
f3b5cef253 Fixed discord data by guild filter #1.1.0.rc4 2023-08-17 19:58:25 +02:00
6869c5a671 Added coffee command #1.1.0.rc4 2023-08-17 16:18:11 +02:00
352b44be0f Fixed input styling #344 #1.1.0.rc4 2023-08-17 09:56:21 +02:00
5912708d3a Added dropdown to server config input #344 #1.1.0.rc4 2023-08-17 08:52:46 +02:00
45a3127696 Added dropdown to technicianId input #344 #1.1.0.rc4 2023-08-17 08:37:04 +02:00
10c20621a8 Set frontend version #1.1.0.rc4 2023-08-16 22:31:28 +02:00
49e0e44461 Build rc4 version #1.1.0.rc4 2023-08-16 22:30:51 +02:00
ec6b080ba6 Set rc4 version #1.1.0.rc4 2023-08-16 22:30:37 +02:00
28944755ac Fixed achievement events #1.1.0.rc4 2023-08-16 22:30:12 +02:00
7318239b2d Set frontend version #1.1.0 2023-08-16 22:17:26 +02:00
cf66d246a9 Set rc3 version #1.1.0 2023-08-16 22:16:06 +02:00
41fe6faa52 Build rc3 version #1.1.0 2023-08-16 22:15:38 +02:00
685c96bb38 Set rc3 version #1.1.0 2023-08-16 22:15:05 +02:00
2c3e5268e4 Merge pull request '1.1.0.rc3' (#343) from 1.1.0.rc3 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#343
Closes #339
Closes #338
Closes #340
Closes #337
Closes #341
2023-08-16 22:13:42 +02:00
2d5ce58612 Fixed complaint command #341 #1.1.0.rc3 2023-08-16 22:12:40 +02:00
fe3d67eff5 Fixed client data #337 #1.1.0.rc3 2023-08-16 21:23:03 +02:00
4cea31fce5 Added achievement validation triggers #340 #1.1.0.rc3 2023-08-16 21:20:14 +02:00
aa2c80ec12 Added feature flag checks #338 #1.1.0.rc3 2023-08-16 21:08:34 +02:00
e283a18def Added logic to check server view permissions #339 #1.1.0.rc3 2023-08-16 20:55:42 +02:00
f5b2bec356 Merge pull request '1.1.0.rc2' (#342) from 1.1.0.rc2 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#342
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
2023-08-16 19:09:04 +02:00
c2b32996fd Made form transient #1.1.0.rc2 2023-08-16 18:47:13 +02:00
195566a2b6 Fixed restart command #1.1.0.rc2 2023-08-16 18:38:16 +02:00
073c318671 Fixed achievement server filter #1.1.0.rc2 2023-08-16 18:19:21 +02:00
caeec47b7c Fixed shutdown procedure async problems #1.1.0.rc2 2023-08-16 18:04:40 +02:00
44f6b36347 Fixed achievement_service #1.1.0.rc2 2023-08-16 16:55:29 +02:00
4e32414f48 Set frontend rc2 #1.1.0.rc2 2023-08-16 16:39:39 +02:00
573c9c999e Build rc2 #1.1.0.rc2 2023-08-16 16:38:54 +02:00
825fcff82d Set rc2 version #1.1.0.rc2 2023-08-16 16:38:37 +02:00
a95bf7bc6c Fixed reference errors #1.1.0.rc2 2023-08-16 16:37:49 +02:00
0bc3bff58e Merge pull request '1.1.0.rc1' (#336) from 1.1.0.rc1 into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#336
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
2023-08-16 16:29:28 +02:00
c3b86fab6b Fixed config #1.1.0.rc1 2023-08-16 09:31:20 +02:00
906602134e Upated config #1.1.0.rc1 2023-08-16 08:59:10 +02:00
30791f7529 Fixed config loading #1.1.0.rc1 2023-08-16 08:47:48 +02:00
456d939b47 Fixed config loading #1.1.0.rc1 2023-08-16 08:30:12 +02:00
1f47636e8d Build rc1 #1.1.0.rc1 2023-08-16 07:55:32 +02:00
f4acc2669d Build rc1 #1.1.0.rc1 2023-08-16 07:43:23 +02:00
46b5757fd1 Merge pull request '#334_feature_flags_in_wi' (#335) from #334_feature_flags_in_wi into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#335
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
Closes #334
2023-08-16 00:03:44 +02:00
1cd75cd78f Hide feature flags in server config for non technicians #334 2023-08-16 00:02:04 +02:00
f7f3fea7a7 Improved feature flag defaults #334 2023-08-15 23:44:42 +02:00
5dd2000f10 Improved feature flag for server handling #334 2023-08-15 23:41:45 +02:00
1b2bb85b37 Improved feature flag for server handling #334 2023-08-15 23:24:29 +02:00
113b188a40 Reload config after change #334 2023-08-15 22:16:44 +02:00
e549341196 Secured config endpoints #334 2023-08-15 21:50:37 +02:00
8a0d939147 Added feature flags to server config #334 2023-08-15 20:50:11 +02:00
4b57d7f102 Added feature flags config to technician settings #334 2023-08-15 20:29:44 +02:00
02e0c72a80 Merge pull request '#79_hide_table_columns' (#333) from #79_hide_table_columns into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#333
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
Closes #79
2023-08-15 12:50:15 +02:00
bfc9979961 Added option to hide columns to all tables #79 2023-08-15 12:16:24 +02:00
8d76f79732 Hide members columns #79 2023-08-15 08:14:45 +02:00
4add293186 Added base logic to hide columns & added hide columns to levels #79 2023-08-14 23:33:02 +02:00
1fc5ef76a6 Merge pull request 'Added filter to mass_move channel_from #296' (#332) from #296_mass_move_filter into 1.1.0
Reviewed-on: sh-edraft.de/kd_discord_bot#332
Reviewed-by: edraft-dev <dev.sven.heidemann@sh-edraft.de>
Closes #296
2023-08-14 21:01:03 +02:00
e6c9959381 Added filter to mass_move channel_from #296 2023-08-14 20:57:59 +02:00
256 changed files with 3000 additions and 855 deletions

View File

@@ -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",

View File

@@ -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.2"
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="2")

View File

@@ -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)

View File

@@ -3,8 +3,8 @@
"Name": "bot", "Name": "bot",
"Version": { "Version": {
"Major": "1", "Major": "1",
"Minor": "0", "Minor": "1",
"Micro": "7" "Micro": "2"
}, },
"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",

View File

@@ -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.2"
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="2")

View File

@@ -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)

View File

@@ -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,

View File

@@ -9,6 +9,7 @@ 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.initial_migration import InitialMigration from bot_data.migration.initial_migration import InitialMigration
@@ -46,3 +47,4 @@ 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

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -3,8 +3,8 @@
"Name": "bot-api", "Name": "bot-api",
"Version": { "Version": {
"Major": "1", "Major": "1",
"Minor": "0", "Minor": "1",
"Micro": "7" "Micro": "2"
}, },
"Author": "", "Author": "",
"AuthorEmail": "", "AuthorEmail": "",

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -3,8 +3,8 @@
"Name": "bot-core", "Name": "bot-core",
"Version": { "Version": {
"Major": "1", "Major": "1",
"Minor": "0", "Minor": "1",
"Micro": "7" "Micro": "2"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -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.2"
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="2")

View File

@@ -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"

View File

@@ -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

View File

@@ -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.2"
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="2")

View File

@@ -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)

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View 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()

View File

@@ -291,7 +291,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 +356,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,9 +380,9 @@ 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_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
@@ -393,4 +393,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()

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -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

View File

@@ -3,8 +3,8 @@
"Name": "bot-data", "Name": "bot-data",
"Version": { "Version": {
"Major": "1", "Major": "1",
"Minor": "0", "Minor": "1",
"Micro": "7" "Micro": "2"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -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.2"
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="2")

View File

@@ -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;")

View File

@@ -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`;")

View File

@@ -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.2"
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="2")

View File

@@ -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(

View File

@@ -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,7 @@ 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,
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 +48,7 @@ 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._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 +165,14 @@ 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 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 +237,7 @@ class ServerConfig(TableABC, ConfigurationModelABC):
`HelpVoiceChannelId`, `HelpVoiceChannelId`,
`TeamChannelId`, `TeamChannelId`,
`LoginMessageChannelId`, `LoginMessageChannelId`,
`FeatureFlags`,
`ServerId` `ServerId`
) VALUES ( ) VALUES (
{self._message_delete_timer}, {self._message_delete_timer},
@@ -240,6 +253,7 @@ 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},
'{json.dumps(self._feature_flags)}',
{self._server.id} {self._server.id}
); );
""" """
@@ -263,6 +277,7 @@ 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},
`FeatureFlags` = '{json.dumps(self._feature_flags)}',
`ServerId` = {self._server.id} `ServerId` = {self._server.id}
WHERE `Id` = {self._id}; WHERE `Id` = {self._id};
""" """

View File

@@ -17,6 +17,7 @@ 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,
feature_flags: dict[str],
server_id: int, server_id: int,
deleted: bool, deleted: bool,
date_from: str, date_from: str,
@@ -39,6 +40,7 @@ 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._feature_flags = feature_flags
self._server_id = server_id self._server_id = server_id
self._deleted = deleted self._deleted = deleted
@@ -97,6 +99,10 @@ 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 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

View File

@@ -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};
""" """
) )

View File

@@ -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)

View File

@@ -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.2"
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="2")

View File

@@ -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))

View File

@@ -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()

View File

@@ -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,24 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC):
result[11], result[11],
result[12], result[12],
result[13], result[13],
self._servers.get_server_by_id(result[14]), json.loads(result[14]),
self._get_afk_channel_ids(result[14]), self._servers.get_server_by_id(result[15]),
self._get_team_role_ids(result[14]), self._get_afk_channel_ids(result[15]),
result[15], self._get_team_role_ids(result[15]),
result[16], result[16],
result[17],
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)

View File

@@ -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,
[], [],
[], [],

View File

@@ -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],
) )

View File

@@ -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"]),
) )

View File

@@ -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.2"
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="2")

View File

@@ -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.2"
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="2")

View File

@@ -9,6 +9,8 @@ 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
@@ -17,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
@@ -66,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())
def _can_user_see_element(self, user: AuthUser, element: T) -> bool:
@ServiceProviderABC.inject @ServiceProviderABC.inject
def _can_user_see_element(self, user: AuthUser, element: T, services: ServiceProviderABC) -> bool: 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
@@ -158,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

View File

@@ -3,8 +3,8 @@
"Name": "bot-data", "Name": "bot-data",
"Version": { "Version": {
"Major": "1", "Major": "1",
"Minor": "0", "Minor": "1",
"Micro": "7" "Micro": "2"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -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.2"
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="2")

View 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
}

View File

@@ -0,0 +1,9 @@
type FeatureFlag {
key: String
value: Boolean
}
input FeatureFlagInput {
key: String
value: Boolean
}

View File

@@ -38,6 +38,6 @@ type Query {
achievementOperators: [String] achievementOperators: [String]
technicianConfig: TechnicianConfig technicianConfig: TechnicianConfig
possibleFeatureFlags: [String]
guilds(filter: GuildFilter): [Guild] discord: Discord
} }

View File

@@ -13,6 +13,8 @@ type ServerConfig implements TableWithHistoryQuery {
helpVoiceChannelId: String helpVoiceChannelId: String
teamChannelId: String teamChannelId: String
loginMessageChannelId: String loginMessageChannelId: String
featureFlagCount: Int
featureFlags: [FeatureFlag]
afkChannelIds: [String] afkChannelIds: [String]
moderatorRoleIds: [String] moderatorRoleIds: [String]
@@ -41,6 +43,8 @@ type ServerConfigHistory implements HistoryTableQuery {
helpVoiceChannelId: String helpVoiceChannelId: String
teamChannelId: String teamChannelId: String
loginMessageChannelId: String loginMessageChannelId: String
featureFlagCount: Int
featureFlags: [FeatureFlag]
serverId: ID serverId: ID
@@ -87,6 +91,7 @@ input ServerConfigInput {
helpVoiceChannelId: String helpVoiceChannelId: String
teamChannelId: String teamChannelId: String
loginMessageChannelId: String loginMessageChannelId: String
featureFlags: [FeatureFlagInput]
afkChannelIds: [String] afkChannelIds: [String]
moderatorRoleIds: [String] moderatorRoleIds: [String]

View File

@@ -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]
} }

View File

@@ -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)

View 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.2"
from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="1", micro="2")

View File

@@ -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
}

View 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

View File

@@ -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.2"
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="2")

View File

@@ -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,11 @@ 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.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 +137,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 +155,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 +173,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()

View File

@@ -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()

View File

@@ -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.2"
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="2")

View File

@@ -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, *_):

View File

@@ -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.2"
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="2")

View File

@@ -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__)

View File

@@ -0,0 +1,48 @@
from cpl_discord.service import DiscordBotServiceABC
from cpl_query.extension import List
from bot_graphql.abc.query_abc import QueryABC
class DiscordQuery(QueryABC):
def __init__(
self,
bot: DiscordBotServiceABC,
):
QueryABC.__init__(self, "Discord")
self._bot = bot
self.set_field("guilds", self._resolve_guilds)
self.set_field("users", self._resolve_users)
def _resolve_guilds(self, *_, filter=None):
guilds = self._bot.guilds
if filter is None:
return guilds
if "id" in filter:
guilds = self._bot.guilds.where(lambda g: g.id == int(filter["id"]))
if "name" in filter:
guilds = self._bot.guilds.where(lambda g: g.name == filter["name"])
return guilds
def _resolve_users(self, *_, filter=None):
users = List(any).extend(self._bot.users)
if filter is None:
return users
if "id" in filter:
users = users.where(lambda g: g.id == int(filter["id"]))
if "name" in filter:
users = users.where(lambda g: g.name == filter["name"])
if "bot" in filter:
users = users.where(lambda g: g.bot == bool(filter["bot"]))
return users

View File

@@ -0,0 +1,10 @@
from bot_graphql.abc.query_abc import QueryABC
class DiscordUserQuery(QueryABC):
def __init__(self):
QueryABC.__init__(self, "DiscordUser")
self.set_field("id", lambda r, *_: r.id)
self.set_field("name", lambda r, *_: r.name)
self.set_field("bot", lambda r, *_: r.bot)

View File

@@ -1,9 +1,9 @@
from bot_graphql.abc.data_query_abc import DataQueryABC from bot_graphql.abc.query_abc import QueryABC
class RoleQuery(DataQueryABC): class EmojiQuery(QueryABC):
def __init__(self): def __init__(self):
DataQueryABC.__init__(self, "Emoji") QueryABC.__init__(self, "Emoji")
self.set_field("id", lambda e, *_: e.id) self.set_field("id", lambda e, *_: e.id)
self.set_field("name", lambda e, *_: e.name) self.set_field("name", lambda e, *_: e.name)

Some files were not shown because too many files have changed in this diff Show More