Reviewed-on: sh-edraft.de/kd_discord_bot#92 Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com> Closes #25
This commit is contained in:
		@@ -10,6 +10,7 @@
 | 
			
		||||
      "base": "src/modules/base/base.json",
 | 
			
		||||
      "boot-log": "src/modules/boot_log/boot-log.json",
 | 
			
		||||
      "database": "src/modules/database/database.json",
 | 
			
		||||
      "level": "src/modules/level/level.json",
 | 
			
		||||
      "moderator": "src/modules/moderator/moderator.json",
 | 
			
		||||
      "permission": "src/modules/permission/permission.json",
 | 
			
		||||
      "bot-api": "src/bot_api/bot-api.json",
 | 
			
		||||
@@ -18,7 +19,6 @@
 | 
			
		||||
      "set-version": "tools/set_version/set-version.json"
 | 
			
		||||
    },
 | 
			
		||||
    "Scripts": {
 | 
			
		||||
 | 
			
		||||
      "sv": "cpl set-version",
 | 
			
		||||
      "set-version": "cpl run set-version $ARGS; echo '';",
 | 
			
		||||
 | 
			
		||||
@@ -30,8 +30,10 @@
 | 
			
		||||
 | 
			
		||||
      "pre-prod": "cpl build",
 | 
			
		||||
      "prod": "export KDB_ENVIRONMENT=production; export KDB_NAME=KDB-Prod; cpl start;",
 | 
			
		||||
 | 
			
		||||
      "pre-stage": "cpl build",
 | 
			
		||||
      "stage": "export KDB_ENVIRONMENT=staging; export KDB_NAME=KDB-Stage; cpl start;",
 | 
			
		||||
 | 
			
		||||
      "pre-dev": "cpl build",
 | 
			
		||||
      "dev": "export KDB_ENVIRONMENT=development; export KDB_NAME=KDB-Dev; cpl start;",
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
    "Version": {
 | 
			
		||||
      "Major": "0",
 | 
			
		||||
      "Minor": "3",
 | 
			
		||||
      "Micro": "dev70"
 | 
			
		||||
      "Micro": "dev25"
 | 
			
		||||
    },
 | 
			
		||||
    "Author": "Sven Heidemann",
 | 
			
		||||
    "AuthorEmail": "sven.heidemann@sh-edraft.de",
 | 
			
		||||
@@ -60,6 +60,7 @@
 | 
			
		||||
      "../modules/base/base.json",
 | 
			
		||||
      "../modules/boot_log/boot-log.json",
 | 
			
		||||
      "../modules/database/database.json",
 | 
			
		||||
      "../modules/level/level.json",
 | 
			
		||||
      "../modules/moderator/moderator.json",
 | 
			
		||||
      "../modules/permission/permission.json"
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
  "LoggingSettings": {
 | 
			
		||||
    "Path": "logs/",
 | 
			
		||||
    "Filename": "bot.log",
 | 
			
		||||
    "ConsoleLogLevel": "TRACE",
 | 
			
		||||
    "ConsoleLogLevel": "DEBUG",
 | 
			
		||||
    "FileLogLevel": "TRACE"
 | 
			
		||||
  },
 | 
			
		||||
  "BotLoggingSettings": {
 | 
			
		||||
@@ -76,7 +76,12 @@
 | 
			
		||||
  },
 | 
			
		||||
  "BootLog": {
 | 
			
		||||
    "910199451145076828": {
 | 
			
		||||
      "LoginMessageChannelId": "910199452915093588"
 | 
			
		||||
      "LoginMessageChannelId": 910199452915093588
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "Level": {
 | 
			
		||||
    "910199451145076828": {
 | 
			
		||||
      "ChangedLevelNotificationChannelId": 910199452667637892
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "Permission": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "FeatureFlags": {
 | 
			
		||||
    "ApiModule": true,
 | 
			
		||||
    "ApiModule": false,
 | 
			
		||||
    "AdminModule": true,
 | 
			
		||||
    "AutoRoleModule": true,
 | 
			
		||||
    "BaseModule": true,
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
    "CoreExtensionModule": true,
 | 
			
		||||
    "DatabaseModule": true,
 | 
			
		||||
    "ModeratorModule": true,
 | 
			
		||||
    "LevelModule": true,
 | 
			
		||||
    "PermissionModule": true,
 | 
			
		||||
    "PresenceModule": true
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ from modules.auto_role.auto_role_module import AutoRoleModule
 | 
			
		||||
from modules.base.base_module import BaseModule
 | 
			
		||||
from modules.boot_log.boot_log_module import BootLogModule
 | 
			
		||||
from modules.database.database_module import DatabaseModule
 | 
			
		||||
from modules.level.level_module import LevelModule
 | 
			
		||||
from modules.moderator.moderator_module import ModeratorModule
 | 
			
		||||
from modules.permission.permission_module import PermissionModule
 | 
			
		||||
 | 
			
		||||
@@ -25,6 +26,7 @@ class ModuleList:
 | 
			
		||||
            AutoRoleModule,
 | 
			
		||||
            BaseModule,
 | 
			
		||||
            DatabaseModule,
 | 
			
		||||
            LevelModule,
 | 
			
		||||
            ModeratorModule,
 | 
			
		||||
            PermissionModule,
 | 
			
		||||
            ApiModule,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ from bot_data.abc.migration_abc import MigrationABC
 | 
			
		||||
from bot_data.migration.api_migration import ApiMigration
 | 
			
		||||
from bot_data.migration.auto_role_migration import AutoRoleMigration
 | 
			
		||||
from bot_data.migration.initial_migration import InitialMigration
 | 
			
		||||
from bot_data.migration.level_migration import LevelMigration
 | 
			
		||||
from bot_data.service.migration_service import MigrationService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -23,3 +24,4 @@ class StartupMigrationExtension(StartupExtensionABC):
 | 
			
		||||
        services.add_transient(MigrationABC, InitialMigration)
 | 
			
		||||
        services.add_transient(MigrationABC, AutoRoleMigration)  # 03.10.2022 #54 - 0.2.2
 | 
			
		||||
        services.add_transient(MigrationABC, ApiMigration)  # 15.10.2022 #70 - 0.3.0
 | 
			
		||||
        services.add_transient(MigrationABC, LevelMigration)  # 06.11.2022 #25 - 0.3.0
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ from bot_core.configuration.bot_logging_settings import BotLoggingSettings
 | 
			
		||||
from bot_core.configuration.bot_settings import BotSettings
 | 
			
		||||
from modules.base.configuration.base_settings import BaseSettings
 | 
			
		||||
from modules.boot_log.configuration.boot_log_settings import BootLogSettings
 | 
			
		||||
from modules.level.configuration.level_settings import LevelSettings
 | 
			
		||||
from modules.permission.configuration.permission_settings import PermissionSettings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -35,6 +36,7 @@ class StartupSettingsExtension(StartupExtensionABC):
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, BotSettings, lambda x: x.servers, lambda x: x.id)
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, BaseSettings, lambda x: x.servers, lambda x: x.id)
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, BootLogSettings, lambda x: x.servers, lambda x: x.id)
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, LevelSettings, lambda x: x.servers, lambda x: x.id)
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, PermissionSettings, lambda x: x.servers, lambda x: x.id)
 | 
			
		||||
        self._configure_settings_with_sub_settings(configuration, BotLoggingSettings, lambda x: x.files, lambda x: x.key)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -149,6 +149,9 @@
 | 
			
		||||
    "boot_log": {
 | 
			
		||||
      "login_message": "Ich bin on the line :D\nDer Scheiß hat {} Sekunden gedauert"
 | 
			
		||||
    },
 | 
			
		||||
    "level": {
 | 
			
		||||
      "new_level_message": "<@{}> ist nun Level {}"
 | 
			
		||||
    },
 | 
			
		||||
    "database": {},
 | 
			
		||||
    "permission": {
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.abc'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.controller'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.controller.discord'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.event'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.exception'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.filter'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.filter.discord'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.logging'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.model'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.model.discord'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.route'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_api.transformer'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.abc'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ class FeatureFlagsEnum(Enum):
 | 
			
		||||
    core_extension_module = 'CoreExtensionModule'
 | 
			
		||||
    data_module = 'DataModule',
 | 
			
		||||
    database_module = 'DatabaseModule',
 | 
			
		||||
    level_module = 'LevelModule'
 | 
			
		||||
    moderator_module = 'ModeratorModule'
 | 
			
		||||
    permission_module = 'PermissionModule'
 | 
			
		||||
    # features
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.core_extension'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.events'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.helper'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.logging'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.pipes'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_core.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ class MessageService(MessageServiceABC):
 | 
			
		||||
                self._db.save_changes()
 | 
			
		||||
            self._logger.info(__name__, f'Deleted message {message}')
 | 
			
		||||
    
 | 
			
		||||
    async def send_channel_message(self, channel: discord.TextChannel, message: Union[str, discord.Embed], without_tracking=False):
 | 
			
		||||
    async def send_channel_message(self, channel: discord.TextChannel, message: Union[str, discord.Embed], is_persistent: bool = False, wait_before_delete: int = None, without_tracking=False):
 | 
			
		||||
        self._logger.debug(__name__, f'Try to send message\n\t{message}\n\tto: {channel}')
 | 
			
		||||
        msg = None
 | 
			
		||||
        try:
 | 
			
		||||
@@ -64,6 +64,13 @@ class MessageService(MessageServiceABC):
 | 
			
		||||
            if not without_tracking:
 | 
			
		||||
                self._clients.append_sent_message_count(self._bot.user.id, channel.guild.id, 1)
 | 
			
		||||
                self._db.save_changes()
 | 
			
		||||
 | 
			
		||||
            if wait_before_delete is not None:
 | 
			
		||||
                await asyncio.sleep(wait_before_delete)
 | 
			
		||||
 | 
			
		||||
            if is_persistent:
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            await self.delete_message(msg, without_tracking)
 | 
			
		||||
    
 | 
			
		||||
    async def send_dm_message(self, message: Union[str, discord.Embed], receiver: Union[discord.User, discord.Member], without_tracking=False):
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_data'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_data.abc'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								kdb-bot/src/bot_data/abc/data_seeder_abc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								kdb-bot/src/bot_data/abc/data_seeder_abc.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
from abc import ABC, abstractmethod
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DataSeederABC(ABC):
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def __init__(self): pass
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def seed(self): pass
 | 
			
		||||
							
								
								
									
										36
									
								
								kdb-bot/src/bot_data/abc/level_repository_abc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								kdb-bot/src/bot_data/abc/level_repository_abc.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
from abc import ABC, abstractmethod
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
 | 
			
		||||
from bot_data.model.level import Level
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelRepositoryABC(ABC):
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def __init__(self): pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def get_levels(self) -> List[Level]: pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def get_level_by_id(self, id: int) -> Level: pass
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def find_level_by_id(self, id: int) -> Optional[Level]: pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def get_levels_by_server_id(self, server_id: int) -> List[Level]: pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def find_levels_by_server_id(self, server_id: int) -> Optional[List[Level]]: pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def add_level(self, level: Level): pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def update_level(self, level: Level): pass
 | 
			
		||||
    
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def delete_level(self, level: Level): pass
 | 
			
		||||
@@ -9,6 +9,7 @@ from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
 | 
			
		||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
 | 
			
		||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
 | 
			
		||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
 | 
			
		||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
 | 
			
		||||
from bot_data.abc.user_joined_voice_channel_abc import UserJoinedVoiceChannelRepositoryABC
 | 
			
		||||
@@ -17,6 +18,8 @@ from bot_data.service.auth_user_repository_service import AuthUserRepositoryServ
 | 
			
		||||
from bot_data.service.auto_role_repository_service import AutoRoleRepositoryService
 | 
			
		||||
from bot_data.service.client_repository_service import ClientRepositoryService
 | 
			
		||||
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
 | 
			
		||||
from bot_data.service.level_repository_service import LevelRepositoryService
 | 
			
		||||
from bot_data.service.seeder_service import SeederService
 | 
			
		||||
from bot_data.service.server_repository_service import ServerRepositoryService
 | 
			
		||||
from bot_data.service.user_joined_server_repository_service import UserJoinedServerRepositoryService
 | 
			
		||||
from bot_data.service.user_joined_voice_channel_service import UserJoinedVoiceChannelRepositoryService
 | 
			
		||||
@@ -40,3 +43,6 @@ class DataModule(ModuleABC):
 | 
			
		||||
        services.add_transient(UserJoinedServerRepositoryABC, UserJoinedServerRepositoryService)
 | 
			
		||||
        services.add_transient(UserJoinedVoiceChannelRepositoryABC, UserJoinedVoiceChannelRepositoryService)
 | 
			
		||||
        services.add_transient(AutoRoleRepositoryABC, AutoRoleRepositoryService)
 | 
			
		||||
        services.add_transient(LevelRepositoryABC, LevelRepositoryService)
 | 
			
		||||
 | 
			
		||||
        services.add_transient(SeederService)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_data.migration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								kdb-bot/src/bot_data/migration/level_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								kdb-bot/src/bot_data/migration/level_migration.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.abc.migration_abc import MigrationABC
 | 
			
		||||
from bot_data.db_context import DBContext
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelMigration(MigrationABC):
 | 
			
		||||
    name = '0.3_LevelMigration'
 | 
			
		||||
 | 
			
		||||
    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"""
 | 
			
		||||
            CREATE TABLE IF NOT EXISTS `Levels` (
 | 
			
		||||
                `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                `Name` VARCHAR(255) NOT NULL,
 | 
			
		||||
                `Color` VARCHAR(8) NOT NULL,
 | 
			
		||||
                `MinXp` BIGINT NOT NULL,
 | 
			
		||||
                `PermissionInt` BIGINT NOT NULL,
 | 
			
		||||
                `ServerId` BIGINT,
 | 
			
		||||
                `CreatedAt` DATETIME(6),
 | 
			
		||||
                `LastModifiedAt` DATETIME(6),
 | 
			
		||||
                PRIMARY KEY(`Id`),
 | 
			
		||||
                FOREIGN KEY (`ServerId`) REFERENCES `Servers`(`ServerId`)
 | 
			
		||||
            );
 | 
			
		||||
            """)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def downgrade(self):
 | 
			
		||||
        self._cursor.execute('DROP TABLE `Levels`;')
 | 
			
		||||
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_data.model'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										119
									
								
								kdb-bot/src/bot_data/model/level.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								kdb-bot/src/bot_data/model/level.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from typing import Optional
 | 
			
		||||
from cpl_core.database import TableABC
 | 
			
		||||
 | 
			
		||||
from bot_data.model.server import Server
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Level(TableABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, name: str, color: str, min_xp: int, permissions: int, server: Optional[Server], created_at: datetime = None, modified_at: datetime = None, id=0):
 | 
			
		||||
        self._id = id
 | 
			
		||||
        self._name = name
 | 
			
		||||
        self._color = color
 | 
			
		||||
        self._min_xp = min_xp
 | 
			
		||||
        self._permissions = permissions
 | 
			
		||||
        self._server = server
 | 
			
		||||
        
 | 
			
		||||
        TableABC.__init__(self)
 | 
			
		||||
        self._created_at = created_at if created_at is not None else self._created_at
 | 
			
		||||
        self._modified_at = modified_at if modified_at is not None else self._modified_at
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def id(self) -> int:
 | 
			
		||||
        return self._id
 | 
			
		||||
    
 | 
			
		||||
    @property
 | 
			
		||||
    def name(self) -> str:
 | 
			
		||||
        return self._name
 | 
			
		||||
    
 | 
			
		||||
    @name.setter
 | 
			
		||||
    def name(self, value: str):
 | 
			
		||||
        self._name = value
 | 
			
		||||
        
 | 
			
		||||
    @property
 | 
			
		||||
    def color(self) -> str:
 | 
			
		||||
        return self._color
 | 
			
		||||
    
 | 
			
		||||
    @color.setter
 | 
			
		||||
    def color(self, value: str):
 | 
			
		||||
        self._color = value
 | 
			
		||||
        
 | 
			
		||||
    @property
 | 
			
		||||
    def min_xp(self) -> int:
 | 
			
		||||
        return self._min_xp
 | 
			
		||||
    
 | 
			
		||||
    @min_xp.setter
 | 
			
		||||
    def min_xp(self, value: int):
 | 
			
		||||
        self._min_xp = value
 | 
			
		||||
    
 | 
			
		||||
    @property
 | 
			
		||||
    def permissions(self) -> int:
 | 
			
		||||
        return self._permissions
 | 
			
		||||
    
 | 
			
		||||
    @permissions.setter
 | 
			
		||||
    def permissions(self, value: int):
 | 
			
		||||
        self._permissions = value
 | 
			
		||||
    
 | 
			
		||||
    @property
 | 
			
		||||
    def server(self) -> Server:
 | 
			
		||||
        return self._server
 | 
			
		||||
    
 | 
			
		||||
    @server.setter
 | 
			
		||||
    def server(self, value: Server):
 | 
			
		||||
        self._server = value
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_select_all_string() -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            SELECT * FROM `Levels`;
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_select_by_id_string(id: int) -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            SELECT * FROM `Levels`
 | 
			
		||||
            WHERE `Id` = {id};
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_select_by_server_id_string(s_id: int) -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            SELECT * FROM `Levels`
 | 
			
		||||
            WHERE `ServerId` = {s_id};
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def insert_string(self) -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            INSERT INTO `Levels` (
 | 
			
		||||
                `Name`, `Color`, `MinXp`, `PermissionInt`, `ServerId`, `CreatedAt`, `LastModifiedAt`
 | 
			
		||||
            ) VALUES (
 | 
			
		||||
                '{self._name}',
 | 
			
		||||
                '{self._color}',
 | 
			
		||||
                {self._min_xp},
 | 
			
		||||
                {self._permissions},
 | 
			
		||||
                {self._server.server_id},
 | 
			
		||||
                '{self._created_at}',
 | 
			
		||||
                '{self._modified_at}'
 | 
			
		||||
            );
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def udpate_string(self) -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            UPDATE `Levels`
 | 
			
		||||
            SET `Name` = '{self._name}',
 | 
			
		||||
            `Color` = '{self._color}',
 | 
			
		||||
            `MinXp` = {self._min_xp},
 | 
			
		||||
            `PermissionInt` = {self._permissions},
 | 
			
		||||
            `LastModifiedAt` = '{self._modified_at}'
 | 
			
		||||
            WHERE `Id` = {self._id};
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def delete_string(self) -> str:
 | 
			
		||||
        return str(f"""
 | 
			
		||||
            DELETE FROM `Levels`
 | 
			
		||||
            WHERE `Id` = {self._id};
 | 
			
		||||
        """)
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'bot_data.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								kdb-bot/src/bot_data/service/level_repository_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								kdb-bot/src/bot_data/service/level_repository_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
 | 
			
		||||
from bot_data.model.level import Level
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelRepositoryService(LevelRepositoryABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, logger: DatabaseLogger, db_context: DatabaseContextABC, servers: ServerRepositoryABC):
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._context = db_context
 | 
			
		||||
 | 
			
		||||
        self._servers = servers
 | 
			
		||||
 | 
			
		||||
        LevelRepositoryABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _get_value_from_result(value: any) -> Optional[any]:
 | 
			
		||||
        if isinstance(value, str) and 'NULL' in value:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        return value
 | 
			
		||||
 | 
			
		||||
    def _level_from_result(self, sql_result: tuple) -> Level:
 | 
			
		||||
        return Level(
 | 
			
		||||
            self._get_value_from_result(sql_result[1]),  # name
 | 
			
		||||
            self._get_value_from_result(sql_result[2]),  # color
 | 
			
		||||
            int(self._get_value_from_result(sql_result[3])),  # min xp
 | 
			
		||||
            int(self._get_value_from_result(sql_result[4])),  # permissions
 | 
			
		||||
            self._servers.get_server_by_id(sql_result[5]),  # server
 | 
			
		||||
            id=self._get_value_from_result(sql_result[0])  # id
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def get_levels(self) -> List[Level]:
 | 
			
		||||
        levels = List(Level)
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {Level.get_select_all_string()}')
 | 
			
		||||
        results = self._context.select(Level.get_select_all_string())
 | 
			
		||||
        for result in results:
 | 
			
		||||
            self._logger.trace(__name__, f'Get level with id {result[0]}')
 | 
			
		||||
            levels.append(self._level_from_result(result))
 | 
			
		||||
 | 
			
		||||
        return levels
 | 
			
		||||
 | 
			
		||||
    def get_level_by_id(self, id: int) -> Level:
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {Level.get_select_by_id_string(id)}')
 | 
			
		||||
        result = self._context.select(Level.get_select_by_id_string(id))[0]
 | 
			
		||||
 | 
			
		||||
        return self._level_from_result(result)
 | 
			
		||||
 | 
			
		||||
    def find_level_by_id(self, id: int) -> Optional[Level]:
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {Level.get_select_by_id_string(id)}')
 | 
			
		||||
        result = self._context.select(Level.get_select_by_id_string(id))
 | 
			
		||||
        if result is None or len(result) == 0:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        return self._level_from_result(result[0])
 | 
			
		||||
 | 
			
		||||
    def get_levels_by_server_id(self, server_id: int) -> List[Level]:
 | 
			
		||||
        levels = List(Level)
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {Level.get_select_by_server_id_string(server_id)}')
 | 
			
		||||
        results = self._context.select(Level.get_select_by_server_id_string(server_id))
 | 
			
		||||
 | 
			
		||||
        for result in results:
 | 
			
		||||
            self._logger.trace(__name__, f'Get level with id {result[0]}')
 | 
			
		||||
            levels.append(self._level_from_result(result))
 | 
			
		||||
 | 
			
		||||
        return levels
 | 
			
		||||
 | 
			
		||||
    def find_levels_by_server_id(self, server_id: int) -> Optional[List[Level]]:
 | 
			
		||||
        levels = List(Level)
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {Level.get_select_by_server_id_string(server_id)}')
 | 
			
		||||
        results = self._context.select(Level.get_select_by_server_id_string(server_id))
 | 
			
		||||
        if results is None or len(results) == 0:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        for result in results:
 | 
			
		||||
            self._logger.trace(__name__, f'Get level with id {result[0]}')
 | 
			
		||||
            levels.append(self._level_from_result(result))
 | 
			
		||||
 | 
			
		||||
        return levels
 | 
			
		||||
 | 
			
		||||
    def add_level(self, level: Level):
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {level.insert_string}')
 | 
			
		||||
        self._context.cursor.execute(level.insert_string)
 | 
			
		||||
 | 
			
		||||
    def update_level(self, level: Level):
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {level.udpate_string}')
 | 
			
		||||
        self._context.cursor.execute(level.udpate_string)
 | 
			
		||||
 | 
			
		||||
    def delete_level(self, level: Level):
 | 
			
		||||
        self._logger.trace(__name__, f'Send SQL command: {level.delete_string}')
 | 
			
		||||
        self._context.cursor.execute(level.delete_string)
 | 
			
		||||
							
								
								
									
										25
									
								
								kdb-bot/src/bot_data/service/seeder_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								kdb-bot/src/bot_data/service/seeder_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_core.dependency_injection import ServiceProviderABC
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.abc.data_seeder_abc import DataSeederABC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SeederService:
 | 
			
		||||
 | 
			
		||||
    def __init__(self, logger: DatabaseLogger, services: ServiceProviderABC, db: DatabaseContextABC):
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._services = services
 | 
			
		||||
 | 
			
		||||
        self._db = db
 | 
			
		||||
 | 
			
		||||
        self._seeder = List(type, DataSeederABC.__subclasses__())
 | 
			
		||||
 | 
			
		||||
    async def seed(self):
 | 
			
		||||
        self._logger.info(__name__, f"Seed data")
 | 
			
		||||
        for seeder in self._seeder:
 | 
			
		||||
            seeder_as_service: DataSeederABC = self._services.get_service(seeder)
 | 
			
		||||
            self._logger.debug(__name__, f"Starting seeder {seeder.__name__}")
 | 
			
		||||
            await seeder_as_service.seed()
 | 
			
		||||
            self._db.save_changes()
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.admin'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.admin.command'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.command'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.events'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.helper'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base.abc'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base.command'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base.events'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.base.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.boot_log'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.boot_log.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.database'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
			
		||||
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.service.migration_service import MigrationService
 | 
			
		||||
from bot_data.service.seeder_service import SeederService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DatabaseExtension(ApplicationExtensionABC):
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ from bot_data.model.server import Server
 | 
			
		||||
from bot_data.model.user import User
 | 
			
		||||
from bot_data.model.user_joined_server import UserJoinedServer
 | 
			
		||||
from bot_data.model.user_joined_voice_channel import UserJoinedVoiceChannel
 | 
			
		||||
from bot_data.service.seeder_service import SeederService
 | 
			
		||||
from bot_data.service.user_repository_service import ServerRepositoryABC
 | 
			
		||||
from modules.base.configuration.base_server_settings import BaseServerSettings
 | 
			
		||||
 | 
			
		||||
@@ -30,6 +31,7 @@ class DatabaseOnReadyEvent(OnReadyABC):
 | 
			
		||||
        self,
 | 
			
		||||
        config: ConfigurationABC,
 | 
			
		||||
        logger: DatabaseLogger,
 | 
			
		||||
        seeder: SeederService,
 | 
			
		||||
        bot: DiscordBotServiceABC,
 | 
			
		||||
        db_context: DatabaseContextABC,
 | 
			
		||||
        server_repo: ServerRepositoryABC,
 | 
			
		||||
@@ -43,6 +45,7 @@ class DatabaseOnReadyEvent(OnReadyABC):
 | 
			
		||||
        self._config = config
 | 
			
		||||
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._seeder = seeder
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._db_context = db_context
 | 
			
		||||
        self._servers = server_repo
 | 
			
		||||
@@ -303,6 +306,8 @@ class DatabaseOnReadyEvent(OnReadyABC):
 | 
			
		||||
    async def on_ready(self):
 | 
			
		||||
        self._logger.debug(__name__, f'Module {type(self)} started')
 | 
			
		||||
 | 
			
		||||
        await self._seeder.seed()
 | 
			
		||||
 | 
			
		||||
        self._check_known_users()
 | 
			
		||||
        self._check_servers()
 | 
			
		||||
        self._check_clients()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								kdb-bot/src/modules/level/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kdb-bot/src/modules/level/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
bot Keksdose bot
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Discord bot  for the Keksdose discord Server
 | 
			
		||||
 | 
			
		||||
:copyright: (c) 2022 sh-edraft.de
 | 
			
		||||
:license: MIT, see LICENSE for more details.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
__title__ = 'modules.level'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
							
								
								
									
										26
									
								
								kdb-bot/src/modules/level/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kdb-bot/src/modules/level/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
bot Keksdose bot
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Discord bot  for the Keksdose discord Server
 | 
			
		||||
 | 
			
		||||
:copyright: (c) 2022 sh-edraft.de
 | 
			
		||||
:license: MIT, see LICENSE for more details.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
__title__ = 'modules.level.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
			
		||||
from cpl_core.console import Console
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
 | 
			
		||||
from bot_data.model.level import Level
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DefaultLevelSettings(ConfigurationModelABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        ConfigurationModelABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
        self._levels = List(Level)
 | 
			
		||||
        self._level_header = ''
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def levels(self) -> List[Level]:
 | 
			
		||||
        return self._levels
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def level_header(self) -> str:
 | 
			
		||||
        return self._level_header
 | 
			
		||||
 | 
			
		||||
    def from_dict(self, settings: dict):
 | 
			
		||||
        try:
 | 
			
		||||
            self._level_header = settings['LevelHeader']
 | 
			
		||||
            for level in settings['Levels']:
 | 
			
		||||
                self._levels.append(Level(
 | 
			
		||||
                    level['Name'],
 | 
			
		||||
                    level['Color'],
 | 
			
		||||
                    int(level['MinXp']),
 | 
			
		||||
                    int(level['Permissions']),
 | 
			
		||||
                    None
 | 
			
		||||
                ))
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings')
 | 
			
		||||
            Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}')
 | 
			
		||||
@@ -0,0 +1,29 @@
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
			
		||||
from cpl_core.console import Console
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelServerSettings(ConfigurationModelABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        ConfigurationModelABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
        self._id: int = 0
 | 
			
		||||
        self._changed_level_notification_channel = 0
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def id(self) -> int:
 | 
			
		||||
        return self._id
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def changed_level_notification_channel(self) -> int:
 | 
			
		||||
        return self._changed_level_notification_channel
 | 
			
		||||
 | 
			
		||||
    def from_dict(self, settings: dict):
 | 
			
		||||
        try:
 | 
			
		||||
            self._id = int(settings['Id'])
 | 
			
		||||
            self._changed_level_notification_channel = int(settings['ChangedLevelNotificationChannelId'])
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings')
 | 
			
		||||
            Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}')
 | 
			
		||||
							
								
								
									
										32
									
								
								kdb-bot/src/modules/level/configuration/level_settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								kdb-bot/src/modules/level/configuration/level_settings.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
			
		||||
from cpl_core.console import Console
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
 | 
			
		||||
from modules.level.configuration.level_server_settings import LevelServerSettings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelSettings(ConfigurationModelABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        ConfigurationModelABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
        self._servers: List[LevelServerSettings] = List()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def servers(self) -> List[LevelServerSettings]:
 | 
			
		||||
        return self._servers
 | 
			
		||||
 | 
			
		||||
    def from_dict(self, settings: dict):
 | 
			
		||||
        try:
 | 
			
		||||
            servers = List(LevelServerSettings)
 | 
			
		||||
            for s in settings:
 | 
			
		||||
                st = LevelServerSettings()
 | 
			
		||||
                settings[s]['Id'] = s
 | 
			
		||||
                st.from_dict(settings[s])
 | 
			
		||||
                servers.append(st)
 | 
			
		||||
            self._servers = servers
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings')
 | 
			
		||||
            Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}')
 | 
			
		||||
							
								
								
									
										31
									
								
								kdb-bot/src/modules/level/default-level.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								kdb-bot/src/modules/level/default-level.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{
 | 
			
		||||
  "DefaultLevel": {
 | 
			
		||||
    "LevelHeader": "~~~ Level ~~~",
 | 
			
		||||
    "Levels": [
 | 
			
		||||
      {
 | 
			
		||||
        "Name": "Newbie",
 | 
			
		||||
        "Color": "0x1abc9c",
 | 
			
		||||
        "MinXp": 0,
 | 
			
		||||
        "Permissions": 968552209984
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Name": "Keks",
 | 
			
		||||
        "Color": "0x2ecc71",
 | 
			
		||||
        "MinXp": 100,
 | 
			
		||||
        "Permissions": 1002928856640
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Name": "Doppelkeks",
 | 
			
		||||
        "Color": "0x3498db",
 | 
			
		||||
        "MinXp": 200,
 | 
			
		||||
        "Permissions": 1071849660224
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Name": "Auror",
 | 
			
		||||
        "Color": "0xf1c40f",
 | 
			
		||||
        "MinXp": 300,
 | 
			
		||||
        "Permissions": 1089042120513
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								kdb-bot/src/modules/level/events/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kdb-bot/src/modules/level/events/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
bot Keksdose bot
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Discord bot  for the Keksdose discord Server
 | 
			
		||||
 | 
			
		||||
:copyright: (c) 2022 sh-edraft.de
 | 
			
		||||
:license: MIT, see LICENSE for more details.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
__title__ = 'modules.level.events'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
							
								
								
									
										21
									
								
								kdb-bot/src/modules/level/events/level_on_message_event.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								kdb-bot/src/modules/level/events/level_on_message_event.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_discord.events import OnMessageABC
 | 
			
		||||
 | 
			
		||||
from bot_core.logging.message_logger import MessageLogger
 | 
			
		||||
from modules.level.service.level_service import LevelService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelOnMessageEvent(OnMessageABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(
 | 
			
		||||
            self,
 | 
			
		||||
            logger: MessageLogger,
 | 
			
		||||
            level: LevelService
 | 
			
		||||
    ):
 | 
			
		||||
        OnMessageABC.__init__(self)
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._level = level
 | 
			
		||||
 | 
			
		||||
    async def on_message(self, message: discord.Message):
 | 
			
		||||
        self._logger.debug(__name__, f'Module {type(self)} started')
 | 
			
		||||
        await self._level.check_level(message.author)
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_core.logging import LoggerABC
 | 
			
		||||
from cpl_discord.events import OnVoiceStateUpdateABC
 | 
			
		||||
 | 
			
		||||
from modules.level.service.level_service import LevelService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(
 | 
			
		||||
            self,
 | 
			
		||||
            logger: LoggerABC,
 | 
			
		||||
            level: LevelService
 | 
			
		||||
    ):
 | 
			
		||||
        OnVoiceStateUpdateABC.__init__(self)
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._level = level
 | 
			
		||||
 | 
			
		||||
        self._logger.info(__name__, f'Module {type(self)} loaded')
 | 
			
		||||
 | 
			
		||||
    async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState):
 | 
			
		||||
        self._logger.debug(__name__, f'Module {type(self)} started')
 | 
			
		||||
        await self._level.check_level(member)
 | 
			
		||||
							
								
								
									
										46
									
								
								kdb-bot/src/modules/level/level.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								kdb-bot/src/modules/level/level.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
{
 | 
			
		||||
  "ProjectSettings": {
 | 
			
		||||
    "Name": "level",
 | 
			
		||||
    "Version": {
 | 
			
		||||
      "Major": "1",
 | 
			
		||||
      "Minor": "0",
 | 
			
		||||
      "Micro": "0"
 | 
			
		||||
    },
 | 
			
		||||
    "Author": "",
 | 
			
		||||
    "AuthorEmail": "",
 | 
			
		||||
    "Description": "",
 | 
			
		||||
    "LongDescription": "",
 | 
			
		||||
    "URL": "",
 | 
			
		||||
    "CopyrightDate": "",
 | 
			
		||||
    "CopyrightName": "",
 | 
			
		||||
    "LicenseName": "",
 | 
			
		||||
    "LicenseDescription": "",
 | 
			
		||||
    "Dependencies": [
 | 
			
		||||
      "cpl-core>=2022.10.0.post7"
 | 
			
		||||
    ],
 | 
			
		||||
    "DevDependencies": [
 | 
			
		||||
      "cpl-cli>=2022.10.1"
 | 
			
		||||
    ],
 | 
			
		||||
    "PythonVersion": ">=3.10.4",
 | 
			
		||||
    "PythonPath": {
 | 
			
		||||
      "linux": ""
 | 
			
		||||
    },
 | 
			
		||||
    "Classifiers": []
 | 
			
		||||
  },
 | 
			
		||||
  "BuildSettings": {
 | 
			
		||||
    "ProjectType": "library",
 | 
			
		||||
    "SourcePath": "",
 | 
			
		||||
    "OutputPath": "../../dist",
 | 
			
		||||
    "Main": "level.main",
 | 
			
		||||
    "EntryPoint": "level",
 | 
			
		||||
    "IncludePackageData": false,
 | 
			
		||||
    "Included": [],
 | 
			
		||||
    "Excluded": [
 | 
			
		||||
      "*/__pycache__",
 | 
			
		||||
      "*/logs",
 | 
			
		||||
      "*/tests"
 | 
			
		||||
    ],
 | 
			
		||||
    "PackageData": {},
 | 
			
		||||
    "ProjectReferences": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								kdb-bot/src/modules/level/level_module.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								kdb-bot/src/modules/level/level_module.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from cpl_core.configuration import ConfigurationABC
 | 
			
		||||
from cpl_core.dependency_injection import ServiceCollectionABC
 | 
			
		||||
from cpl_core.environment import ApplicationEnvironmentABC
 | 
			
		||||
from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum
 | 
			
		||||
from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.module_abc import ModuleABC
 | 
			
		||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
 | 
			
		||||
from modules.level.events.level_on_message_event import LevelOnMessageEvent
 | 
			
		||||
from modules.level.events.level_on_voice_state_update_event import LevelOnVoiceStateUpdateEvent
 | 
			
		||||
from modules.level.level_seeder import LevelSeeder
 | 
			
		||||
from modules.level.service.level_service import LevelService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelModule(ModuleABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, dc: DiscordCollectionABC):
 | 
			
		||||
        ModuleABC.__init__(self, dc, FeatureFlagsEnum.level_module)
 | 
			
		||||
 | 
			
		||||
    def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC):
 | 
			
		||||
        cwd = env.working_directory
 | 
			
		||||
        env.set_working_directory(os.path.dirname(os.path.realpath(__file__)))
 | 
			
		||||
        config.add_json_file(f'default-level.json', optional=False)
 | 
			
		||||
        env.set_working_directory(cwd)
 | 
			
		||||
 | 
			
		||||
    def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
			
		||||
        services.add_transient(LevelSeeder)
 | 
			
		||||
        services.add_transient(LevelService)
 | 
			
		||||
 | 
			
		||||
        self._dc.add_event(DiscordEventTypesEnum.on_message.value, LevelOnMessageEvent)
 | 
			
		||||
        self._dc.add_event(DiscordEventTypesEnum.on_voice_state_update.value, LevelOnVoiceStateUpdateEvent)
 | 
			
		||||
							
								
								
									
										83
									
								
								kdb-bot/src/modules/level/level_seeder.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								kdb-bot/src/modules/level/level_seeder.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
from cpl_discord.container import Guild, Role
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
from discord import Permissions, Colour
 | 
			
		||||
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.abc.data_seeder_abc import DataSeederABC
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.model.level import Level
 | 
			
		||||
from bot_data.model.server import Server
 | 
			
		||||
from bot_data.service.level_repository_service import LevelRepositoryService
 | 
			
		||||
from modules.level.configuration.default_level_settings import DefaultLevelSettings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelSeeder(DataSeederABC):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, logger: DatabaseLogger, levels: DefaultLevelSettings, level_repo: LevelRepositoryService, servers: ServerRepositoryABC, bot: DiscordBotServiceABC):
 | 
			
		||||
        DataSeederABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._levels = level_repo
 | 
			
		||||
        self._servers = servers
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
 | 
			
		||||
        self._level_header = levels.level_header
 | 
			
		||||
        self._default_levels = levels.levels.order_by_descending(lambda l: l.min_xp)
 | 
			
		||||
 | 
			
		||||
    async def _create_level(self, level: Level, guild: Guild, server: Server):
 | 
			
		||||
        try:
 | 
			
		||||
            if guild.roles.where(lambda r: r.name == level.name).first_or_default() is not None:
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            await guild.create_role(name=level.name, colour=Colour(int(level.color, 16)), hoist=False, mentionable=True, permissions=Permissions(level.permissions))
 | 
			
		||||
            self._logger.info(__name__, f'Created level {level.name}')
 | 
			
		||||
            level.server = server
 | 
			
		||||
            self._levels.add_level(level)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            self._logger.error(__name__, f'Creating level failed', e)
 | 
			
		||||
 | 
			
		||||
    async def seed(self):
 | 
			
		||||
        # create levels
 | 
			
		||||
        for guild in self._bot.guilds:
 | 
			
		||||
            created_default = False
 | 
			
		||||
            if guild.roles.where(lambda r: r.name == self._level_header).first_or_default() is None:
 | 
			
		||||
                await guild.create_role(name=self._level_header)
 | 
			
		||||
 | 
			
		||||
            server = self._servers.find_server_by_discord_id(guild.id)
 | 
			
		||||
            if server is None:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            levels = self._levels.find_levels_by_server_id(server.server_id)
 | 
			
		||||
            if levels is not None and levels.count() > 0:
 | 
			
		||||
                # create levels from db
 | 
			
		||||
                for level in levels:
 | 
			
		||||
                    await self._create_level(level, guild, server)
 | 
			
		||||
 | 
			
		||||
                self._logger.debug(__name__, f'Seeded levels')
 | 
			
		||||
            else:
 | 
			
		||||
                # create default levels
 | 
			
		||||
                for level in self._default_levels:
 | 
			
		||||
                    created_default = True
 | 
			
		||||
                    await self._create_level(level, guild, server)
 | 
			
		||||
 | 
			
		||||
                self._logger.debug(__name__, f'Seeded default levels')
 | 
			
		||||
 | 
			
		||||
            if created_default:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            position_above_levels = guild.roles.where(lambda r: r.name == self._level_header).single().position
 | 
			
		||||
            for role in guild.roles.order_by_descending(lambda r: r.position):
 | 
			
		||||
                if levels.where(lambda l: l.name == role.name).count() == 0:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                new_position = position_above_levels - (levels.index(levels.where(lambda l: l.name == role.name).single()) + 1)
 | 
			
		||||
                if new_position <= 0:
 | 
			
		||||
                    new_position = 1
 | 
			
		||||
                try:
 | 
			
		||||
                    self._logger.debug(__name__, f'Moved {role.name} from {role.position} to {new_position}')
 | 
			
		||||
                    await role.edit(position=new_position)
 | 
			
		||||
                except Exception as e:
 | 
			
		||||
                    self._logger.error(__name__, f'Cannot change position of {role.name}', e)
 | 
			
		||||
 | 
			
		||||
        self._logger.debug(__name__, f'Checked role order')
 | 
			
		||||
							
								
								
									
										26
									
								
								kdb-bot/src/modules/level/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kdb-bot/src/modules/level/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
bot Keksdose bot
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Discord bot  for the Keksdose discord Server
 | 
			
		||||
 | 
			
		||||
:copyright: (c) 2022 sh-edraft.de
 | 
			
		||||
:license: MIT, see LICENSE for more details.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
__title__ = 'modules.level.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
							
								
								
									
										92
									
								
								kdb-bot/src/modules/level/service/level_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								kdb-bot/src/modules/level/service/level_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
import asyncio
 | 
			
		||||
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_core.configuration import ConfigurationABC
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_core.logging import LoggerABC
 | 
			
		||||
from cpl_discord.container import Guild, Role, Member
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from cpl_translation import TranslatePipe
 | 
			
		||||
 | 
			
		||||
from bot_core.service.message_service import MessageService
 | 
			
		||||
from bot_data.model.level import Level
 | 
			
		||||
from bot_data.model.user import User
 | 
			
		||||
from bot_data.service.level_repository_service import LevelRepositoryService
 | 
			
		||||
from bot_data.service.server_repository_service import ServerRepositoryService
 | 
			
		||||
from bot_data.service.user_repository_service import UserRepositoryService
 | 
			
		||||
from modules.level.configuration.level_server_settings import LevelServerSettings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LevelService:
 | 
			
		||||
 | 
			
		||||
    def __init__(
 | 
			
		||||
            self,
 | 
			
		||||
            config: ConfigurationABC,
 | 
			
		||||
            logger: LoggerABC,
 | 
			
		||||
            db: DatabaseContextABC,
 | 
			
		||||
            levels: LevelRepositoryService,
 | 
			
		||||
            users: UserRepositoryService,
 | 
			
		||||
            servers: ServerRepositoryService,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            message_service: MessageService,
 | 
			
		||||
            t: TranslatePipe
 | 
			
		||||
    ):
 | 
			
		||||
        self._config = config
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._db = db
 | 
			
		||||
        self._levels = levels
 | 
			
		||||
        self._users = users
 | 
			
		||||
        self._servers = servers
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._message_service = message_service
 | 
			
		||||
        self._t = t
 | 
			
		||||
 | 
			
		||||
    def get_level(self, user: User) -> Level:
 | 
			
		||||
        levels = self._levels.get_levels_by_server_id(user.server.server_id).order_by(lambda l: l.min_xp)
 | 
			
		||||
        return levels.where(lambda l: user.xp >= l.min_xp).last()
 | 
			
		||||
 | 
			
		||||
    async def set_level(self, user: User):
 | 
			
		||||
        level_names = self._levels.get_levels_by_server_id(user.server.server_id).select(lambda l: l.name)
 | 
			
		||||
        guild: Guild = self._bot.guilds.where(lambda g: g.id == user.server.discord_server_id).single()
 | 
			
		||||
        member: Member = guild.members.where(lambda m: m.id == user.discord_id).single()
 | 
			
		||||
 | 
			
		||||
        level = self.get_level(user)
 | 
			
		||||
        level_role: Role = guild.roles.where(lambda r: r.name == level.name).single()
 | 
			
		||||
        if level_role in member.roles:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        for role in member.roles:
 | 
			
		||||
            if role.name not in level_names.to_list():
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            try:
 | 
			
		||||
                self._logger.debug(__name__, f'Try to remove role {role.name} from {member.name}')
 | 
			
		||||
                await member.remove_roles(role)
 | 
			
		||||
                self._logger.info(__name__, f'Removed role {role.name} from {member.name}')
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                self._logger.error(__name__, f'Removing role {role.name} from {member.name} failed!', e)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            self._logger.debug(__name__, f'Try to add role {level_role.name} to {member.name}')
 | 
			
		||||
            await member.add_roles(level_role)
 | 
			
		||||
            self._logger.info(__name__, f'Add role {level_role.name} to {member.name}')
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            self._logger.error(__name__, f'Adding role {level_role.name} to {member.name} failed!', e)
 | 
			
		||||
 | 
			
		||||
        level_settings: LevelServerSettings = self._config.get_configuration(f'LevelServerSettings_{guild.id}')
 | 
			
		||||
        await self._message_service.send_channel_message(
 | 
			
		||||
            self._bot.get_channel(level_settings.changed_level_notification_channel),
 | 
			
		||||
            self._t.transform('modules.level.new_level_message'.format(member.id, level.name)),
 | 
			
		||||
            is_persistent=True
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    async def check_level(self, member: discord.Member):
 | 
			
		||||
        if member.bot:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        server = self._servers.get_server_by_discord_id(member.guild.id)
 | 
			
		||||
        user = self._users.find_user_by_discord_id_and_server_id(member.id, server.server_id)
 | 
			
		||||
        if user is None:
 | 
			
		||||
            self._logger.warn(__name__, f'User not found {member.guild.name}@{member.name}')
 | 
			
		||||
 | 
			
		||||
        await self.set_level(user)
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.moderator'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.moderator.command'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.permission'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports: 
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.permission.abc'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.permission.configuration'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.permission.events'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports:
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ __title__ = 'modules.permission.service'
 | 
			
		||||
__author__ = 'Sven Heidemann'
 | 
			
		||||
__license__ = 'MIT'
 | 
			
		||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
 | 
			
		||||
__version__ = '0.3.dev70'
 | 
			
		||||
__version__ = '0.3.dev25'
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
			
		||||
# imports
 | 
			
		||||
 | 
			
		||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev70')
 | 
			
		||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user