123 Commits

Author SHA1 Message Date
82058bab0e Merge pull request '1.1.6' (#368) from 1.1.6 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#368
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
2023-09-27 16:32:38 +02:00
a566fca01f Fixed typo 2023-09-27 16:24:08 +02:00
e52f5e4186 Merge pull request '#364' (#365) from #364 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#365
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
Closes #364
2023-09-27 14:50:37 +02:00
c90ede69dd Check feature active in user joined game server mutation 2023-09-27 13:02:57 +02:00
85ba012b6f Merge pull request '#362' (#363) from #362 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#363
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
Closes #362
2023-09-27 12:34:48 +02:00
4cc094576d Fixed auto_complete #367 2023-09-25 22:10:28 +02:00
74ddc238be Added sync commands #367 2023-09-25 22:07:27 +02:00
b53ddb1351 Added logic to list game ident users #366 2023-09-25 20:38:18 +02:00
ca5a6c81b8 Build version #366 2023-09-25 20:38:18 +02:00
7b7bbaea50 Set version #366 2023-09-25 20:38:18 +02:00
d4b40eb52e Build version #364 2023-09-25 18:09:04 +02:00
ed524c2f64 Set version #364 2023-09-25 18:08:15 +02:00
8e3c8459f8 Fixed user joined game server mutation #364 2023-09-25 18:06:58 +02:00
e661ee1489 Merge branch 'support' into #362 2023-09-24 20:33:16 +02:00
9eaeb2df42 Merge pull request '#360' (#361) from #360 into support
Reviewed-on: sh-edraft.de/kd_discord_bot#361
Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com>
Closes #360
2023-09-24 20:33:08 +02:00
481c0f881a Build version #362 2023-09-24 19:59:32 +02:00
a065c703eb Set version #362 2023-09-24 19:59:18 +02:00
f72ea68f66 Fixed channel for get channel name can be None #362 2023-09-24 19:57:51 +02:00
9226a1188e Fixed translation #360 2023-09-24 17:13:19 +02:00
c06cb02cd6 Added logic to set default role #360 2023-09-24 17:05:42 +02:00
20747001b0 Added logic to set default role #360 2023-09-24 17:05:35 +02:00
b4be6b4ac2 Set frontend version #360 2023-09-24 16:45:15 +02:00
bd3dd39dbc Build version #360 2023-09-24 16:44:33 +02:00
9e0905d49e Added default role handling #360 2023-09-24 16:43:28 +02:00
3c0719f50e Added default role to backend #360 2023-09-24 16:19:18 +02:00
77d3668a06 Set version #360 2023-09-24 16:11:56 +02:00
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
272 changed files with 3414 additions and 875 deletions

View File

@@ -11,7 +11,7 @@
"auto-role": "src/modules/auto_role/auto-role.json",
"base": "src/modules/base/base.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",
"level": "src/modules/level/level.json",
"permission": "src/modules/permission/permission.json",

View File

@@ -15,7 +15,7 @@ __title__ = "bot"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -71,7 +71,7 @@ class Application(DiscordBotApplicationABC):
self._api.stop()
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__}")
except Exception as e:
self._logger.error(__name__, "stop failed", e)

View File

@@ -3,8 +3,8 @@
"Name": "bot",
"Version": {
"Major": "1",
"Minor": "0",
"Micro": "7"
"Minor": "1",
"Micro": "6"
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -30,7 +30,8 @@
"requests-oauthlib==1.3.1",
"icmplib==3.0.3",
"ariadne==0.20.1",
"cryptography==41.0.2"
"cryptography==41.0.2",
"discord>=2.3.2"
],
"DevDependencies": [
"cpl-cli==2023.4.0.post3",
@@ -59,9 +60,11 @@
"../bot_core/bot-core.json",
"../bot_data/bot-data.json",
"../bot_graphql/bot-graphql.json",
"../modules/achievements/achievements.json",
"../modules/auto_role/auto-role.json",
"../modules/base/base.json",
"../modules/boot_log/boot-log.json",
"../modules/config/config.json",
"../modules/database/database.json",
"../modules/level/level.json",
"../modules/permission/permission.json",

View File

@@ -15,7 +15,7 @@ __title__ = "bot.extension"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -31,10 +31,10 @@ class Program:
.use_extension(StartupDiscordExtension)
.use_extension(StartupModuleExtension)
.use_extension(StartupMigrationExtension)
.use_extension(DatabaseExtension)
.use_extension(ConfigExtension)
.use_extension(InitBotExtension)
.use_extension(BootLogExtension)
.use_extension(DatabaseExtension)
.use_extension(AppApiExtension)
.use_extension(CoreExtension)
.use_startup(Startup)

View File

@@ -25,8 +25,8 @@ class ModuleList:
[
CoreModule, # has to be first!
DataModule,
ConfigModule, # has to be before db check
DatabaseModule,
ConfigModule, # has be to after db check
GraphQLModule,
PermissionModule,
AutoRoleModule,

View File

@@ -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.auto_role_fix1_migration import AutoRoleFix1Migration
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.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.level_migration import LevelMigration
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, AchievementsMigration) # 14.06.2023 #268 - 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

View File

@@ -21,6 +21,7 @@
}
},
"common": {
"feature_not_activated": "Diese Funktion ist deaktiviert",
"bot_has_no_permission_message": "Ey!!!\nWas soll das?\nIch habe keine Berechtigungen :(\nScheiß System...",
"colors": {
"blue": "Blau",
@@ -170,6 +171,11 @@
"error": {
"nothing_found": "Keine Gameserver gefunden."
},
"list_members": {
"title": "Mitglieder",
"description": "Konfigurierte Mitglieder:",
"users": "Mitglieder"
},
"list": {
"title": "Gameserver",
"description": "Konfigurierte Gameserver:",
@@ -351,6 +357,7 @@
"success": "API-Schlüssel wurde entfernt :D"
}
},
"synced_message": "Der Sync wurde abgeschlossen.",
"log_message": "Hier sind deine Logdateien! :)",
"restart_message": "Bin gleich wieder da :D",
"shutdown_message": "Trauert nicht um mich, es war eine logische Entscheidung. Das Wohl von Vielen, es wiegt schwerer als das Wohl von Wenigen oder eines Einzelnen. Ich war es und ich werde es immer sein, euer Freund. Lebt lange und in Frieden :)"

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.abc"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.configuration"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.controller"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.event"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.exception"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.filter"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.filter.discord"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.logging"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.model"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.model.discord"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.route"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.service"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -494,8 +494,13 @@ class AuthService(AuthServiceABC):
added_user = True
db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
if db_user.users.count() == 0:
members.for_each(lambda x: self._auth_users.add_auth_user_user_rel(AuthUserUsersRelation(db_user, x)))
user_ids = db_user.users.select(lambda x: x.id)
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:
raise ServiceException(ServiceErrorCode.Forbidden, "E-Mail not verified")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_api.transformer"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.abc"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod
from datetime import datetime
from typing import Callable
from typing import Callable, Union
import discord
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
):
pass
@abstractmethod
async def check_default_role(self, member: Union[discord.User, discord.Member]):
pass

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.configuration"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -5,19 +5,20 @@ class FeatureFlagsEnum(Enum):
# modules
achievements_module = "AchievementsModule"
api_module = "ApiModule"
admin_module = "AdminModule"
auto_role_module = "AutoRoleModule"
base_module = "BaseModule"
boot_log_module = "BootLogModule"
core_module = "CoreModule"
core_extension_module = "CoreExtensionModule"
config_module = "ConfigModule"
data_module = "DataModule"
database_module = "DatabaseModule"
level_module = "LevelModule"
moderator_module = "ModeratorModule"
permission_module = "PermissionModule"
config_module = "ConfigModule"
# features
api_only = "ApiOnly"
presence = "Presence"
version_in_presence = "VersionInPresence"
game_server = "GameServer"
sync_xp = "SyncXp"

View File

@@ -8,8 +8,7 @@ class FeatureFlagsSettings(ConfigurationModelABC):
# modules
FeatureFlagsEnum.achievements_module.value: False, # 14.06.2023 #268
FeatureFlagsEnum.api_module.value: False, # 13.10.2022 #70
FeatureFlagsEnum.admin_module.value: False, # 02.10.2022 #48
FeatureFlagsEnum.auto_role_module.value: True, # 03.10.2022 #54
FeatureFlagsEnum.auto_role_module.value: False, # 03.10.2022 #54
FeatureFlagsEnum.base_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
@@ -23,6 +22,8 @@ class FeatureFlagsSettings(ConfigurationModelABC):
FeatureFlagsEnum.api_only.value: False, # 13.10.2022 #70
FeatureFlagsEnum.presence.value: True, # 03.10.2022 #56
FeatureFlagsEnum.version_in_presence.value: False, # 21.03.2023 #253
FeatureFlagsEnum.game_server.value: False, # 25.09.2023 #366
FeatureFlagsEnum.sync_xp.value: False, # 25.09.2023 #366
}
def __init__(self, **kwargs: dict):
@@ -34,6 +35,17 @@ class FeatureFlagsSettings(ConfigurationModelABC):
for flag in [f.value for f in FeatureFlagsEnum]:
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:
if key.value not in self._flags:
return False

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.core_extension"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

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.pipes.date_time_offset_pipe import DateTimeOffsetPipe
from bot_core.service.client_utils_service import ClientUtilsService
from bot_core.service.config_service import ConfigService
from bot_core.service.data_integrity_service import DataIntegrityService
from bot_core.service.message_service import MessageService
@@ -23,6 +24,7 @@ class CoreModule(ModuleABC):
pass
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
services.add_transient(ConfigService)
services.add_transient(MessageServiceABC, MessageService)
services.add_transient(ClientUtilsABC, ClientUtilsService)
services.add_transient(DataIntegrityService)

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.events"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.exception"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.helper"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.logging"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.pipes"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_core.service"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from typing import Callable
from typing import Callable, Union
import discord
from cpl_core.configuration import ConfigurationABC
@@ -218,3 +218,20 @@ class ClientUtilsService(ClientUtilsABC):
f"Cannot add reaction {rule.emoji_name} to message: {discord_message_id}",
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)

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

@@ -6,6 +6,7 @@ from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.service import DiscordBotServiceABC
from bot_core.abc.client_utils_abc import ClientUtilsABC
from bot_core.logging.database_logger import DatabaseLogger
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
from bot_data.abc.client_repository_abc import ClientRepositoryABC
@@ -44,6 +45,7 @@ class DataIntegrityService:
user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
user_joined_gs: UserJoinedGameServerRepositoryABC,
achievement_service: AchievementService,
client_utils: ClientUtilsABC,
dtp: DateTimeOffsetPipe,
):
self._config = config
@@ -60,6 +62,7 @@ class DataIntegrityService:
self._user_joins_vc = user_joins_vc
self._user_joined_gs = user_joined_gs
self._achievements = achievement_service
self._client_utils = client_utils
self._dtp = dtp
self._is_for_shutdown = False
@@ -291,7 +294,7 @@ class DataIntegrityService:
self._user_joins_vc.update_user_joined_voice_channel(join)
if self._is_for_shutdown:
user.xp = round(join.time * settings.xp_per_ontime_hour)
user.xp += round(join.time * settings.xp_per_ontime_hour)
self._users.update_user(user)
self._db_context.save_changes()
@@ -356,14 +359,14 @@ class DataIntegrityService:
self._user_joined_gs.update_user_joined_game_server(join)
if self._is_for_shutdown:
user.xp = round(join.time * settings.xp_per_ontime_hour)
user.xp += round(join.time * settings.xp_per_ontime_hour)
self._users.update_user(user)
self._db_context.save_changes()
except Exception as e:
self._logger.error(__name__, f"Cannot get UserJoinedGameServer", e)
def _check_for_user_achievements(self):
async def _check_for_user_achievements(self):
self._logger.debug(__name__, f"Start checking UserGotAchievement table")
for guild in self._bot.guilds:
@@ -380,12 +383,18 @@ class DataIntegrityService:
if user is None:
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:
self._is_for_shutdown = is_for_shutdown
await self._check_default_role()
self._check_known_users()
self._check_servers()
self._check_clients()
@@ -393,4 +402,4 @@ class DataIntegrityService:
self._check_user_joins()
self._check_user_joins_vc()
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_data.abc"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -14,6 +14,10 @@ class AuthUserRepositoryABC(ABC):
def __init__(self):
pass
@abstractmethod
def get_auth_user_relation_ids(self, auth_user: AuthUser) -> List[int]:
pass
@abstractmethod
def get_all_auth_users(self) -> List[AuthUser]:
pass

View File

@@ -23,7 +23,7 @@ class GameServerRepositoryABC(ABC):
pass
@abstractmethod
def get_game_server_by_api_key_id(self, id: int) -> GameServer:
def get_game_servers_by_api_key_id(self, id: int) -> List[GameServer]:
pass
@abstractmethod

View File

@@ -14,6 +14,10 @@ class UserGameIdentRepositoryABC(ABC):
def get_user_game_idents(self) -> List[UserGameIdent]:
pass
@abstractmethod
def get_user_game_idents_by_game_server_id(self, id: int) -> List[UserGameIdent]:
pass
@abstractmethod
def get_user_game_ident_by_id(self, id: int) -> UserGameIdent:
pass

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "bot_data.migration"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

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):
self._logger.debug(__name__, "Running downgrade")
self._server_downgrade()
self._technician_downgrade()
def _server_downgrade(self):
self._cursor.execute("DROP TABLE `CFG_Server`;")

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

View File

@@ -15,7 +15,7 @@ __title__ = "bot_data.model"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

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
def insert_string(self) -> str:
return str(

View File

@@ -1,9 +1,11 @@
import json
from datetime import datetime
from cpl_core.configuration import ConfigurationModelABC
from cpl_core.database import TableABC
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_team_role_ids_config import ServerTeamRoleIdsConfig
@@ -24,6 +26,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
help_voice_channel_id: int,
team_channel_id: int,
login_message_channel_id: int,
default_role_id: int,
feature_flags: dict[FeatureFlagsEnum],
server: Server,
afk_channel_ids: List[int],
team_role_ids: List[ServerTeamRoleIdsConfig],
@@ -45,6 +49,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
self._help_voice_channel_id = help_voice_channel_id
self._team_channel_id = team_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._afk_channel_ids = afk_channel_ids
self._team_role_ids = team_role_ids
@@ -161,6 +167,22 @@ class ServerConfig(TableABC, ConfigurationModelABC):
def login_message_channel_id(self, value: int):
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
def afk_channel_ids(self) -> List[int]:
return self._afk_channel_ids
@@ -225,6 +247,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
`HelpVoiceChannelId`,
`TeamChannelId`,
`LoginMessageChannelId`,
`DefaultRoleId`,
`FeatureFlags`,
`ServerId`
) VALUES (
{self._message_delete_timer},
@@ -240,6 +264,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
{self._help_voice_channel_id},
{self._team_channel_id},
{self._login_message_channel_id},
{self._default_role_id},
'{json.dumps(self._feature_flags)}',
{self._server.id}
);
"""
@@ -263,6 +289,8 @@ class ServerConfig(TableABC, ConfigurationModelABC):
`HelpVoiceChannelId` = {self._help_voice_channel_id},
`TeamChannelId` = {self._team_channel_id},
`LoginMessageChannelId` = {self._login_message_channel_id},
`DefaultRoleId` = {self._default_role_id},
`FeatureFlags` = '{json.dumps(self._feature_flags)}',
`ServerId` = {self._server.id}
WHERE `Id` = {self._id};
"""

View File

@@ -17,6 +17,8 @@ class ServerConfigHistory(HistoryTableABC):
help_voice_channel_id: int,
team_channel_id: int,
login_message_channel_id: int,
default_role_id: int,
feature_flags: dict[str],
server_id: int,
deleted: bool,
date_from: str,
@@ -39,6 +41,8 @@ class ServerConfigHistory(HistoryTableABC):
self._help_voice_channel_id = help_voice_channel_id
self._team_channel_id = team_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._deleted = deleted
@@ -97,6 +101,14 @@ class ServerConfigHistory(HistoryTableABC):
def login_message_channel_id(self) -> int:
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
def server_id(self) -> int:
return self._server_id

View File

@@ -1,9 +1,12 @@
import json
from datetime import datetime
from cpl_core.configuration import ConfigurationModelABC
from cpl_core.database import TableABC
from cpl_query.extension import List
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
class TechnicianConfig(TableABC, ConfigurationModelABC):
def __init__(
@@ -12,6 +15,7 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
wait_for_restart: int,
wait_for_shutdown: int,
cache_max_messages: int,
feature_flags: dict[FeatureFlagsEnum],
technician_ids: List[int],
ping_urls: List[str],
created_at: datetime = None,
@@ -23,6 +27,7 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
self._wait_for_restart = wait_for_restart
self._wait_for_shutdown = wait_for_shutdown
self._cache_max_messages = cache_max_messages
self._feature_flags = feature_flags
self._technician_ids = technician_ids
self._ping_urls = ping_urls
@@ -66,6 +71,14 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
def cache_max_messages(self, value: int):
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
def technician_ids(self) -> List[int]:
return self._technician_ids
@@ -104,12 +117,13 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
return str(
f"""
INSERT INTO `CFG_Technician` (
`HelpCommandReferenceUrl`, `WaitForRestart`, `WaitForShutdown`, `CacheMaxMessages`
`HelpCommandReferenceUrl`, `WaitForRestart`, `WaitForShutdown`, `CacheMaxMessages`, `FeatureFlags`
) VALUES (
'{self._help_command_reference_url}',
{self._wait_for_restart},
{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}',
`WaitForRestart` = {self._wait_for_restart},
`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};
"""
)

View File

@@ -15,8 +15,8 @@ class User(TableABC):
self,
dc_id: int,
xp: int,
message_count: int,
reaction_count: int,
message_count: int,
server: Optional[Server],
created_at: datetime = None,
modified_at: datetime = None,
@@ -25,8 +25,8 @@ class User(TableABC):
self._user_id = id
self._discord_id = dc_id
self._xp = xp
self._message_count = message_count
self._reaction_count = reaction_count
self._message_count = message_count
self._server = server
TableABC.__init__(self)

View File

@@ -49,6 +49,15 @@ class UserGameIdent(TableABC):
"""
)
@staticmethod
def get_select_by_game_server_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `UserGameIdents`
WHERE `GameServerId` = {id};
"""
)
@staticmethod
def get_select_by_id_string(id: int) -> str:
return str(

View File

@@ -39,7 +39,10 @@ class UserJoinedVoiceChannel(TableABC):
@property
@ServiceProviderABC.inject
def channel_name(self, bot: DiscordBotServiceABC) -> str:
return bot.get_channel(self.channel_id).name
channel = bot.get_channel(self.channel_id)
if channel is None:
return ""
return channel.name
@property
def user(self) -> User:

View File

@@ -41,7 +41,10 @@ class UserJoinedVoiceChannelHistory(HistoryTableABC):
@property
@ServiceProviderABC.inject
def channel_name(self, bot: DiscordBotServiceABC) -> str:
return bot.get_channel(self.channel_id).name
channel = bot.get_channel(self.channel_id)
if channel is None:
return ""
return channel.name
@property
def user(self) -> int:

View File

@@ -15,7 +15,7 @@ __title__ = "bot_data.service"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -65,8 +65,8 @@ class AchievementRepositoryService(AchievementRepositoryABC):
def get_achievements_by_server_id(self, server_id: int) -> List[Achievement]:
achievements = List(Achievement)
self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_by_id_string(server_id)}")
results = self._context.select(Achievement.get_select_all_string())
self._logger.trace(__name__, f"Send SQL command: {Achievement.get_select_by_server_id_string(server_id)}")
results = self._context.select(Achievement.get_select_by_server_id_string(server_id))
for result in results:
self._logger.trace(__name__, f"Get user with id {result[0]}")
achievements.append(self._from_result(result))

View File

@@ -1,3 +1,4 @@
from enum import Enum
from typing import Optional
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]),
)
self._logger.trace(
__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])
for user_id in self.get_auth_user_relation_ids(auth_user):
if user_id is None:
continue
@@ -64,6 +59,19 @@ class AuthUserRepositoryService(AuthUserRepositoryABC):
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]:
users = List(AuthUser)
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()
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:
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.total_count = query.count()

View File

@@ -68,13 +68,16 @@ class GameServerRepositoryService(GameServerRepositoryABC):
result = self._context.select(GameServer.get_select_by_id_string(id))[0]
return self._from_result(result)
def get_game_server_by_api_key_id(self, id: int) -> GameServer:
def get_game_servers_by_api_key_id(self, id: int) -> List[GameServer]:
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_by_api_key_id_string(id)}",
)
result = self._context.select(GameServer.get_select_by_api_key_id_string(id))[0]
return self._from_result(result)
game_servers = List(GameServer)
results = self._context.select(GameServer.get_select_by_api_key_id_string(id))
for result in results:
game_servers.append(self._from_result(result))
return game_servers
def add_game_server(self, game_server: GameServer):
self._logger.trace(__name__, f"Send SQL command: {game_server.insert_string}")

View File

@@ -1,3 +1,5 @@
import json
from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
@@ -62,23 +64,25 @@ class ServerConfigRepositoryService(ServerConfigRepositoryABC):
result[11],
result[12],
result[13],
self._servers.get_server_by_id(result[14]),
self._get_afk_channel_ids(result[14]),
self._get_team_role_ids(result[14]),
result[15],
result[16],
result[14],
json.loads(result[15]),
self._servers.get_server_by_id(result[16]),
self._get_afk_channel_ids(result[16]),
self._get_team_role_ids(result[16]),
result[17],
result[18],
id=result[0],
)
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)}")
result = self._context.select(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_server_id_string(server_id))
return len(result) > 0
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)}")
result = self._context.select(ServerConfig.get_select_by_id_string(server_id))[0]
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_server_id_string(server_id))[0]
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,
{},
server,
[],
[],

View File

@@ -1,3 +1,5 @@
import json
from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
@@ -41,10 +43,11 @@ class TechnicianConfigRepositoryService(TechnicianConfigRepositoryABC):
result[2],
result[3],
result[4],
json.loads(result[5]),
self._get_technician_ids(),
self._get_technician_ping_urls(),
result[5],
result[6],
result[7],
id=result[0],
)

View File

@@ -32,6 +32,7 @@ class TechnicianConfigSeeder(DataSeederABC):
8,
8,
1000000,
{},
List(int, [240160344557879316]),
List(str, ["www.google.com", "www.sh-edraft.de", "www.keksdose-gaming.de"]),
)

View File

@@ -51,6 +51,19 @@ class UserGameIdentRepositoryService(UserGameIdentRepositoryABC):
return joins
def get_user_game_idents_by_game_server_id(self, game_server_id: int) -> List[UserGameIdent]:
joins = List(UserGameIdent)
self._logger.trace(
__name__,
f"Send SQL command: {UserGameIdent.get_select_by_game_server_id_string(game_server_id)}",
)
results = self._context.select(UserGameIdent.get_select_by_game_server_id_string(game_server_id))
for result in results:
self._logger.trace(__name__, f"Get UserGameIdent with id {result[0]}")
joins.append(self._from_result(result))
return joins
def get_user_game_ident_by_id(self, id: int) -> UserGameIdent:
self._logger.trace(
__name__,

View File

@@ -15,7 +15,7 @@ __title__ = "bot_graphql"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

View File

@@ -15,7 +15,7 @@ __title__ = "bot_graphql.abc"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

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_exception import ServiceException
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_user import AuthUser
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.level import Level
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_joined_game_server import UserJoinedGameServer
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}Count", lambda *args: wrapper(*args).count())
@ServiceProviderABC.inject
def _can_user_see_element(self, user: AuthUser, element: T, services: ServiceProviderABC) -> bool:
def _can_user_see_element(self, user: AuthUser, element: T) -> bool:
@ServiceProviderABC.inject
def get_services(services: ServiceProviderABC) -> ServiceProviderABC:
return services
services = get_services()
permissions: PermissionService = services.get_service(PermissionService)
bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
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
for u in user.users:
u: User = u
@@ -158,6 +175,24 @@ class QueryABC(ObjectType):
access = True
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
@ServiceProviderABC.inject

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "bot_graphql.filter"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "1.0.7"
__version__ = "1.1.6"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="0", micro="7")
version_info = VersionInfo(major="1", minor="1", micro="6")

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]
technicianConfig: TechnicianConfig
guilds(filter: GuildFilter): [Guild]
possibleFeatureFlags: [String]
discord: Discord
}

View File

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

View File

@@ -4,6 +4,8 @@ type TechnicianConfig implements TableWithHistoryQuery {
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
featureFlagCount: Int
featureFlags: [FeatureFlag]
pingURLs: [String]
technicianIds: [String]
@@ -21,6 +23,8 @@ type TechnicianConfigHistory implements HistoryTableQuery {
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
featureFlagCount: Int
featureFlags: [FeatureFlag]
deleted: Boolean
dateFrom: String
@@ -55,6 +59,7 @@ input TechnicianConfigInput {
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
featureFlags: [FeatureFlagInput]
pingURLs: [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.client_history_query import ClientHistoryQuery
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.known_user_history_query import KnownUserHistoryQuery
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, 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
services.add_transient(FilterABC, AutoRoleFilter)
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.6"
from collections import namedtuple
# imports
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="1", minor="1", micro="6")

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
}

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