Compare commits
41 Commits
bbad4100dc
...
1.2.3
Author | SHA1 | Date | |
---|---|---|---|
db61a764eb | |||
919eef79f6 | |||
a2dd447dbd | |||
8a76b46165 | |||
af3084ad36 | |||
285b8bdbe4 | |||
e2da4f09ee | |||
4ed99da689 | |||
bc94d31a8d | |||
0d3db75190 | |||
090f217f93 | |||
b98828fce3 | |||
5f8ae787f0 | |||
0c807a7de7 | |||
2dc60acaa6 | |||
29ea96a5e5 | |||
026331b397 | |||
bfe74ad1c5 | |||
7c8c2bef70 | |||
4ccb57e6a3 | |||
c8d3bf780d | |||
8788b727c5 | |||
5e9280d972 | |||
bd856d0143 | |||
da57063b68 | |||
171aa63df9 | |||
74dba4b981 | |||
a3ebd07093 | |||
2de5afd648 | |||
e8cc42e155 | |||
20e20969e4 | |||
802d5478d1 | |||
05f718f3ae | |||
7682b966a8 | |||
7cb4f03554 | |||
b1b74b2551 | |||
25df0e4876 | |||
5de6710261 | |||
e99e272029 | |||
650f612a6b | |||
d2c37a0098 |
@@ -15,7 +15,7 @@ __title__ = "bot"
|
|||||||
__author__ = "Sven Heidemann"
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
|||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="1")
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
0
bot/src/bot/bot
Normal file → Executable file
0
bot/src/bot/bot
Normal file → Executable file
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@@ -15,7 +15,7 @@ __title__ = "bot.extension"
|
|||||||
__author__ = "Sven Heidemann"
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
|||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="1")
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
22
bot/src/bot/extension/clean_logs_extension.py
Normal file
22
bot/src/bot/extension/clean_logs_extension.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from cpl_core.application.application_extension_abc import ApplicationExtensionABC
|
||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
|
||||||
|
class CleanLogsExtension(ApplicationExtensionABC):
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
async def run(self, config: ConfigurationABC, services: ServiceProviderABC):
|
||||||
|
(
|
||||||
|
List(str, os.listdir("logs/"))
|
||||||
|
.where(lambda x: os.path.isdir(f"logs/{x}"))
|
||||||
|
.order_by()
|
||||||
|
.where(lambda x: (datetime.now() - datetime.strptime(x, "%Y-%m-%d")).days >= 7)
|
||||||
|
.for_each(lambda x: shutil.rmtree(f"logs/{x}"))
|
||||||
|
)
|
@@ -6,6 +6,7 @@ from cpl_core.application import ApplicationBuilder
|
|||||||
from cpl_core.console import Console
|
from cpl_core.console import Console
|
||||||
|
|
||||||
from bot.application import Application
|
from bot.application import Application
|
||||||
|
from bot.extension.clean_logs_extension import CleanLogsExtension
|
||||||
from bot.extension.init_bot_extension import InitBotExtension
|
from bot.extension.init_bot_extension import InitBotExtension
|
||||||
from bot.startup import Startup
|
from bot.startup import Startup
|
||||||
from bot.startup_discord_extension import StartupDiscordExtension
|
from bot.startup_discord_extension import StartupDiscordExtension
|
||||||
@@ -31,6 +32,7 @@ class Program:
|
|||||||
.use_extension(StartupDiscordExtension)
|
.use_extension(StartupDiscordExtension)
|
||||||
.use_extension(StartupModuleExtension)
|
.use_extension(StartupModuleExtension)
|
||||||
.use_extension(StartupMigrationExtension)
|
.use_extension(StartupMigrationExtension)
|
||||||
|
.use_extension(CleanLogsExtension)
|
||||||
.use_extension(DatabaseExtension)
|
.use_extension(DatabaseExtension)
|
||||||
.use_extension(ConfigExtension)
|
.use_extension(ConfigExtension)
|
||||||
.use_extension(InitBotExtension)
|
.use_extension(InitBotExtension)
|
||||||
|
@@ -15,7 +15,7 @@ __title__ = "bot_api"
|
|||||||
__author__ = "Sven Heidemann"
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
|||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="1")
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.abc'
|
__title__ = "bot_api.abc"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "",
|
"Author": "",
|
||||||
"AuthorEmail": "",
|
"AuthorEmail": "",
|
||||||
|
@@ -15,7 +15,7 @@ __title__ = "bot_api.configuration"
|
|||||||
__author__ = "Sven Heidemann"
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
|||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="1")
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.controller'
|
__title__ = "bot_api.controller"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -14,7 +14,10 @@ from bot_api.model.reset_password_dto import ResetPasswordDTO
|
|||||||
from bot_api.model.token_dto import TokenDTO
|
from bot_api.model.token_dto import TokenDTO
|
||||||
from bot_api.model.update_auth_user_dto import UpdateAuthUserDTO
|
from bot_api.model.update_auth_user_dto import UpdateAuthUserDTO
|
||||||
from bot_api.route.route import Route
|
from bot_api.route.route import Route
|
||||||
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
|
|
||||||
|
|
||||||
class AuthController:
|
class AuthController:
|
||||||
@@ -30,6 +33,7 @@ class AuthController:
|
|||||||
mail_settings: EMailClientSettings,
|
mail_settings: EMailClientSettings,
|
||||||
mailer: EMailClientABC,
|
mailer: EMailClientABC,
|
||||||
auth_service: AuthServiceABC,
|
auth_service: AuthServiceABC,
|
||||||
|
technician_config: TechnicianConfig,
|
||||||
):
|
):
|
||||||
self._config = config
|
self._config = config
|
||||||
self._env = env
|
self._env = env
|
||||||
@@ -39,6 +43,7 @@ class AuthController:
|
|||||||
self._mail_settings = mail_settings
|
self._mail_settings = mail_settings
|
||||||
self._mailer = mailer
|
self._mailer = mailer
|
||||||
self._auth_service = auth_service
|
self._auth_service = auth_service
|
||||||
|
self._technician_config = technician_config
|
||||||
|
|
||||||
@Route.get(f"{BasePath}/users")
|
@Route.get(f"{BasePath}/users")
|
||||||
@Route.authorize(role=AuthRoleEnum.admin)
|
@Route.authorize(role=AuthRoleEnum.admin)
|
||||||
@@ -70,17 +75,32 @@ class AuthController:
|
|||||||
|
|
||||||
@Route.post(f"{BasePath}/register")
|
@Route.post(f"{BasePath}/register")
|
||||||
async def register(self):
|
async def register(self):
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(
|
||||||
|
self._technician_config.feature_flags, FeatureFlagsEnum.basic_registration
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
||||||
self._auth_service.add_auth_user(dto)
|
self._auth_service.add_auth_user(dto)
|
||||||
return "", 200
|
return "", 200
|
||||||
|
|
||||||
@Route.post(f"{BasePath}/register-by-id/<id>")
|
@Route.post(f"{BasePath}/register-by-id/<id>")
|
||||||
async def register_id(self, id: str):
|
async def register_id(self, id: str):
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(
|
||||||
|
self._technician_config.feature_flags, FeatureFlagsEnum.basic_registration
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
result = await self._auth_service.confirm_email_async(id)
|
result = await self._auth_service.confirm_email_async(id)
|
||||||
return jsonify(result)
|
return jsonify(result)
|
||||||
|
|
||||||
@Route.post(f"{BasePath}/login")
|
@Route.post(f"{BasePath}/login")
|
||||||
async def login(self) -> Response:
|
async def login(self) -> Response:
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(
|
||||||
|
self._technician_config.feature_flags, FeatureFlagsEnum.basic_login
|
||||||
|
):
|
||||||
|
return jsonify({})
|
||||||
|
|
||||||
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
||||||
result = await self._auth_service.login_async(dto)
|
result = await self._auth_service.login_async(dto)
|
||||||
return jsonify(result.to_dict())
|
return jsonify(result.to_dict())
|
||||||
@@ -100,6 +120,11 @@ class AuthController:
|
|||||||
|
|
||||||
@Route.post(f"{BasePath}/forgot-password/<email>")
|
@Route.post(f"{BasePath}/forgot-password/<email>")
|
||||||
async def forgot_password(self, email: str):
|
async def forgot_password(self, email: str):
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(
|
||||||
|
self._technician_config.feature_flags, FeatureFlagsEnum.basic_login
|
||||||
|
):
|
||||||
|
return "", 409
|
||||||
|
|
||||||
await self._auth_service.forgot_password_async(email)
|
await self._auth_service.forgot_password_async(email)
|
||||||
return "", 200
|
return "", 200
|
||||||
|
|
||||||
@@ -110,6 +135,11 @@ class AuthController:
|
|||||||
|
|
||||||
@Route.post(f"{BasePath}/reset-password")
|
@Route.post(f"{BasePath}/reset-password")
|
||||||
async def reset_password(self):
|
async def reset_password(self):
|
||||||
|
if not FeatureFlagsSettings.get_flag_from_dict(
|
||||||
|
self._technician_config.feature_flags, FeatureFlagsEnum.basic_login
|
||||||
|
):
|
||||||
|
return "", 409
|
||||||
|
|
||||||
dto: ResetPasswordDTO = JSONProcessor.process(ResetPasswordDTO, request.get_json(force=True, silent=True))
|
dto: ResetPasswordDTO = JSONProcessor.process(ResetPasswordDTO, request.get_json(force=True, silent=True))
|
||||||
await self._auth_service.reset_password_async(dto)
|
await self._auth_service.reset_password_async(dto)
|
||||||
return "", 200
|
return "", 200
|
||||||
|
@@ -12,6 +12,9 @@ from bot_api.logging.api_logger import ApiLogger
|
|||||||
from bot_api.model.settings_dto import SettingsDTO
|
from bot_api.model.settings_dto import SettingsDTO
|
||||||
from bot_api.model.version_dto import VersionDTO
|
from bot_api.model.version_dto import VersionDTO
|
||||||
from bot_api.route.route import Route
|
from bot_api.route.route import Route
|
||||||
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
|
|
||||||
|
|
||||||
class GuiController:
|
class GuiController:
|
||||||
@@ -82,3 +85,11 @@ class GuiController:
|
|||||||
)
|
)
|
||||||
self._mailer.send_mail(mail)
|
self._mailer.send_mail(mail)
|
||||||
return "", 200
|
return "", 200
|
||||||
|
|
||||||
|
@Route.get(f"{BasePath}/has-feature-flag/<flag>")
|
||||||
|
async def has_feature_flag(self, flag: str):
|
||||||
|
settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig)
|
||||||
|
return {
|
||||||
|
"key": flag,
|
||||||
|
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)),
|
||||||
|
}
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.event'
|
__title__ = "bot_api.event"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.exception'
|
__title__ = "bot_api.exception"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.filter'
|
__title__ = "bot_api.filter"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.filter.discord'
|
__title__ = "bot_api.filter.discord"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.logging'
|
__title__ = "bot_api.logging"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.model'
|
__title__ = "bot_api.model"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.model.discord'
|
__title__ = "bot_api.model.discord"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.route'
|
__title__ = "bot_api.route"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.service'
|
__title__ = "bot_api.service"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_api.transformer'
|
__title__ = "bot_api.transformer"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core'
|
__title__ = "bot_core"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.abc'
|
__title__ = "bot_core.abc"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -21,7 +21,7 @@ class TaskABC(commands.Cog):
|
|||||||
|
|
||||||
@ServiceProviderABC.inject
|
@ServiceProviderABC.inject
|
||||||
async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC):
|
async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC):
|
||||||
logger.debug(__name__, f"Waiting before {type(self).__name__}")
|
logger.debug(__name__, f"Waiting before ready {type(self).__name__}")
|
||||||
await bot.wait_until_ready()
|
await bot.wait_until_ready()
|
||||||
|
|
||||||
async def wait():
|
async def wait():
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.configuration'
|
__title__ = "bot_core.configuration"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -27,3 +27,6 @@ class FeatureFlagsEnum(Enum):
|
|||||||
short_role_name = "ShortRoleName"
|
short_role_name = "ShortRoleName"
|
||||||
technician_full_access = "TechnicianFullAccess"
|
technician_full_access = "TechnicianFullAccess"
|
||||||
steam_special_offers = "SteamSpecialOffers"
|
steam_special_offers = "SteamSpecialOffers"
|
||||||
|
scheduled_events = "ScheduledEvents"
|
||||||
|
basic_registration = "BasicRegistration"
|
||||||
|
basic_login = "BasicLogin"
|
||||||
|
@@ -29,6 +29,9 @@ class FeatureFlagsSettings(ConfigurationModelABC):
|
|||||||
FeatureFlagsEnum.short_role_name.value: False, # 28.09.2023 #378
|
FeatureFlagsEnum.short_role_name.value: False, # 28.09.2023 #378
|
||||||
FeatureFlagsEnum.technician_full_access.value: False, # 03.10.2023 #393
|
FeatureFlagsEnum.technician_full_access.value: False, # 03.10.2023 #393
|
||||||
FeatureFlagsEnum.steam_special_offers.value: False, # 11.10.2023 #188
|
FeatureFlagsEnum.steam_special_offers.value: False, # 11.10.2023 #188
|
||||||
|
FeatureFlagsEnum.scheduled_events.value: False, # 14.11.2023 #410
|
||||||
|
FeatureFlagsEnum.basic_registration.value: False, # 19.11.2023 #440
|
||||||
|
FeatureFlagsEnum.basic_login.value: False, # 19.11.2023 #440
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, **kwargs: dict):
|
def __init__(self, **kwargs: dict):
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.core_extension'
|
__title__ = "bot_core.core_extension"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.events'
|
__title__ = "bot_core.events"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.exception'
|
__title__ = "bot_core.exception"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.helper'
|
__title__ = "bot_core.helper"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.logging'
|
__title__ = "bot_core.logging"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.pipes'
|
__title__ = "bot_core.pipes"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_core.service'
|
__title__ = "bot_core.service"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_data'
|
__title__ = "bot_data"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_data.abc'
|
__title__ = "bot_data.abc"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
35
bot/src/bot_data/abc/scheduled_event_repository_abc.py
Normal file
35
bot/src/bot_data/abc/scheduled_event_repository_abc.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
from bot_data.model.scheduled_event import ScheduledEvent
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventRepositoryABC(ABC):
|
||||||
|
@abstractmethod
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_scheduled_events(self) -> List[ScheduledEvent]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_scheduled_event_by_id(self, id: int) -> ScheduledEvent:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_scheduled_events_by_server_id(self, id: int) -> List[ScheduledEvent]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def add_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def update_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def delete_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
pass
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@@ -14,6 +14,7 @@ from bot_data.abc.data_seeder_abc import DataSeederABC
|
|||||||
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
||||||
|
from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC
|
||||||
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
||||||
@@ -45,6 +46,7 @@ from bot_data.service.client_repository_service import ClientRepositoryService
|
|||||||
from bot_data.service.game_server_repository_service import GameServerRepositoryService
|
from bot_data.service.game_server_repository_service import GameServerRepositoryService
|
||||||
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
|
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
|
||||||
from bot_data.service.level_repository_service import LevelRepositoryService
|
from bot_data.service.level_repository_service import LevelRepositoryService
|
||||||
|
from bot_data.service.scheduled_event_repository_service import ScheduledEventRepositoryService
|
||||||
from bot_data.service.seeder_service import SeederService
|
from bot_data.service.seeder_service import SeederService
|
||||||
from bot_data.service.server_config_repository_service import (
|
from bot_data.service.server_config_repository_service import (
|
||||||
ServerConfigRepositoryService,
|
ServerConfigRepositoryService,
|
||||||
@@ -115,6 +117,7 @@ class DataModule(ModuleABC):
|
|||||||
services.add_transient(ServerConfigRepositoryABC, ServerConfigRepositoryService)
|
services.add_transient(ServerConfigRepositoryABC, ServerConfigRepositoryService)
|
||||||
services.add_transient(ShortRoleNameRepositoryABC, ShortRoleNameRepositoryService)
|
services.add_transient(ShortRoleNameRepositoryABC, ShortRoleNameRepositoryService)
|
||||||
services.add_transient(SteamSpecialOfferRepositoryABC, SteamSpecialOfferRepositoryService)
|
services.add_transient(SteamSpecialOfferRepositoryABC, SteamSpecialOfferRepositoryService)
|
||||||
|
services.add_transient(ScheduledEventRepositoryABC, ScheduledEventRepositoryService)
|
||||||
|
|
||||||
services.add_transient(SeederService)
|
services.add_transient(SeederService)
|
||||||
services.add_transient(DataSeederABC, TechnicianConfigSeeder)
|
services.add_transient(DataSeederABC, TechnicianConfigSeeder)
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_data.model'
|
__title__ = "bot_data.model"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
188
bot/src/bot_data/model/scheduled_event.py
Normal file
188
bot/src/bot_data/model/scheduled_event.py
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from cpl_core.database import TableABC
|
||||||
|
|
||||||
|
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
|
||||||
|
from bot_data.model.server import Server
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEvent(TableABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
interval: ScheduledEventIntervalEnum,
|
||||||
|
name: str,
|
||||||
|
description: str,
|
||||||
|
channel_id: int,
|
||||||
|
start_time: datetime,
|
||||||
|
end_time: Optional[datetime],
|
||||||
|
entity_type: discord.EntityType,
|
||||||
|
location: Optional[str],
|
||||||
|
server: Optional[Server],
|
||||||
|
created_at: datetime = None,
|
||||||
|
modified_at: datetime = None,
|
||||||
|
id=0,
|
||||||
|
):
|
||||||
|
self._id = id
|
||||||
|
self._interval = interval
|
||||||
|
self._name = name
|
||||||
|
self._description = description
|
||||||
|
self._channel_id = channel_id
|
||||||
|
self._start_time = start_time
|
||||||
|
self._end_time = end_time
|
||||||
|
self._entity_type = entity_type
|
||||||
|
self._location = location
|
||||||
|
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 interval(self) -> ScheduledEventIntervalEnum:
|
||||||
|
return self._interval
|
||||||
|
|
||||||
|
@interval.setter
|
||||||
|
def interval(self, value: ScheduledEventIntervalEnum):
|
||||||
|
self._interval = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self) -> str:
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@name.setter
|
||||||
|
def name(self, value: str):
|
||||||
|
self._name = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
return self._description
|
||||||
|
|
||||||
|
@description.setter
|
||||||
|
def description(self, value: str):
|
||||||
|
self._description = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def channel_id(self) -> int:
|
||||||
|
return self._channel_id
|
||||||
|
|
||||||
|
@channel_id.setter
|
||||||
|
def channel_id(self, value: int):
|
||||||
|
self._channel_id = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def start_time(self) -> datetime:
|
||||||
|
return self._start_time
|
||||||
|
|
||||||
|
@start_time.setter
|
||||||
|
def start_time(self, value: datetime):
|
||||||
|
self._start_time = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def end_time(self) -> datetime:
|
||||||
|
return self._end_time
|
||||||
|
|
||||||
|
@end_time.setter
|
||||||
|
def end_time(self, value: datetime):
|
||||||
|
self._end_time = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def entity_type(self) -> discord.EntityType:
|
||||||
|
return self._entity_type
|
||||||
|
|
||||||
|
@entity_type.setter
|
||||||
|
def entity_type(self, value: discord.EntityType):
|
||||||
|
self._entity_type = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def location(self) -> str:
|
||||||
|
return self._location
|
||||||
|
|
||||||
|
@location.setter
|
||||||
|
def location(self, value: str):
|
||||||
|
self._location = 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 `ScheduledEvents`;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_select_by_id_string(id: int) -> str:
|
||||||
|
return str(
|
||||||
|
f"""
|
||||||
|
SELECT * FROM `ScheduledEvents`
|
||||||
|
WHERE `Id` = {id};
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_select_by_server_id_string(s_id: int) -> str:
|
||||||
|
return str(
|
||||||
|
f"""
|
||||||
|
SELECT * FROM `ScheduledEvents`
|
||||||
|
WHERE `ServerId` = {s_id};
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def insert_string(self) -> str:
|
||||||
|
return str(
|
||||||
|
f"""
|
||||||
|
INSERT INTO `ScheduledEvents` (
|
||||||
|
`Interval`, `Name`, `Description`, `ChannelId`, `StartTime`, `EndTime`, `EntityType`, `Location`, `ServerId`
|
||||||
|
) VALUES (
|
||||||
|
'{self._interval.value}',
|
||||||
|
'{self._name}',
|
||||||
|
{"NULL" if self._description is None else f"'{self._description}'"},
|
||||||
|
{"NULL" if self._channel_id is None else f"'{self._channel_id}'"},
|
||||||
|
'{self._start_time}',
|
||||||
|
{"NULL" if self._end_time is None else f"'{self._end_time}'"},
|
||||||
|
'{self._entity_type.value}',
|
||||||
|
{"NULL" if self._location is None else f"'{self._location}'"},
|
||||||
|
{self._server.id}
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def udpate_string(self) -> str:
|
||||||
|
return str(
|
||||||
|
f"""
|
||||||
|
UPDATE `ScheduledEvents`
|
||||||
|
SET `Interval` = '{self._interval.value}',
|
||||||
|
`Name` = '{self._name}',
|
||||||
|
`Description` = {"NULL" if self._description is None else f"'{self._description}'"},
|
||||||
|
`ChannelId` = {"NULL" if self._channel_id is None else f"'{self._channel_id}'"},
|
||||||
|
`StartTime` = '{self._start_time}',
|
||||||
|
`EndTime` = {"NULL" if self._end_time is None else f"'{self._end_time}'"},
|
||||||
|
`EntityType` = '{self._entity_type.value}',
|
||||||
|
`Location` = {"NULL" if self._location is None else f"'{self._location}'"}
|
||||||
|
WHERE `Id` = {self._id};
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def delete_string(self) -> str:
|
||||||
|
return str(
|
||||||
|
f"""
|
||||||
|
DELETE FROM `ScheduledEvents`
|
||||||
|
WHERE `Id` = {self._id};
|
||||||
|
"""
|
||||||
|
)
|
118
bot/src/bot_data/model/scheduled_event_history.py
Normal file
118
bot/src/bot_data/model/scheduled_event_history.py
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from cpl_core.database import TableABC
|
||||||
|
|
||||||
|
from bot_data.abc.history_table_abc import HistoryTableABC
|
||||||
|
from bot_data.model.server import Server
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventHistory(HistoryTableABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
interval: str,
|
||||||
|
name: str,
|
||||||
|
description: str,
|
||||||
|
channel_id: int,
|
||||||
|
start_time: datetime,
|
||||||
|
end_time: Optional[datetime],
|
||||||
|
entity_type: discord.EntityType,
|
||||||
|
location: Optional[str],
|
||||||
|
server: Optional[Server],
|
||||||
|
deleted: bool,
|
||||||
|
date_from: str,
|
||||||
|
date_to: str,
|
||||||
|
id=0,
|
||||||
|
):
|
||||||
|
HistoryTableABC.__init__(self)
|
||||||
|
self._id = id
|
||||||
|
self._interval = interval
|
||||||
|
self._name = name
|
||||||
|
self._description = description
|
||||||
|
self._channel_id = channel_id
|
||||||
|
self._start_time = start_time
|
||||||
|
self._end_time = end_time
|
||||||
|
self._entity_type = entity_type
|
||||||
|
self._location = location
|
||||||
|
self._server = server
|
||||||
|
|
||||||
|
self._deleted = deleted
|
||||||
|
self._date_from = date_from
|
||||||
|
self._date_to = date_to
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self) -> int:
|
||||||
|
return self._id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def interval(self) -> str:
|
||||||
|
return self._interval
|
||||||
|
|
||||||
|
@interval.setter
|
||||||
|
def interval(self, value: str):
|
||||||
|
self._interval = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self) -> str:
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@name.setter
|
||||||
|
def name(self, value: str):
|
||||||
|
self._name = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
return self._description
|
||||||
|
|
||||||
|
@description.setter
|
||||||
|
def description(self, value: str):
|
||||||
|
self._description = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def channel_id(self) -> int:
|
||||||
|
return self._channel_id
|
||||||
|
|
||||||
|
@channel_id.setter
|
||||||
|
def channel_id(self, value: int):
|
||||||
|
self._channel_id = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def start_time(self) -> datetime:
|
||||||
|
return self._start_time
|
||||||
|
|
||||||
|
@start_time.setter
|
||||||
|
def start_time(self, value: datetime):
|
||||||
|
self._start_time = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def end_time(self) -> datetime:
|
||||||
|
return self._end_time
|
||||||
|
|
||||||
|
@end_time.setter
|
||||||
|
def end_time(self, value: datetime):
|
||||||
|
self._end_time = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def entity_type(self) -> discord.EntityType:
|
||||||
|
return self._entity_type
|
||||||
|
|
||||||
|
@entity_type.setter
|
||||||
|
def entity_type(self, value: discord.EntityType):
|
||||||
|
self._entity_type = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def location(self) -> str:
|
||||||
|
return self._location
|
||||||
|
|
||||||
|
@location.setter
|
||||||
|
def location(self, value: str):
|
||||||
|
self._location = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def server(self) -> Server:
|
||||||
|
return self._server
|
||||||
|
|
||||||
|
@server.setter
|
||||||
|
def server(self, value: Server):
|
||||||
|
self._server = value
|
8
bot/src/bot_data/model/scheduled_event_interval_enum.py
Normal file
8
bot/src/bot_data/model/scheduled_event_interval_enum.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventIntervalEnum(Enum):
|
||||||
|
daily = "daily"
|
||||||
|
weekly = "weekly"
|
||||||
|
monthly = "monthly"
|
||||||
|
yearly = "yearly"
|
@@ -1,8 +1,6 @@
|
|||||||
ALTER TABLE CFG_Technician
|
ALTER TABLE CFG_Technician
|
||||||
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE CFG_TechnicianHistory
|
ALTER TABLE CFG_TechnicianHistory
|
||||||
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
||||||
|
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
DROP TABLE `ShortRoleNames`;
|
||||||
|
|
||||||
|
DROP TABLE `ShortRoleNamesHistory`;
|
83
bot/src/bot_data/scripts/1.2.2/1_ScheduledEvents_up.sql
Normal file
83
bot/src/bot_data/scripts/1.2.2/1_ScheduledEvents_up.sql
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS `ScheduledEvents`
|
||||||
|
(
|
||||||
|
`Id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||||
|
`Interval` ENUM ('daily', 'weekly', 'monthly', 'yearly') NOT NULL,
|
||||||
|
`Name` VARCHAR(255) NOT NULL,
|
||||||
|
`Description` VARCHAR(255) NULL,
|
||||||
|
`ChannelId` BIGINT NULL,
|
||||||
|
`StartTime` DATETIME(6) NOT NULL,
|
||||||
|
`EndTime` DATETIME(6) NULL,
|
||||||
|
`EntityType` ENUM ('1','2','3') NOT NULL,
|
||||||
|
`Location` VARCHAR(255) NULL,
|
||||||
|
`ServerId` BIGINT,
|
||||||
|
`CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||||
|
`LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||||
|
PRIMARY KEY (`Id`),
|
||||||
|
FOREIGN KEY (`ServerId`) REFERENCES `Servers` (`ServerId`)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `ScheduledEventsHistory`
|
||||||
|
(
|
||||||
|
`Id` BIGINT(20) NOT NULL,
|
||||||
|
`Interval` ENUM ('daily', 'weekly', 'monthly', 'yearly') NOT NULL,
|
||||||
|
`Name` VARCHAR(255) NOT NULL,
|
||||||
|
`Description` VARCHAR(255) NULL,
|
||||||
|
`ChannelId` BIGINT NULL,
|
||||||
|
`StartTime` DATETIME(6) NOT NULL,
|
||||||
|
`EndTime` DATETIME(6) NULL,
|
||||||
|
`EntityType` ENUM ('1','2','3') NOT NULL,
|
||||||
|
`Location` VARCHAR(255) NULL,
|
||||||
|
`ServerId` BIGINT(20) DEFAULT NULL,
|
||||||
|
`Deleted` BOOL DEFAULT FALSE,
|
||||||
|
`DateFrom` DATETIME(6) NOT NULL,
|
||||||
|
`DateTo` DATETIME(6) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS `TR_ScheduledEventsUpdate`;
|
||||||
|
|
||||||
|
CREATE TRIGGER `TR_ScheduledEventsUpdate`
|
||||||
|
AFTER UPDATE
|
||||||
|
ON `ScheduledEvents`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO `ScheduledEventsHistory` (`Id`,
|
||||||
|
`Interval`,
|
||||||
|
`Name`,
|
||||||
|
`Description`,
|
||||||
|
`ChannelId`,
|
||||||
|
`StartTime`,
|
||||||
|
`EndTime`,
|
||||||
|
`EntityType`,
|
||||||
|
`Location`,
|
||||||
|
`ServerId`,
|
||||||
|
`DateFrom`,
|
||||||
|
`DateTo`)
|
||||||
|
VALUES (OLD.Id, OLD.Interval, OLD.Name, OLD.Description, OLD.ChannelId, OLD.StartTime, OLD.EndTime, OLD.EntityType,
|
||||||
|
OLD.Location, OLD.ServerId, OLD.LastModifiedAt,
|
||||||
|
CURRENT_TIMESTAMP(6));
|
||||||
|
END;
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS `TR_ScheduledEventsDelete`;
|
||||||
|
|
||||||
|
CREATE TRIGGER `TR_ScheduledEventsDelete`
|
||||||
|
AFTER DELETE
|
||||||
|
ON `ScheduledEvents`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO `ScheduledEventsHistory` (`Id`,
|
||||||
|
`Interval`,
|
||||||
|
`Name`,
|
||||||
|
`Description`,
|
||||||
|
`ChannelId`,
|
||||||
|
`StartTime`,
|
||||||
|
`EndTime`,
|
||||||
|
`EntityType`,
|
||||||
|
`Location`,
|
||||||
|
`ServerId`,
|
||||||
|
`Deleted`,
|
||||||
|
`DateFrom`,
|
||||||
|
`DateTo`)
|
||||||
|
VALUES (OLD.Id, OLD.Interval, OLD.Name, OLD.Description, OLD.ChannelId, OLD.StartTime, OLD.EndTime, OLD.EntityType,
|
||||||
|
OLD.Location, OLD.ServerId, TRUE, OLD.LastModifiedAt,
|
||||||
|
CURRENT_TIMESTAMP(6));
|
||||||
|
END;
|
@@ -15,7 +15,7 @@ __title__ = "bot_data.service"
|
|||||||
__author__ = "Sven Heidemann"
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
|||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major="1", minor="2", micro="1")
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -67,7 +67,7 @@ class MigrationService:
|
|||||||
|
|
||||||
def _load_scripts(self, upgrade: bool = True) -> List[Migration]:
|
def _load_scripts(self, upgrade: bool = True) -> List[Migration]:
|
||||||
migrations = List(Migration)
|
migrations = List(Migration)
|
||||||
path = "../../src/bot_data/scripts"
|
path = "../bot_data/scripts"
|
||||||
|
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
raise Exception("Migration path not found")
|
raise Exception("Migration path not found")
|
||||||
|
@@ -0,0 +1,91 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
|
from cpl_query.extension import List
|
||||||
|
from discord import EntityType
|
||||||
|
|
||||||
|
from bot_core.logging.database_logger import DatabaseLogger
|
||||||
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
|
from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC
|
||||||
|
from bot_data.model.scheduled_event import ScheduledEvent
|
||||||
|
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventRepositoryService(ScheduledEventRepositoryABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
logger: DatabaseLogger,
|
||||||
|
db_context: DatabaseContextABC,
|
||||||
|
servers: ServerRepositoryABC,
|
||||||
|
):
|
||||||
|
self._logger = logger
|
||||||
|
self._context = db_context
|
||||||
|
|
||||||
|
self._servers = servers
|
||||||
|
|
||||||
|
ScheduledEventRepositoryABC.__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 _scheduled_event_from_result(self, sql_result: tuple) -> ScheduledEvent:
|
||||||
|
return ScheduledEvent(
|
||||||
|
self._get_value_from_result(ScheduledEventIntervalEnum(sql_result[1])), # interval
|
||||||
|
self._get_value_from_result(sql_result[2]), # name
|
||||||
|
self._get_value_from_result(sql_result[3]), # description
|
||||||
|
int(self._get_value_from_result(sql_result[4])), # channel_id
|
||||||
|
self._get_value_from_result(sql_result[5]), # start_time
|
||||||
|
self._get_value_from_result(sql_result[6]), # end_time
|
||||||
|
EntityType(int(self._get_value_from_result(sql_result[7]))), # entity_type
|
||||||
|
self._get_value_from_result(sql_result[8]), # location
|
||||||
|
self._servers.get_server_by_id((sql_result[9])), # server
|
||||||
|
self._get_value_from_result(sql_result[10]), # created_at
|
||||||
|
self._get_value_from_result(sql_result[11]), # modified_at
|
||||||
|
id=self._get_value_from_result(sql_result[0]),
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_scheduled_events(self) -> List[ScheduledEvent]:
|
||||||
|
scheduled_events = List(ScheduledEvent)
|
||||||
|
self._logger.trace(__name__, f"Send SQL command: {ScheduledEvent.get_select_all_string()}")
|
||||||
|
results = self._context.select(ScheduledEvent.get_select_all_string())
|
||||||
|
for result in results:
|
||||||
|
self._logger.trace(__name__, f"Get scheduled_event with id {result[0]}")
|
||||||
|
scheduled_events.append(self._scheduled_event_from_result(result))
|
||||||
|
|
||||||
|
return scheduled_events
|
||||||
|
|
||||||
|
def get_scheduled_event_by_id(self, id: int) -> ScheduledEvent:
|
||||||
|
self._logger.trace(__name__, f"Send SQL command: {ScheduledEvent.get_select_by_id_string(id)}")
|
||||||
|
result = self._context.select(ScheduledEvent.get_select_by_id_string(id))[0]
|
||||||
|
|
||||||
|
return self._scheduled_event_from_result(result)
|
||||||
|
|
||||||
|
def get_scheduled_events_by_server_id(self, server_id: int) -> List[ScheduledEvent]:
|
||||||
|
scheduled_events = List(ScheduledEvent)
|
||||||
|
self._logger.trace(
|
||||||
|
__name__,
|
||||||
|
f"Send SQL command: {ScheduledEvent.get_select_by_server_id_string(server_id)}",
|
||||||
|
)
|
||||||
|
results = self._context.select(ScheduledEvent.get_select_by_server_id_string(server_id))
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
self._logger.trace(__name__, f"Get scheduled_event with id {result[0]}")
|
||||||
|
scheduled_events.append(self._scheduled_event_from_result(result))
|
||||||
|
|
||||||
|
return scheduled_events
|
||||||
|
|
||||||
|
def add_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
self._logger.trace(__name__, f"Send SQL command: {scheduled_event.insert_string}")
|
||||||
|
self._context.cursor.execute(scheduled_event.insert_string)
|
||||||
|
|
||||||
|
def update_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
self._logger.trace(__name__, f"Send SQL command: {scheduled_event.udpate_string}")
|
||||||
|
self._context.cursor.execute(scheduled_event.udpate_string)
|
||||||
|
|
||||||
|
def delete_scheduled_event(self, scheduled_event: ScheduledEvent):
|
||||||
|
self._logger.trace(__name__, f"Send SQL command: {scheduled_event.delete_string}")
|
||||||
|
self._context.cursor.execute(scheduled_event.delete_string)
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql'
|
__title__ = "bot_graphql"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.abc'
|
__title__ = "bot_graphql.abc"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
import functools
|
import functools
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from inspect import signature, Parameter
|
from inspect import signature, Parameter
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_core.type import R, T
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
|
||||||
@@ -52,3 +54,18 @@ class FilterABC(ABC):
|
|||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
|
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
def _get_attributes_from_dict(self, attrs: list[tuple[str, type]], values: dict):
|
||||||
|
for key_pair in attrs:
|
||||||
|
attr = key_pair[0]
|
||||||
|
attr_type = key_pair[1]
|
||||||
|
if attr in values:
|
||||||
|
self.__setattr__(f"_{attr}", attr_type(values[attr]))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _filter_by_attributes(attrs: list[dict], values: List[T]) -> List[R]:
|
||||||
|
for attr in attrs:
|
||||||
|
if attr["attr"] is None:
|
||||||
|
continue
|
||||||
|
values = values.where(attr["func"])
|
||||||
|
return values
|
||||||
|
@@ -20,6 +20,7 @@ from bot_data.model.auto_role_rule import AutoRoleRule
|
|||||||
from bot_data.model.client import Client
|
from bot_data.model.client import Client
|
||||||
from bot_data.model.known_user import KnownUser
|
from bot_data.model.known_user import KnownUser
|
||||||
from bot_data.model.level import Level
|
from bot_data.model.level import Level
|
||||||
|
from bot_data.model.scheduled_event import ScheduledEvent
|
||||||
from bot_data.model.server import Server
|
from bot_data.model.server import Server
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from bot_data.model.short_role_name import ShortRoleName
|
from bot_data.model.short_role_name import ShortRoleName
|
||||||
@@ -213,6 +214,16 @@ class QueryABC(ObjectType):
|
|||||||
access = True
|
access = True
|
||||||
break
|
break
|
||||||
|
|
||||||
|
elif type(element) == ScheduledEvent:
|
||||||
|
element: ScheduledEvent = element
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
guild = bot.get_guild(u.server.discord_id)
|
||||||
|
member = guild.get_member(u.discord_id)
|
||||||
|
if permissions.is_member_moderator(member) and u.server.id == element.server.id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
elif type(element) == dict and "key" in element and element["key"] in [e.value for e in FeatureFlagsEnum]:
|
elif type(element) == dict and "key" in element and element["key"] in [e.value for e in FeatureFlagsEnum]:
|
||||||
for u in user.users:
|
for u in user.users:
|
||||||
u: User = u
|
u: User = u
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.filter'
|
__title__ = "bot_graphql.filter"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
71
bot/src/bot_graphql/filter/scheduled_event_filter.py
Normal file
71
bot/src/bot_graphql/filter/scheduled_event_filter.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
from bot_data.model.scheduled_event import ScheduledEvent
|
||||||
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventFilter(FilterABC):
|
||||||
|
def __init__(self, bot: DiscordBotServiceABC, services: ServiceProviderABC):
|
||||||
|
FilterABC.__init__(self)
|
||||||
|
self._bot = bot
|
||||||
|
self._services = services
|
||||||
|
|
||||||
|
self._id = None
|
||||||
|
self._interval = None
|
||||||
|
self._name = None
|
||||||
|
self._description = None
|
||||||
|
self._channel_id = None
|
||||||
|
self._start_time = None
|
||||||
|
self._end_time = None
|
||||||
|
self._entity_type = None
|
||||||
|
self._location = None
|
||||||
|
self._server = None
|
||||||
|
|
||||||
|
def from_dict(self, values: dict):
|
||||||
|
self._get_attributes_from_dict(
|
||||||
|
[
|
||||||
|
("id", int),
|
||||||
|
("interval", str),
|
||||||
|
("name", str),
|
||||||
|
("description", str),
|
||||||
|
("channel_id", str),
|
||||||
|
("start_time", str),
|
||||||
|
("end_time", str),
|
||||||
|
("entity_type", str),
|
||||||
|
("location", str),
|
||||||
|
],
|
||||||
|
values,
|
||||||
|
)
|
||||||
|
|
||||||
|
if "server" in values:
|
||||||
|
from bot_graphql.filter.server_filter import ServerFilter
|
||||||
|
|
||||||
|
self._server: ServerFilter = self._services.get_service(ServerFilter)
|
||||||
|
self._server.from_dict(values["server"])
|
||||||
|
|
||||||
|
def filter(self, query: List[ScheduledEvent]) -> List[ScheduledEvent]:
|
||||||
|
if self._id is not None:
|
||||||
|
query = query.where(lambda x: x.id == self._id)
|
||||||
|
|
||||||
|
query = self._filter_by_attributes(
|
||||||
|
[
|
||||||
|
{"attr": self._id, "func": lambda x: x.id == self._id},
|
||||||
|
{"attr": self._interval, "func": lambda x: x.interval == self._interval},
|
||||||
|
{"attr": self._name, "func": lambda x: x.name == self._name},
|
||||||
|
{"attr": self._description, "func": lambda x: x.description == self._description},
|
||||||
|
{"attr": self._channel_id, "func": lambda x: x.channel_id == self._channel_id},
|
||||||
|
{"attr": self._start_time, "func": lambda x: x.start_time == self._start_time},
|
||||||
|
{"attr": self._end_time, "func": lambda x: x.end_time == self._end_time},
|
||||||
|
{"attr": self._entity_type, "func": lambda x: x.entity_type == self._entity_type},
|
||||||
|
{"attr": self._location, "func": lambda x: x.location == self._location},
|
||||||
|
],
|
||||||
|
query,
|
||||||
|
)
|
||||||
|
|
||||||
|
if self._server is not None:
|
||||||
|
servers = self._server.filter(query.select(lambda x: x.server)).select(lambda x: x.id)
|
||||||
|
query = query.where(lambda x: x.server.id in servers)
|
||||||
|
|
||||||
|
return query
|
@@ -1,3 +1,4 @@
|
|||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
@@ -8,9 +9,10 @@ from bot_graphql.abc.filter_abc import FilterABC
|
|||||||
|
|
||||||
|
|
||||||
class ShortRoleNameFilter(FilterABC):
|
class ShortRoleNameFilter(FilterABC):
|
||||||
def __init__(self, bot: DiscordBotServiceABC):
|
def __init__(self, bot: DiscordBotServiceABC, services: ServiceProviderABC):
|
||||||
FilterABC.__init__(self)
|
FilterABC.__init__(self)
|
||||||
self._bot = bot
|
self._bot = bot
|
||||||
|
self._services = services
|
||||||
|
|
||||||
self._id = None
|
self._id = None
|
||||||
self._short_name = None
|
self._short_name = None
|
||||||
|
@@ -6,6 +6,7 @@ type Mutation {
|
|||||||
userJoinedGameServer: UserJoinedGameServerMutation
|
userJoinedGameServer: UserJoinedGameServerMutation
|
||||||
achievement: AchievementMutation
|
achievement: AchievementMutation
|
||||||
shortRoleName: ShortRoleNameMutation
|
shortRoleName: ShortRoleNameMutation
|
||||||
|
scheduledEvent: ScheduledEventMutation
|
||||||
technicianConfig: TechnicianConfigMutation
|
technicianConfig: TechnicianConfigMutation
|
||||||
serverConfig: ServerConfigMutation
|
serverConfig: ServerConfigMutation
|
||||||
}
|
}
|
@@ -41,10 +41,15 @@ type Query {
|
|||||||
shortRoleNames(filter: ShortRoleNameFilter, page: Page, sort: Sort): [ShortRoleName]
|
shortRoleNames(filter: ShortRoleNameFilter, page: Page, sort: Sort): [ShortRoleName]
|
||||||
shortRoleNamePositions: [String]
|
shortRoleNamePositions: [String]
|
||||||
|
|
||||||
|
scheduledEventCount: Int
|
||||||
|
scheduledEvents(filter: ScheduledEventFilter, page: Page, sort: Sort): [ScheduledEvent]
|
||||||
|
|
||||||
userWarningCount: Int
|
userWarningCount: Int
|
||||||
userWarnings(filter: UserWarningFilter, page: Page, sort: Sort): [UserWarning]
|
userWarnings(filter: UserWarningFilter, page: Page, sort: Sort): [UserWarning]
|
||||||
|
|
||||||
technicianConfig: TechnicianConfig
|
technicianConfig: TechnicianConfig
|
||||||
possibleFeatureFlags: [String]
|
possibleFeatureFlags: [String]
|
||||||
discord: Discord
|
discord: Discord
|
||||||
|
|
||||||
|
hasFeatureFlag(flag: String): FeatureFlag
|
||||||
}
|
}
|
68
bot/src/bot_graphql/graphql/scheduledEvent.gql
Normal file
68
bot/src/bot_graphql/graphql/scheduledEvent.gql
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
type ScheduledEvent implements TableWithHistoryQuery {
|
||||||
|
id: ID
|
||||||
|
interval: String
|
||||||
|
name: String
|
||||||
|
description: String
|
||||||
|
channelId: String
|
||||||
|
startTime: String
|
||||||
|
endTime: String
|
||||||
|
entityType: Int
|
||||||
|
location: String
|
||||||
|
|
||||||
|
server: Server
|
||||||
|
|
||||||
|
createdAt: String
|
||||||
|
modifiedAt: String
|
||||||
|
|
||||||
|
history: [ScheduledEventHistory]
|
||||||
|
}
|
||||||
|
|
||||||
|
type ScheduledEventHistory implements HistoryTableQuery {
|
||||||
|
id: ID
|
||||||
|
interval: String
|
||||||
|
name: String
|
||||||
|
description: String
|
||||||
|
channelId: String
|
||||||
|
startTime: String
|
||||||
|
endTime: String
|
||||||
|
entityType: Int
|
||||||
|
location: String
|
||||||
|
|
||||||
|
server: ID
|
||||||
|
|
||||||
|
deleted: Boolean
|
||||||
|
dateFrom: String
|
||||||
|
dateTo: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input ScheduledEventFilter {
|
||||||
|
id: ID
|
||||||
|
interval: String
|
||||||
|
name: String
|
||||||
|
description: String
|
||||||
|
channelId: String
|
||||||
|
startTime: String
|
||||||
|
endTime: String
|
||||||
|
entityType: Int
|
||||||
|
location: String
|
||||||
|
server: ServerFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
type ScheduledEventMutation {
|
||||||
|
createScheduledEvent(input: ScheduledEventInput!): ScheduledEvent
|
||||||
|
updateScheduledEvent(input: ScheduledEventInput!): ScheduledEvent
|
||||||
|
deleteScheduledEvent(id: ID): ScheduledEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
input ScheduledEventInput {
|
||||||
|
id: ID
|
||||||
|
interval: String
|
||||||
|
name: String
|
||||||
|
description: String
|
||||||
|
channelId: String
|
||||||
|
startTime: String
|
||||||
|
endTime: String
|
||||||
|
entityType: Int
|
||||||
|
location: String
|
||||||
|
serverId: ID
|
||||||
|
}
|
@@ -35,6 +35,9 @@ type Server implements TableWithHistoryQuery {
|
|||||||
shortRoleNameCount: Int
|
shortRoleNameCount: Int
|
||||||
shortRoleNames(filter: ShortRoleNameFilter, page: Page, sort: Sort): [ShortRoleName]
|
shortRoleNames(filter: ShortRoleNameFilter, page: Page, sort: Sort): [ShortRoleName]
|
||||||
|
|
||||||
|
scheduledEventCount: Int
|
||||||
|
scheduledEvents(filter: ScheduledEventFilter, page: Page, sort: Sort): [ScheduledEvent]
|
||||||
|
|
||||||
config: ServerConfig
|
config: ServerConfig
|
||||||
hasFeatureFlag(flag: String): FeatureFlag
|
hasFeatureFlag(flag: String): FeatureFlag
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@ from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
|||||||
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
||||||
from bot_graphql.filter.client_filter import ClientFilter
|
from bot_graphql.filter.client_filter import ClientFilter
|
||||||
from bot_graphql.filter.level_filter import LevelFilter
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
|
from bot_graphql.filter.scheduled_event_filter import ScheduledEventFilter
|
||||||
from bot_graphql.filter.server_filter import ServerFilter
|
from bot_graphql.filter.server_filter import ServerFilter
|
||||||
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
@@ -27,6 +28,7 @@ from bot_graphql.mutations.achievement_mutation import AchievementMutation
|
|||||||
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
||||||
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
||||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||||
|
from bot_graphql.mutations.scheduled_event_mutation import ScheduledEventMutation
|
||||||
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
||||||
from bot_graphql.mutations.short_role_name_mutation import ShortRoleNameMutation
|
from bot_graphql.mutations.short_role_name_mutation import ShortRoleNameMutation
|
||||||
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
||||||
@@ -54,6 +56,7 @@ from bot_graphql.queries.known_user_history_query import KnownUserHistoryQuery
|
|||||||
from bot_graphql.queries.known_user_query import KnownUserQuery
|
from bot_graphql.queries.known_user_query import KnownUserQuery
|
||||||
from bot_graphql.queries.level_history_query import LevelHistoryQuery
|
from bot_graphql.queries.level_history_query import LevelHistoryQuery
|
||||||
from bot_graphql.queries.level_query import LevelQuery
|
from bot_graphql.queries.level_query import LevelQuery
|
||||||
|
from bot_graphql.queries.scheduled_event_query import ScheduledEventQuery
|
||||||
from bot_graphql.queries.server_config_query import ServerConfigQuery
|
from bot_graphql.queries.server_config_query import ServerConfigQuery
|
||||||
from bot_graphql.queries.server_history_query import ServerHistoryQuery
|
from bot_graphql.queries.server_history_query import ServerHistoryQuery
|
||||||
from bot_graphql.queries.server_query import ServerQuery
|
from bot_graphql.queries.server_query import ServerQuery
|
||||||
@@ -140,6 +143,7 @@ class GraphQLModule(ModuleABC):
|
|||||||
services.add_transient(QueryABC, UserWarningHistoryQuery)
|
services.add_transient(QueryABC, UserWarningHistoryQuery)
|
||||||
services.add_transient(QueryABC, UserWarningQuery)
|
services.add_transient(QueryABC, UserWarningQuery)
|
||||||
services.add_transient(QueryABC, ServerStatisticQuery)
|
services.add_transient(QueryABC, ServerStatisticQuery)
|
||||||
|
services.add_transient(QueryABC, ScheduledEventQuery)
|
||||||
|
|
||||||
services.add_transient(QueryABC, DiscordQuery)
|
services.add_transient(QueryABC, DiscordQuery)
|
||||||
services.add_transient(QueryABC, GuildQuery)
|
services.add_transient(QueryABC, GuildQuery)
|
||||||
@@ -161,6 +165,7 @@ class GraphQLModule(ModuleABC):
|
|||||||
services.add_transient(FilterABC, UserJoinedGameServerFilter)
|
services.add_transient(FilterABC, UserJoinedGameServerFilter)
|
||||||
services.add_transient(FilterABC, ShortRoleNameFilter)
|
services.add_transient(FilterABC, ShortRoleNameFilter)
|
||||||
services.add_transient(FilterABC, UserWarningFilter)
|
services.add_transient(FilterABC, UserWarningFilter)
|
||||||
|
services.add_transient(FilterABC, ScheduledEventFilter)
|
||||||
|
|
||||||
# mutations
|
# mutations
|
||||||
services.add_transient(QueryABC, AutoRoleMutation)
|
services.add_transient(QueryABC, AutoRoleMutation)
|
||||||
@@ -172,3 +177,4 @@ class GraphQLModule(ModuleABC):
|
|||||||
services.add_transient(QueryABC, UserJoinedGameServerMutation)
|
services.add_transient(QueryABC, UserJoinedGameServerMutation)
|
||||||
services.add_transient(QueryABC, TechnicianConfigMutation)
|
services.add_transient(QueryABC, TechnicianConfigMutation)
|
||||||
services.add_transient(QueryABC, ServerConfigMutation)
|
services.add_transient(QueryABC, ServerConfigMutation)
|
||||||
|
services.add_transient(QueryABC, ScheduledEventMutation)
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.model'
|
__title__ = "bot_graphql.model"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -4,6 +4,7 @@ from bot_graphql.mutations.achievement_mutation import AchievementMutation
|
|||||||
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
||||||
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
||||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||||
|
from bot_graphql.mutations.scheduled_event_mutation import ScheduledEventMutation
|
||||||
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
||||||
from bot_graphql.mutations.short_role_name_mutation import ShortRoleNameMutation
|
from bot_graphql.mutations.short_role_name_mutation import ShortRoleNameMutation
|
||||||
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
||||||
@@ -23,6 +24,7 @@ class Mutation(MutationType):
|
|||||||
achievement_mutation: AchievementMutation,
|
achievement_mutation: AchievementMutation,
|
||||||
user_joined_game_server: UserJoinedGameServerMutation,
|
user_joined_game_server: UserJoinedGameServerMutation,
|
||||||
technician_config: TechnicianConfigMutation,
|
technician_config: TechnicianConfigMutation,
|
||||||
|
scheduled_event: ScheduledEventMutation,
|
||||||
server_config: ServerConfigMutation,
|
server_config: ServerConfigMutation,
|
||||||
short_role_name_mutation: ShortRoleNameMutation,
|
short_role_name_mutation: ShortRoleNameMutation,
|
||||||
):
|
):
|
||||||
@@ -36,4 +38,5 @@ class Mutation(MutationType):
|
|||||||
self.set_field("userJoinedGameServer", lambda *_: user_joined_game_server)
|
self.set_field("userJoinedGameServer", lambda *_: user_joined_game_server)
|
||||||
self.set_field("shortRoleName", lambda *_: short_role_name_mutation)
|
self.set_field("shortRoleName", lambda *_: short_role_name_mutation)
|
||||||
self.set_field("technicianConfig", lambda *_: technician_config)
|
self.set_field("technicianConfig", lambda *_: technician_config)
|
||||||
|
self.set_field("scheduledEvent", lambda *_: scheduled_event)
|
||||||
self.set_field("serverConfig", lambda *_: server_config)
|
self.set_field("serverConfig", lambda *_: server_config)
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.mutations'
|
__title__ = "bot_graphql.mutations"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
107
bot/src/bot_graphql/mutations/scheduled_event_mutation.py
Normal file
107
bot/src/bot_graphql/mutations/scheduled_event_mutation.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from discord import EntityType
|
||||||
|
|
||||||
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
|
from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC
|
||||||
|
from bot_data.model.scheduled_event import ScheduledEvent
|
||||||
|
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
|
||||||
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
|
from modules.permission.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventMutation(QueryABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
servers: ServerRepositoryABC,
|
||||||
|
scheduled_events: ScheduledEventRepositoryABC,
|
||||||
|
bot: DiscordBotServiceABC,
|
||||||
|
db: DatabaseContextABC,
|
||||||
|
permissions: PermissionService,
|
||||||
|
):
|
||||||
|
QueryABC.__init__(self, "ScheduledEventMutation")
|
||||||
|
|
||||||
|
self._servers = servers
|
||||||
|
self._scheduled_events = scheduled_events
|
||||||
|
self._bot = bot
|
||||||
|
self._db = db
|
||||||
|
self._permissions = permissions
|
||||||
|
|
||||||
|
self.set_field("createScheduledEvent", self.resolve_create_scheduled_event)
|
||||||
|
self.set_field("updateScheduledEvent", self.resolve_update_scheduled_event)
|
||||||
|
self.set_field("deleteScheduledEvent", self.resolve_delete_scheduled_event)
|
||||||
|
|
||||||
|
def resolve_create_scheduled_event(self, *_, input: dict):
|
||||||
|
server = self._servers.get_server_by_id(input["serverId"])
|
||||||
|
self._can_user_mutate_data(server, UserRoleEnum.moderator)
|
||||||
|
|
||||||
|
scheduled_event = ScheduledEvent(
|
||||||
|
ScheduledEventIntervalEnum(input["interval"]),
|
||||||
|
input["name"],
|
||||||
|
input["description"] if "description" in input else None,
|
||||||
|
input["channelId"] if "channelId" in input else None,
|
||||||
|
datetime.strptime(input["startTime"], "%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||||
|
datetime.strptime(input["endTime"], "%Y-%m-%dT%H:%M:%S.%fZ") if "endTime" in input else None,
|
||||||
|
EntityType(int(input["entityType"])),
|
||||||
|
input["location"] if "location" in input else None,
|
||||||
|
server,
|
||||||
|
)
|
||||||
|
|
||||||
|
self._scheduled_events.add_scheduled_event(scheduled_event)
|
||||||
|
self._db.save_changes()
|
||||||
|
|
||||||
|
def get_new_scheduled_event(srn: ScheduledEvent):
|
||||||
|
return (
|
||||||
|
srn.interval == scheduled_event.interval
|
||||||
|
and srn.name == scheduled_event.name
|
||||||
|
and srn.description == scheduled_event.description
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
self._scheduled_events.get_scheduled_events_by_server_id(scheduled_event.server.id)
|
||||||
|
.where(get_new_scheduled_event)
|
||||||
|
.last()
|
||||||
|
)
|
||||||
|
|
||||||
|
def resolve_update_scheduled_event(self, *_, input: dict):
|
||||||
|
scheduled_event = self._scheduled_events.get_scheduled_event_by_id(input["id"])
|
||||||
|
self._can_user_mutate_data(scheduled_event.server, UserRoleEnum.moderator)
|
||||||
|
|
||||||
|
scheduled_event.interval = (
|
||||||
|
ScheduledEventIntervalEnum(input["interval"]) if "interval" in input else scheduled_event.interval
|
||||||
|
)
|
||||||
|
scheduled_event.name = input["name"] if "name" in input else scheduled_event.name
|
||||||
|
scheduled_event.description = input["description"] if "description" in input else scheduled_event.description
|
||||||
|
scheduled_event.channel_id = input["channelId"] if "channelId" in input else scheduled_event.channel_id
|
||||||
|
scheduled_event.start_time = (
|
||||||
|
datetime.strptime(input["startTime"], "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||||
|
if "startTime" in input
|
||||||
|
else scheduled_event.start_time
|
||||||
|
)
|
||||||
|
scheduled_event.end_time = (
|
||||||
|
datetime.strptime(input["endTime"], "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||||
|
if "endTime" in input
|
||||||
|
else scheduled_event.end_time
|
||||||
|
)
|
||||||
|
scheduled_event.entity_type = (
|
||||||
|
EntityType(int(input["entityType"])) if "entityType" in input else scheduled_event.entity_type
|
||||||
|
)
|
||||||
|
scheduled_event.location = input["location"] if "location" in input else scheduled_event.location
|
||||||
|
|
||||||
|
self._scheduled_events.update_scheduled_event(scheduled_event)
|
||||||
|
self._db.save_changes()
|
||||||
|
|
||||||
|
scheduled_event = self._scheduled_events.get_scheduled_event_by_id(input["id"])
|
||||||
|
return scheduled_event
|
||||||
|
|
||||||
|
def resolve_delete_scheduled_event(self, *_, id: int):
|
||||||
|
scheduled_event = self._scheduled_events.get_scheduled_event_by_id(id)
|
||||||
|
self._can_user_mutate_data(scheduled_event.server, UserRoleEnum.admin)
|
||||||
|
|
||||||
|
self._scheduled_events.delete_scheduled_event(scheduled_event)
|
||||||
|
self._db.save_changes()
|
||||||
|
|
||||||
|
return scheduled_event
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.queries'
|
__title__ = "bot_graphql.queries"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'bot_graphql.queries.discord'
|
__title__ = "bot_graphql.queries.discord"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
24
bot/src/bot_graphql/queries/scheduled_event_history_query.py
Normal file
24
bot/src/bot_graphql/queries/scheduled_event_history_query.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
|
|
||||||
|
from bot_data.model.scheduled_event_history import ScheduledEventHistory
|
||||||
|
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventHistoryQuery(DataQueryWithHistoryABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
db: DatabaseContextABC,
|
||||||
|
):
|
||||||
|
DataQueryWithHistoryABC.__init__(self, "ScheduledEvent", "ScheduledEventsHistory", ScheduledEventHistory, db)
|
||||||
|
|
||||||
|
self.set_field("id", lambda x, *_: x.id)
|
||||||
|
self.set_field("id", lambda x, *_: x.id)
|
||||||
|
self.set_field("interval", lambda x, *_: x.interval.value)
|
||||||
|
self.set_field("name", lambda x, *_: x.name)
|
||||||
|
self.set_field("description", lambda x, *_: x.description)
|
||||||
|
self.set_field("channel_id", lambda x, *_: x.channel_id)
|
||||||
|
self.set_field("start_time", lambda x, *_: x.start_time)
|
||||||
|
self.set_field("end_time", lambda x, *_: x.end_time)
|
||||||
|
self.set_field("entity_type", lambda x, *_: x.entity_type)
|
||||||
|
self.set_field("location", lambda x, *_: x.location)
|
||||||
|
self.set_field("server", lambda x, *_: x.server)
|
23
bot/src/bot_graphql/queries/scheduled_event_query.py
Normal file
23
bot/src/bot_graphql/queries/scheduled_event_query.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
|
|
||||||
|
from bot_data.model.scheduled_event_history import ScheduledEventHistory
|
||||||
|
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventQuery(DataQueryWithHistoryABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
db: DatabaseContextABC,
|
||||||
|
):
|
||||||
|
DataQueryWithHistoryABC.__init__(self, "ScheduledEvent", "ScheduledEventsHistory", ScheduledEventHistory, db)
|
||||||
|
|
||||||
|
self.set_field("id", lambda x, *_: x.id)
|
||||||
|
self.set_field("interval", lambda x, *_: x.interval.value)
|
||||||
|
self.set_field("name", lambda x, *_: x.name)
|
||||||
|
self.set_field("description", lambda x, *_: x.description)
|
||||||
|
self.set_field("channelId", lambda x, *_: x.channel_id)
|
||||||
|
self.set_field("startTime", lambda x, *_: x.start_time)
|
||||||
|
self.set_field("endTime", lambda x, *_: x.end_time)
|
||||||
|
self.set_field("entityType", lambda x, *_: x.entity_type.value)
|
||||||
|
self.set_field("location", lambda x, *_: x.location)
|
||||||
|
self.set_field("server", lambda x, *_: x.server)
|
@@ -9,6 +9,7 @@ from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
|||||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||||
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
||||||
|
from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC
|
||||||
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
||||||
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
||||||
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
||||||
@@ -24,6 +25,7 @@ from bot_graphql.filter.achievement_filter import AchievementFilter
|
|||||||
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
||||||
from bot_graphql.filter.client_filter import ClientFilter
|
from bot_graphql.filter.client_filter import ClientFilter
|
||||||
from bot_graphql.filter.level_filter import LevelFilter
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
|
from bot_graphql.filter.scheduled_event_filter import ScheduledEventFilter
|
||||||
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
from bot_graphql.model.server_statistics import ServerStatistics
|
from bot_graphql.model.server_statistics import ServerStatistics
|
||||||
@@ -44,6 +46,7 @@ class ServerQuery(DataQueryWithHistoryABC):
|
|||||||
ujvs: UserJoinedVoiceChannelRepositoryABC,
|
ujvs: UserJoinedVoiceChannelRepositoryABC,
|
||||||
achievements: AchievementRepositoryABC,
|
achievements: AchievementRepositoryABC,
|
||||||
short_role_names: ShortRoleNameRepositoryABC,
|
short_role_names: ShortRoleNameRepositoryABC,
|
||||||
|
scheduled_events: ScheduledEventRepositoryABC,
|
||||||
server_configs: ServerConfigRepositoryABC,
|
server_configs: ServerConfigRepositoryABC,
|
||||||
):
|
):
|
||||||
DataQueryWithHistoryABC.__init__(self, "Server", "ServersHistory", ServerHistory, db)
|
DataQueryWithHistoryABC.__init__(self, "Server", "ServersHistory", ServerHistory, db)
|
||||||
@@ -100,6 +103,11 @@ class ServerQuery(DataQueryWithHistoryABC):
|
|||||||
lambda server, *_: short_role_names.get_short_role_names_by_server_id(server.id),
|
lambda server, *_: short_role_names.get_short_role_names_by_server_id(server.id),
|
||||||
ShortRoleNameFilter,
|
ShortRoleNameFilter,
|
||||||
)
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"scheduledEvent",
|
||||||
|
lambda server, *_: scheduled_events.get_scheduled_events_by_server_id(server.id),
|
||||||
|
ScheduledEventFilter,
|
||||||
|
)
|
||||||
self.set_field(
|
self.set_field(
|
||||||
"config",
|
"config",
|
||||||
lambda server, *_: server_configs.get_server_config_by_server(server.id),
|
lambda server, *_: server_configs.get_server_config_by_server(server.id),
|
||||||
|
@@ -1,13 +1,16 @@
|
|||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC
|
from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC
|
||||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||||
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
||||||
|
from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC
|
||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC
|
||||||
from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
|
from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
|
||||||
@@ -21,12 +24,14 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
|||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
||||||
from bot_data.model.short_role_name_position_enum import ShortRoleNamePositionEnum
|
from bot_data.model.short_role_name_position_enum import ShortRoleNamePositionEnum
|
||||||
|
from bot_data.model.technician_config import TechnicianConfig
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from bot_graphql.filter.achievement_filter import AchievementFilter
|
from bot_graphql.filter.achievement_filter import AchievementFilter
|
||||||
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
||||||
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
||||||
from bot_graphql.filter.client_filter import ClientFilter
|
from bot_graphql.filter.client_filter import ClientFilter
|
||||||
from bot_graphql.filter.level_filter import LevelFilter
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
|
from bot_graphql.filter.scheduled_event_filter import ScheduledEventFilter
|
||||||
from bot_graphql.filter.server_filter import ServerFilter
|
from bot_graphql.filter.server_filter import ServerFilter
|
||||||
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
@@ -43,6 +48,7 @@ from modules.achievements.achievement_service import AchievementService
|
|||||||
class Query(QueryABC):
|
class Query(QueryABC):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
config: ConfigurationABC,
|
||||||
bot: DiscordBotServiceABC,
|
bot: DiscordBotServiceABC,
|
||||||
auto_roles: AutoRoleRepositoryABC,
|
auto_roles: AutoRoleRepositoryABC,
|
||||||
clients: ClientRepositoryABC,
|
clients: ClientRepositoryABC,
|
||||||
@@ -59,9 +65,12 @@ class Query(QueryABC):
|
|||||||
user_warnings: UserWarningsRepositoryABC,
|
user_warnings: UserWarningsRepositoryABC,
|
||||||
achievement_service: AchievementService,
|
achievement_service: AchievementService,
|
||||||
technician_config: TechnicianConfigRepositoryABC,
|
technician_config: TechnicianConfigRepositoryABC,
|
||||||
|
scheduled_events: ScheduledEventRepositoryABC,
|
||||||
):
|
):
|
||||||
QueryABC.__init__(self, "Query")
|
QueryABC.__init__(self, "Query")
|
||||||
|
|
||||||
|
self._config = config
|
||||||
|
|
||||||
self.add_collection("autoRole", lambda *_: auto_roles.get_auto_roles(), AutoRoleFilter)
|
self.add_collection("autoRole", lambda *_: auto_roles.get_auto_roles(), AutoRoleFilter)
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"autoRoleRule",
|
"autoRoleRule",
|
||||||
@@ -95,6 +104,11 @@ class Query(QueryABC):
|
|||||||
lambda *_: short_role_names.get_short_role_names(),
|
lambda *_: short_role_names.get_short_role_names(),
|
||||||
ShortRoleNameFilter,
|
ShortRoleNameFilter,
|
||||||
)
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"scheduledEvent",
|
||||||
|
lambda server, *_: scheduled_events.get_scheduled_events_by_server_id(server.id),
|
||||||
|
ScheduledEventFilter,
|
||||||
|
)
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"userWarning",
|
"userWarning",
|
||||||
lambda *_: user_warnings.get_user_warnings(),
|
lambda *_: user_warnings.get_user_warnings(),
|
||||||
@@ -112,3 +126,17 @@ class Query(QueryABC):
|
|||||||
|
|
||||||
self.set_field("possibleFeatureFlags", lambda *_: [e.value for e in FeatureFlagsEnum])
|
self.set_field("possibleFeatureFlags", lambda *_: [e.value for e in FeatureFlagsEnum])
|
||||||
self.set_field("discord", lambda *_: Discord(bot.guilds, List(any).extend(bot.users)))
|
self.set_field("discord", lambda *_: Discord(bot.guilds, List(any).extend(bot.users)))
|
||||||
|
|
||||||
|
self.set_field(
|
||||||
|
"hasFeatureFlag",
|
||||||
|
lambda *_, **kwargs: self._resolve_has_feature_flag(*_, **kwargs),
|
||||||
|
)
|
||||||
|
|
||||||
|
def _resolve_has_feature_flag(self, *_, **kwargs):
|
||||||
|
settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig)
|
||||||
|
if "flag" not in kwargs:
|
||||||
|
return False
|
||||||
|
return {
|
||||||
|
"key": kwargs["flag"],
|
||||||
|
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(kwargs["flag"])),
|
||||||
|
}
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.achievements'
|
__title__ = "modules.achievements"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
"LicenseName": "MIT",
|
"LicenseName": "MIT",
|
||||||
"LicenseDescription": "MIT, see LICENSE for more details.",
|
"LicenseDescription": "MIT, see LICENSE for more details.",
|
||||||
"Dependencies": [
|
"Dependencies": [
|
||||||
"cpl-core>=1.2.1"
|
"cpl-core>=1.2.dev410"
|
||||||
],
|
],
|
||||||
"DevDependencies": [
|
"DevDependencies": [
|
||||||
"cpl-cli>=1.2.1"
|
"cpl-cli>=1.2.dev410"
|
||||||
],
|
],
|
||||||
"PythonVersion": ">=3.10.4",
|
"PythonVersion": ">=3.10.4",
|
||||||
"PythonPath": {},
|
"PythonPath": {},
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.achievements.commands'
|
__title__ = "modules.achievements.commands"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.achievements.events'
|
__title__ = "modules.achievements.events"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.achievements.model'
|
__title__ = "modules.achievements.model"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.auto_role'
|
__title__ = "modules.auto_role"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "",
|
"Author": "",
|
||||||
"AuthorEmail": "",
|
"AuthorEmail": "",
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.auto_role.command'
|
__title__ = "modules.auto_role.command"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.auto_role.events'
|
__title__ = "modules.auto_role.events"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.auto_role.helper'
|
__title__ = "modules.auto_role.helper"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base'
|
__title__ = "modules.base"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "1",
|
"Major": "1",
|
||||||
"Minor": "2",
|
"Minor": "2",
|
||||||
"Micro": "1"
|
"Micro": "2"
|
||||||
},
|
},
|
||||||
"Author": "",
|
"Author": "",
|
||||||
"AuthorEmail": "",
|
"AuthorEmail": "",
|
||||||
|
@@ -7,7 +7,8 @@ from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
|
|||||||
from bot_core.abc.module_abc import ModuleABC
|
from bot_core.abc.module_abc import ModuleABC
|
||||||
from bot_core.abc.task_abc import TaskABC
|
from bot_core.abc.task_abc import TaskABC
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
from modules.base.birthday_watcher import BirthdayWatcher
|
from modules.base.command.scheduled_events_group import ScheduledEventsCommand
|
||||||
|
from modules.base.tasks.birthday_watcher import BirthdayWatcher
|
||||||
from modules.base.command.afk_command import AFKCommand
|
from modules.base.command.afk_command import AFKCommand
|
||||||
from modules.base.command.game_server_group import GameServerGroup
|
from modules.base.command.game_server_group import GameServerGroup
|
||||||
from modules.base.command.help_command import HelpCommand
|
from modules.base.command.help_command import HelpCommand
|
||||||
@@ -45,6 +46,7 @@ from modules.base.events.base_on_voice_state_update_event_scheduled_event_bonus
|
|||||||
from modules.base.forms.bug_report_form import BugReportForm
|
from modules.base.forms.bug_report_form import BugReportForm
|
||||||
from modules.base.forms.complaint_form import ComplaintForm
|
from modules.base.forms.complaint_form import ComplaintForm
|
||||||
from modules.base.helper.base_reaction_handler import BaseReactionHandler
|
from modules.base.helper.base_reaction_handler import BaseReactionHandler
|
||||||
|
from modules.base.tasks.scheduled_events_watcher import ScheduledEventsWatcher
|
||||||
from modules.base.service.event_service import EventService
|
from modules.base.service.event_service import EventService
|
||||||
from modules.base.service.user_warnings_service import UserWarningsService
|
from modules.base.service.user_warnings_service import UserWarningsService
|
||||||
|
|
||||||
@@ -61,6 +63,7 @@ class BaseModule(ModuleABC):
|
|||||||
services.add_singleton(EventService)
|
services.add_singleton(EventService)
|
||||||
services.add_transient(UserWarningsService)
|
services.add_transient(UserWarningsService)
|
||||||
services.add_singleton(TaskABC, BirthdayWatcher)
|
services.add_singleton(TaskABC, BirthdayWatcher)
|
||||||
|
services.add_singleton(TaskABC, ScheduledEventsWatcher)
|
||||||
|
|
||||||
# forms
|
# forms
|
||||||
services.add_transient(BugReportForm)
|
services.add_transient(BugReportForm)
|
||||||
@@ -81,6 +84,7 @@ class BaseModule(ModuleABC):
|
|||||||
services.add_transient(RegisterGroup)
|
services.add_transient(RegisterGroup)
|
||||||
services.add_transient(UnregisterGroup)
|
services.add_transient(UnregisterGroup)
|
||||||
services.add_transient(GameServerGroup)
|
services.add_transient(GameServerGroup)
|
||||||
|
services.add_transient(ScheduledEventsCommand)
|
||||||
# events
|
# events
|
||||||
services.add_transient(DiscordEventTypesEnum.on_command.value, BaseOnCommandEvent)
|
services.add_transient(DiscordEventTypesEnum.on_command.value, BaseOnCommandEvent)
|
||||||
services.add_transient(DiscordEventTypesEnum.on_command_error.value, BaseOnCommandErrorEvent)
|
services.add_transient(DiscordEventTypesEnum.on_command_error.value, BaseOnCommandErrorEvent)
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.command'
|
__title__ = "modules.base.command"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -38,7 +38,7 @@ class MassMoveCommand(DiscordCommandABC):
|
|||||||
self,
|
self,
|
||||||
ctx: Context,
|
ctx: Context,
|
||||||
channel_to: discord.VoiceChannel,
|
channel_to: discord.VoiceChannel,
|
||||||
channel_from: Transform[str, VoiceChannelTransformer] = None,
|
channel_from: Transform[discord.VoiceChannel, VoiceChannelTransformer] = None,
|
||||||
):
|
):
|
||||||
self._logger.debug(__name__, f"Received command mass-move {ctx}")
|
self._logger.debug(__name__, f"Received command mass-move {ctx}")
|
||||||
|
|
||||||
|
37
bot/src/modules/base/command/scheduled_events_group.py
Normal file
37
bot/src/modules/base/command/scheduled_events_group.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
from cpl_discord.command import DiscordCommandABC
|
||||||
|
from discord.ext import commands
|
||||||
|
from discord.ext.commands import Context
|
||||||
|
|
||||||
|
from bot_core.helper.command_checks import CommandChecks
|
||||||
|
from bot_core.logging.command_logger import CommandLogger
|
||||||
|
from modules.base.service.event_service import EventService
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduledEventsCommand(DiscordCommandABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
logger: CommandLogger,
|
||||||
|
events: EventService,
|
||||||
|
):
|
||||||
|
DiscordCommandABC.__init__(self)
|
||||||
|
|
||||||
|
self._logger = logger
|
||||||
|
self._events = events
|
||||||
|
|
||||||
|
self._logger.trace(__name__, f"Loaded command service: {type(self).__name__}")
|
||||||
|
|
||||||
|
@commands.hybrid_group(name="scheduled-events")
|
||||||
|
@commands.guild_only()
|
||||||
|
async def scheduled_events(self, ctx: Context):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@scheduled_events.command()
|
||||||
|
@commands.guild_only()
|
||||||
|
@CommandChecks.check_is_ready()
|
||||||
|
@CommandChecks.check_is_member_moderator()
|
||||||
|
async def reload(self, ctx: Context):
|
||||||
|
self._logger.debug(__name__, "Running scheduled-events reload")
|
||||||
|
try:
|
||||||
|
await self._events.check_and_create_scheduled_events(ctx.guild)
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, f"Reloading scheduled events failed", e)
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.events'
|
__title__ = "modules.base.events"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -82,7 +82,7 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._logger.debug(__name__, f"Add user: {member.id}")
|
self._logger.debug(__name__, f"Add user: {member.id}")
|
||||||
self._users.add_user(User(member.id, 0, 0, 0, server))
|
self._users.add_user(User(member.id, 0, 0, 0, None, server))
|
||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
|
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
|
||||||
self._user_joins.add_user_joined_server(UserJoinedServer(user, datetime.now()))
|
self._user_joins.add_user_joined_server(UserJoinedServer(user, datetime.now()))
|
||||||
|
@@ -42,4 +42,5 @@ class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC):
|
|||||||
return
|
return
|
||||||
self._events.remove_event(event)
|
self._events.remove_event(event)
|
||||||
|
|
||||||
|
await self._events.check_and_create_scheduled_events(before.guild)
|
||||||
self._logger.debug(__name__, f"Module {type(self)} stopped")
|
self._logger.debug(__name__, f"Module {type(self)} stopped")
|
||||||
|
@@ -58,14 +58,22 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
|
||||||
|
|
||||||
if joined:
|
if joined:
|
||||||
|
active_joins = self._user_joins_vc.find_active_user_joined_voice_channels_by_user_id(user.id)
|
||||||
|
for join in active_joins:
|
||||||
|
join.leaved_on = datetime.now()
|
||||||
|
user.xp += round(join.time * settings.xp_per_ontime_hour)
|
||||||
|
self._user_joins_vc.update_user_joined_voice_channel(join)
|
||||||
|
self._users.update_user(user)
|
||||||
|
self._db.save_changes()
|
||||||
|
|
||||||
join = UserJoinedVoiceChannel(user, channel_id, datetime.now())
|
join = UserJoinedVoiceChannel(user, channel_id, datetime.now())
|
||||||
self._user_joins_vc.add_user_joined_voice_channel(join)
|
self._user_joins_vc.add_user_joined_voice_channel(join)
|
||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
return
|
return
|
||||||
|
|
||||||
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
|
|
||||||
|
|
||||||
join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(user.id)
|
join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(user.id)
|
||||||
join.leaved_on = datetime.now()
|
join.leaved_on = datetime.now()
|
||||||
|
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.forms'
|
__title__ = "modules.base.forms"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.helper'
|
__title__ = "modules.base.helper"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -25,7 +25,7 @@ class VoiceChannelTransformer(Transformer):
|
|||||||
return [
|
return [
|
||||||
app_commands.Choice(
|
app_commands.Choice(
|
||||||
name=f"{vc.name}" if vc.category is None else f"{vc.name}: {vc.category.name}",
|
name=f"{vc.name}" if vc.category is None else f"{vc.name}: {vc.category.name}",
|
||||||
value=vc.name,
|
value=str(vc.id),
|
||||||
)
|
)
|
||||||
for vc in get_client_utils().get_auto_complete_list(voice_channels, current, lambda x: x.name)
|
for vc in get_client_utils().get_auto_complete_list(voice_channels, current, lambda x: x.name)
|
||||||
]
|
]
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.model'
|
__title__ = "modules.base.model"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports:
|
# imports:
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
@@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'modules.base.service'
|
__title__ = "modules.base.service"
|
||||||
__author__ = 'Sven Heidemann'
|
__author__ = "Sven Heidemann"
|
||||||
__license__ = 'MIT'
|
__license__ = "MIT"
|
||||||
__copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de'
|
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
|
||||||
__version__ = '1.2.1'
|
__version__ = "1.2.2"
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
|
||||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||||
version_info = VersionInfo(major='1', minor='2', micro='1')
|
version_info = VersionInfo(major="1", minor="2", micro="2")
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user