Compare commits
167 Commits
f551fdf87b
...
0.3
Author | SHA1 | Date | |
---|---|---|---|
89ee16d1b5 | |||
4c577f6a7b | |||
f50a763539 | |||
9ff9cc672e | |||
9d4cf5a769 | |||
df1d62f569 | |||
4201510e9f | |||
394428a81a | |||
4733f84ec6 | |||
9c466733fb | |||
bd62618fdf | |||
a78d5f0fcb | |||
661630bb37 | |||
15f041a2da | |||
1ac5d982ed | |||
1337ef35dd | |||
986d7c4562 | |||
7fcb4084d2 | |||
fbac0d3d02 | |||
9626de2b27 | |||
1d74f5e67c | |||
6949db10f8 | |||
ba5d897662 | |||
47415af868 | |||
6353c7ca86 | |||
440689653d | |||
844a818aa0 | |||
33fb973f21 | |||
7646335d03 | |||
04c905d287 | |||
c7d8508173 | |||
f3eff97780 | |||
476db0ed33 | |||
9c369b911a | |||
6dfd476bce | |||
f669410b2a | |||
a46122243f | |||
3b7345b404 | |||
59d38f8f2a | |||
612430d3e0 | |||
e01290db9b | |||
6273ce9cba | |||
5c923d8bd8 | |||
6c6169f7ee | |||
ffd5105154 | |||
9040ab6fca | |||
9d89135b4c | |||
71899346b2 | |||
d197a6e158 | |||
40e53de3f2 | |||
1b9553e63b | |||
5447d502cc | |||
5a4c2901f5 | |||
bcf71a26f0 | |||
b25b75e382 | |||
f21b4f9881 | |||
8705904882 | |||
cf610b770b | |||
ec30069ff5 | |||
7026b3abac | |||
31464df3f6 | |||
eb9f5b83d5 | |||
fdd8357729 | |||
7c744f0e65 | |||
4a0f5c28c1 | |||
d2f99003ff | |||
9dd3fd4b8e | |||
d18500b96c | |||
91fdf34d32 | |||
12369cdbe3 | |||
25c698273a | |||
2868b1afe2 | |||
0d1c15b31d | |||
840da350e4 | |||
bd94c42eae | |||
c7a925b997 | |||
7fb6d22c3f | |||
c5b5297058 | |||
9ed66c2560 | |||
6e6157ccf2 | |||
f136d6164e | |||
9b5033b80e | |||
f5a71a8450 | |||
d3279eb7c7 | |||
ec7aeb8712 | |||
fd609eb923 | |||
a7dbc75d2e | |||
b0459567f4 | |||
25b7b18013 | |||
87350cba1a | |||
864d181de0 | |||
90011be760 | |||
47dd6fdc2d | |||
8445c23e7f | |||
e6fc41090a | |||
7c79c6f992 | |||
7b8dca64bf | |||
549b05087f | |||
83d18da58f | |||
18e4465b17 | |||
2e20bb12de | |||
4f4e80fb6b | |||
fd1245fb4f | |||
fdb358c45e | |||
c438a91b87 | |||
a46fbcd9fc | |||
91285540c6 | |||
ab2145d5df | |||
63fe566044 | |||
d45d787cea | |||
442170eca9 | |||
2c7f4647af | |||
53604706c2 | |||
42d8a16d05 | |||
d933cae73c | |||
ce73145dbb | |||
ab7fdec499 | |||
d2968e0652 | |||
cebdc1b860 | |||
87435614db | |||
e9386633d8 | |||
49d9509255 | |||
905182931c | |||
026d989789 | |||
d38fa77757 | |||
5cdf2834cc | |||
7173dee28d | |||
e754a10241 | |||
|
8fa6458d6e | ||
e269442603 | |||
d36a29042e | |||
c09841a3da | |||
e098416a29 | |||
9017535bfb | |||
b2087042bc | |||
8fafc94118 | |||
c608b232b0 | |||
6ff53fb31c | |||
be96644e5c | |||
2646dccb91 | |||
1a5917ac6b | |||
588a8e140f | |||
c70149e9c8 | |||
50fbc3eb8c | |||
b4fce51b57 | |||
3c1f017e3a | |||
25cc98732d | |||
ef41ce03d3 | |||
44f22e6aee | |||
10a502fa4b | |||
2a4933f971 | |||
b30d49f5d7 | |||
7eca399b9d | |||
766e9b1235 | |||
26f0938566 | |||
97fab6adca | |||
97279c2599 | |||
8fe38c451e | |||
b0b228eef6 | |||
7bb407f2d7 | |||
bf4468bfa6 | |||
762e85d062 | |||
36a8d14720 | |||
2613fcc999 | |||
356dc1848c | |||
55c43efbdc | |||
e47318d8e9 |
9
.gitmodules
vendored
Normal file
9
.gitmodules
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
[submodule "kdb-bot/src/bot/config"]
|
||||
path = kdb-bot/src/bot/config
|
||||
url = https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot.config.git
|
||||
[submodule "kdb-bot/src/bot_api/config"]
|
||||
path = kdb-bot/src/bot_api/config
|
||||
url = https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot.api.config.git
|
||||
[submodule "kdb-bot/docker"]
|
||||
path = kdb-bot/docker
|
||||
url = https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot.docker.git
|
9
kdb-bot/LICENSE
Normal file
9
kdb-bot/LICENSE
Normal file
@@ -0,0 +1,9 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022-2023 sh-edraft.de
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
2
kdb-bot/README.md
Normal file
2
kdb-bot/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# kd_discord_bot
|
||||
|
@@ -13,19 +13,20 @@
|
||||
"level": "src/modules/level/level.json",
|
||||
"permission": "src/modules/permission/permission.json",
|
||||
"stats": "src/modules/stats/stats.json",
|
||||
"technician": "src/modules/technician/technician.json",
|
||||
"get-version": "tools/get_version/get-version.json",
|
||||
"post-build": "tools/post_build/post-build.json",
|
||||
"set-version": "tools/set_version/set-version.json"
|
||||
},
|
||||
"Scripts": {
|
||||
"sv": "cpl set-version",
|
||||
"set-version": "cpl run set-version $ARGS; echo '';",
|
||||
"sv": "cpl set-version $ARGS",
|
||||
"set-version": "cpl run set-version $ARGS --dev; echo '';",
|
||||
|
||||
"gv": "cpl get-version",
|
||||
"get-version": "export VERSION=$(cpl run get-version); echo $VERSION;",
|
||||
"get-version": "export VERSION=$(cpl run get-version --dev); echo $VERSION;",
|
||||
|
||||
"pre-build": "cpl set-version $ARGS",
|
||||
"post-build": "cpl run post-build",
|
||||
"post-build": "cpl run post-build --dev",
|
||||
|
||||
"pre-prod": "cpl build",
|
||||
"prod": "export KDB_ENVIRONMENT=production; export KDB_NAME=KDB-Prod; cpl start;",
|
||||
@@ -36,9 +37,10 @@
|
||||
"pre-dev": "cpl build",
|
||||
"dev": "export KDB_ENVIRONMENT=development; export KDB_NAME=KDB-Dev; cpl start;",
|
||||
|
||||
"docker-build": "cpl b; docker-compose down; docker build -t kdb-bot/kdb-bot:$(cpl gv) .",
|
||||
"docker-compose": "docker-compose up -d",
|
||||
"docker": "cpl docker-build; cpl docker-compose;"
|
||||
"docker-build": "cpl build $ARGS; docker build -t kdb-bot/kdb-bot:$(cpl gv) .;",
|
||||
"dc-up": "docker-compose up -d",
|
||||
"dc-down": "docker-compose down",
|
||||
"docker": "cpl dc-down; cpl docker-build; cpl dc-up;"
|
||||
}
|
||||
}
|
||||
}
|
1
kdb-bot/docker
Submodule
1
kdb-bot/docker
Submodule
Submodule kdb-bot/docker added at 48c2683965
@@ -1,49 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
volumes:
|
||||
kdb_bot_dev_1:
|
||||
kdb_web_dev_1:
|
||||
kdb_db_dev_1:
|
||||
|
||||
services:
|
||||
kdb_bot_dev_1:
|
||||
image: kdb-bot/kdb-bot:0.3
|
||||
container_name: kdb_bot_dev_1
|
||||
depends_on:
|
||||
- kdb_db_dev_1
|
||||
volumes:
|
||||
- kdb_bot_dev_1:/app
|
||||
environment:
|
||||
KDB_ENVIRONMENT: "dev"
|
||||
KDB_TOKEN: "OTk4MTU5NjczODkzMDYwNzM4.GN3QyA.yvWO6L7Eu36gXQ7ARDs0Jg2J1VqIDnHLou5lT4"
|
||||
KDB_PREFIX: "!kd "
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8044:80'
|
||||
command: bash /app/bot/bot -dev
|
||||
|
||||
kdb_web_dev_1:
|
||||
image: kdb-web/kdb-web:0.3
|
||||
container_name: kdb_web_dev_1
|
||||
depends_on:
|
||||
- kdb_bot_dev_1
|
||||
volumes:
|
||||
- kdb_web_dev_1:/app
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8043:80'
|
||||
|
||||
kdb_db_dev_1:
|
||||
image: mysql:latest
|
||||
container_name: kdb_db_dev_1
|
||||
command: mysqld --default-authentication-plugin=mysql_native_password
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: "kd_kdb"
|
||||
MYSQL_USER: "kd_kdb"
|
||||
MYSQL_PASSWORD: "!w5D_&steCejfjq~b{0_DP@e:§X2?JUz"
|
||||
MYSQL_DATABASE: "kd_kdb"
|
||||
ports:
|
||||
- "3308:3306"
|
||||
volumes:
|
||||
- kdb_db_dev_1:/var/lib/mysql
|
@@ -1,49 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
volumes:
|
||||
kdb_bot_staging_1:
|
||||
kdb_web_staging_1:
|
||||
kdb_db_staging_1:
|
||||
|
||||
services:
|
||||
kdb_bot_staging_1:
|
||||
image: kdb-bot/kdb-bot:0.3
|
||||
container_name: kdb_bot_staging_1
|
||||
depends_on:
|
||||
- kdb_db_staging_1
|
||||
volumes:
|
||||
- kdb_bot_staging_1:/app
|
||||
environment:
|
||||
KDB_ENVIRONMENT: "staging"
|
||||
KDB_TOKEN: "OTk4MTU5ODAyMzkzOTY0NTk0.G4rLkF.uBQ9pW8X1Lm5agHqvBfzf7qEf8Ton-3a1oJPmY"
|
||||
KDB_PREFIX: "!kt "
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8044:80'
|
||||
command: bash /app/bot/bot -stage
|
||||
|
||||
kdb_web_staging_1:
|
||||
image: kdb-web/kdb-web:0.3
|
||||
container_name: kdb_web_staging_1
|
||||
depends_on:
|
||||
- kdb_bot_staging_1
|
||||
volumes:
|
||||
- kdb_web_staging_1:/app
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8043:80'
|
||||
|
||||
kdb_db_staging_1:
|
||||
image: mysql:latest
|
||||
container_name: kdb_db_staging_1
|
||||
command: mysqld --default-authentication-plugin=mysql_native_password
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: "kd_kdb"
|
||||
MYSQL_USER: "kd_kdb"
|
||||
MYSQL_PASSWORD: "3&YwVMCwüb=LUt7B§ÖsY?Kr~XRtD#&&f"
|
||||
MYSQL_DATABASE: "kd_kdb"
|
||||
ports:
|
||||
- "3308:3306"
|
||||
volumes:
|
||||
- kdb_db_staging_1:/var/lib/mysql
|
@@ -1,48 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
volumes:
|
||||
kdb_bot_prod_1:
|
||||
kdb_web_prod_1:
|
||||
kdb_db_prod_1:
|
||||
|
||||
services:
|
||||
kdb_bot_prod_1:
|
||||
image: kdb-bot/kdb-bot:0.3
|
||||
container_name: kdb_bot_prod_1
|
||||
depends_on:
|
||||
- kdb_db_prod_1
|
||||
volumes:
|
||||
- kdb_bot_prod_1:/app
|
||||
environment:
|
||||
KDB_ENVIRONMENT: "production"
|
||||
KDB_TOKEN: ""
|
||||
KDB_PREFIX: "!k "
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8041:80'
|
||||
|
||||
kdb_web_prod_1:
|
||||
image: kdb-web/kdb-web:0.3
|
||||
container_name: kdb_web_prod_1
|
||||
depends_on:
|
||||
- kdb_bot_prod_1
|
||||
volumes:
|
||||
- kdb_web_prod_1:/app
|
||||
restart: 'no'
|
||||
ports:
|
||||
- '8042:80'
|
||||
|
||||
kdb_db_prod_1:
|
||||
image: mysql:latest
|
||||
container_name: kdb_db_prod_1
|
||||
command: mysqld --default-authentication-plugin=mysql_native_password
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: "kd_kdb"
|
||||
MYSQL_USER: "kd_kdb"
|
||||
MYSQL_PASSWORD: "+=gj}(ÄEbRG6_S&ö}ü>zaNT=rE{_~m<y"
|
||||
MYSQL_DATABASE: "kd_kdb"
|
||||
ports:
|
||||
- "3307:3306"
|
||||
volumes:
|
||||
- kdb_db_prod_1:/var/lib/mysql
|
@@ -1,9 +1,9 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM python:3.10.4-alpine
|
||||
|
||||
FROM python:3.10.6-alpine
|
||||
|
||||
WORKDIR /app
|
||||
COPY ./dist/bot/build/ .
|
||||
COPY ./dist/bot/build/kdb-bot/ .
|
||||
COPY ./dist/bot/build/requirements.txt .
|
||||
|
||||
RUN python -m pip install --upgrade pip
|
||||
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"Version": {
|
||||
"Major": "0",
|
||||
"Minor": "3",
|
||||
"Micro": "dev25"
|
||||
"Micro": "0"
|
||||
},
|
||||
"Author": "Sven Heidemann",
|
||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||
@@ -16,21 +16,22 @@
|
||||
"LicenseName": "MIT",
|
||||
"LicenseDescription": "MIT, see LICENSE for more details.",
|
||||
"Dependencies": [
|
||||
"cpl-core==2022.10.0.post7",
|
||||
"cpl-core==2022.12.0",
|
||||
"cpl-translation==2022.10.0.post2",
|
||||
"cpl-query==2022.10.0.post2",
|
||||
"cpl-discord==2022.10.0.post6",
|
||||
"cpl-query==2022.12.2",
|
||||
"cpl-discord==2022.12.0",
|
||||
"Flask==2.2.2",
|
||||
"Flask-Classful==0.14.2",
|
||||
"Flask-Cors==3.0.10",
|
||||
"PyJWT==2.6.0",
|
||||
"waitress==2.1.2",
|
||||
"Flask-SocketIO==5.3.1",
|
||||
"eventlet==0.33.1",
|
||||
"requests-oauthlib==1.3.1"
|
||||
"Flask-SocketIO==5.3.2",
|
||||
"eventlet==0.33.2",
|
||||
"requests-oauthlib==1.3.1",
|
||||
"icmplib==3.0.3"
|
||||
],
|
||||
"DevDependencies": [
|
||||
"cpl-cli==2022.10.0"
|
||||
"cpl-cli==2022.12.0"
|
||||
],
|
||||
"PythonVersion": ">=3.10.4",
|
||||
"PythonPath": {},
|
||||
@@ -54,15 +55,14 @@
|
||||
"../bot_api/bot-api.json",
|
||||
"../bot_core/bot-core.json",
|
||||
"../bot_data/bot-data.json",
|
||||
"../modules/base/base.json",
|
||||
"../modules/admin/admin.json",
|
||||
"../modules/auto_role/auto-role.json",
|
||||
"../modules/base/base.json",
|
||||
"../modules/boot_log/boot-log.json",
|
||||
"../modules/database/database.json",
|
||||
"../modules/level/level.json",
|
||||
"../modules/moderator/moderator.json",
|
||||
"../modules/permission/permission.json"
|
||||
"../modules/permission/permission.json",
|
||||
"../modules/stats/stats.json",
|
||||
"../modules/technician/technician.json"
|
||||
]
|
||||
}
|
||||
}
|
1
kdb-bot/src/bot/config
Submodule
1
kdb-bot/src/bot/config
Submodule
Submodule kdb-bot/src/bot/config added at e6faabbd8b
@@ -1,86 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Command": {
|
||||
"Path": "logs/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
}
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "localhost",
|
||||
"User": "root",
|
||||
"Password": "MTAwNjE5OTdOaWNrLko=",
|
||||
"Database": "kd_kdb",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"DiscordBot": {
|
||||
"Token": "MTAyOTgxMjE0Mjk4NTE5MTYxNA.G4ArAJ.sZh6pE-mwO2qDAr1mfHEoo7EwbJb-TZT8h6nGg",
|
||||
"Prefix": "!kn "
|
||||
},
|
||||
"Bot": {
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 2
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": "910199452915093588"
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,100 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Api": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "api.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Command": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
}
|
||||
},
|
||||
"DiscordBot": {
|
||||
"Token": "OTk4MTU5NjczODkzMDYwNzM4.GN3QyA.yvWO6L7Eu36gXQ7ARDs0Jg2J1VqIDnHLou5lT4",
|
||||
"Prefix": "!kd "
|
||||
},
|
||||
"Translation": {
|
||||
"DefaultLanguage": "de",
|
||||
"Languages": [
|
||||
"de"
|
||||
]
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "kdb_db_dev_1",
|
||||
"User": "kd_kdb",
|
||||
"Password": "IXc1RF8mc3RlQ2VqZmpxfmJ7MF9EUEBlOsKnWDI/SlV6",
|
||||
"Database": "kd_kdb",
|
||||
"Port": "3306",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"Bot": {
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 4
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316,
|
||||
236592458664902657
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": "910199452915093588"
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,97 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Api": {
|
||||
"Path": "logs/",
|
||||
"Filename": "api.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Command": {
|
||||
"Path": "logs/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
}
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "localhost",
|
||||
"User": "kd_kdb",
|
||||
"Password": "VGpZcihrb0N2T2MyZUlURQ==",
|
||||
"Database": "keksdose_bot_dev",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"DiscordBot": {
|
||||
"Token": "OTk4MTYwNDI3Njg5MTgxMjM3.GI7h67.BqD6Lu1Tz0MuG8iktYrcLnHi1pNozyMiWFGTKI",
|
||||
"Prefix": "!ke "
|
||||
},
|
||||
"Bot": {
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 2
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": 910199452915093588
|
||||
}
|
||||
},
|
||||
"Level": {
|
||||
"910199451145076828": {
|
||||
"ChangedLevelNotificationChannelId": 910199452667637892
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,97 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Api": {
|
||||
"Path": "logs/",
|
||||
"Filename": "api.log",
|
||||
"ConsoleLogLevel": "TRACE",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Command": {
|
||||
"Path": "logs/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "DEBUG",
|
||||
"FileLogLevel": "TRACE"
|
||||
}
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "localhost",
|
||||
"User": "kd_kdb",
|
||||
"Password": "VGpZcihrb0N2T2MyZUlURQ==",
|
||||
"Database": "keksdose_bot_dev",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"DiscordBot": {
|
||||
"Token": "OTk4MTYwNDI3Njg5MTgxMjM3.GI7h67.BqD6Lu1Tz0MuG8iktYrcLnHi1pNozyMiWFGTKI",
|
||||
"Prefix": "!ke "
|
||||
},
|
||||
"Bot": {
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 2
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": 910199452915093588
|
||||
}
|
||||
},
|
||||
"Level": {
|
||||
"910199451145076828": {
|
||||
"ChangedLevelNotificationChannelId": 910199452667637892
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/",
|
||||
"Filename": "log_$start_time.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "WARN"
|
||||
},
|
||||
"DiscordBot": {
|
||||
"Token": "",
|
||||
"Prefix": "! "
|
||||
}
|
||||
}
|
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "WARN"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Command": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "WARN"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "WARN"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "WARN"
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,120 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "INFO"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Api": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "api.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "INFO"
|
||||
},
|
||||
"Command": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "INFO"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "INFO"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "ERROR",
|
||||
"FileLogLevel": "INFO"
|
||||
}
|
||||
},
|
||||
"Translation": {
|
||||
"DefaultLanguage": "de",
|
||||
"Languages": [
|
||||
"de"
|
||||
]
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "kdb_db_prod_1",
|
||||
"User": "kd_kdb",
|
||||
"Password": "Kz1nan0ow4RFYlJHNl9TJsO2fcO8PnphTlQ9ckV7X35tPHk=",
|
||||
"Database": "kd_kdb",
|
||||
"Port": "3306",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"Bot": {
|
||||
"650366049023295514": {
|
||||
"MessageDeleteTimer": 2
|
||||
},
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 2
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316,
|
||||
236592458664902657
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"650366049023295514": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
784530469290246145
|
||||
],
|
||||
"AFKCommandChannelId": 784530469290246145,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
},
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://docs.sh-edraft.de/kdb/"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"650366049023295514": {
|
||||
"LoginMessageChannelId": "998544927094997093"
|
||||
},
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": "910199452915093588"
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"650366049023295514": {
|
||||
"AdminRoleIds": [
|
||||
666129320481128479
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
998161580669804565
|
||||
]
|
||||
},
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,96 +0,0 @@
|
||||
{
|
||||
"TimeFormatSettings": {
|
||||
"DateFormat": "%Y-%m-%d",
|
||||
"TimeFormat": "%H:%M:%S",
|
||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||
},
|
||||
"LoggingSettings": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "bot.log",
|
||||
"ConsoleLogLevel": "INFO",
|
||||
"FileLogLevel": "DEBUG"
|
||||
},
|
||||
"BotLoggingSettings": {
|
||||
"Api": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "api.log",
|
||||
"ConsoleLogLevel": "INFO",
|
||||
"FileLogLevel": "DEBUG"
|
||||
},
|
||||
"Command": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "commands.log",
|
||||
"ConsoleLogLevel": "INFO",
|
||||
"FileLogLevel": "DEBUG"
|
||||
},
|
||||
"Database": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "database.log",
|
||||
"ConsoleLogLevel": "INFO",
|
||||
"FileLogLevel": "DEBUG"
|
||||
},
|
||||
"Message": {
|
||||
"Path": "logs/$date_now/",
|
||||
"Filename": "message.log",
|
||||
"ConsoleLogLevel": "INFO",
|
||||
"FileLogLevel": "DEBUG"
|
||||
}
|
||||
},
|
||||
"Translation": {
|
||||
"DefaultLanguage": "de",
|
||||
"Languages": [
|
||||
"de"
|
||||
]
|
||||
},
|
||||
"DatabaseSettings": {
|
||||
"Host": "kdb_db_staging_1",
|
||||
"User": "kd_kdb",
|
||||
"Password": "MyZZd1ZNQ3fDvGI9TFV0N0LCp8OWc1k/S3J+WFJ0RCMmJmY=",
|
||||
"Database": "kd_kdb",
|
||||
"Port": "3306",
|
||||
"Charset": "utf8mb4",
|
||||
"UseUnicode": "true",
|
||||
"Buffered": "true",
|
||||
"AuthPlugin": "mysql_native_password"
|
||||
},
|
||||
"Bot": {
|
||||
"910199451145076828": {
|
||||
"MessageDeleteTimer": 4
|
||||
},
|
||||
"Technicians": [
|
||||
240160344557879316,
|
||||
236592458664902657
|
||||
],
|
||||
"WaitForRestart": 4,
|
||||
"WaitForShutdown": 4
|
||||
},
|
||||
"Base": {
|
||||
"910199451145076828": {
|
||||
"MaxVoiceStateHours": 24,
|
||||
"XpPerMessage": 2,
|
||||
"XpPerOntimeHour": 4,
|
||||
"AFKChannelIds": [
|
||||
910199452915093593,
|
||||
910199452915093594
|
||||
],
|
||||
"AFKCommandChannelId": 910199452915093594,
|
||||
"HelpCommandReferenceUrl": "https://git.sh-edraft.de/sh-edraft.de/kd_discord_bot/wiki/Befehle"
|
||||
}
|
||||
},
|
||||
"BootLog": {
|
||||
"910199451145076828": {
|
||||
"LoginMessageChannelId": "910199452915093588"
|
||||
}
|
||||
},
|
||||
"Permission": {
|
||||
"910199451145076828": {
|
||||
"AdminRoleIds": [
|
||||
925072155203477584
|
||||
],
|
||||
"ModeratorRoleIds": [
|
||||
925072209884635167
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"FeatureFlags": {
|
||||
"ApiModule": false,
|
||||
"AdminModule": true,
|
||||
"AutoRoleModule": true,
|
||||
"BaseModule": true,
|
||||
"BootLogModule": true,
|
||||
"CoreModule": true,
|
||||
"CoreExtensionModule": true,
|
||||
"DatabaseModule": true,
|
||||
"ModeratorModule": true,
|
||||
"LevelModule": true,
|
||||
"PermissionModule": true,
|
||||
"PresenceModule": true
|
||||
}
|
||||
}
|
@@ -12,6 +12,7 @@ from bot.startup_migration_extension import StartupMigrationExtension
|
||||
from bot.startup_module_extension import StartupModuleExtension
|
||||
from bot.startup_settings_extension import StartupSettingsExtension
|
||||
from bot_api.app_api_extension import AppApiExtension
|
||||
from bot_core.core_extension.core_extension import CoreExtension
|
||||
from modules.boot_log.boot_log_extension import BootLogExtension
|
||||
from modules.database.database_extension import DatabaseExtension
|
||||
|
||||
@@ -31,6 +32,7 @@ class Program:
|
||||
.use_extension(BootLogExtension) \
|
||||
.use_extension(DatabaseExtension) \
|
||||
.use_extension(AppApiExtension) \
|
||||
.use_extension(CoreExtension) \
|
||||
.use_startup(Startup)
|
||||
self.app: Application = await app_builder.build_async()
|
||||
await self.app.run_async()
|
||||
|
@@ -11,6 +11,7 @@ from modules.database.database_module import DatabaseModule
|
||||
from modules.level.level_module import LevelModule
|
||||
from modules.permission.permission_module import PermissionModule
|
||||
from modules.stats.stats_module import StatsModule
|
||||
from modules.technician.technician_module import TechnicianModule
|
||||
|
||||
|
||||
class ModuleList:
|
||||
@@ -21,13 +22,14 @@ class ModuleList:
|
||||
return List(type, [
|
||||
CoreModule, # has to be first!
|
||||
DataModule,
|
||||
PermissionModule,
|
||||
DatabaseModule,
|
||||
AutoRoleModule,
|
||||
BaseModule,
|
||||
DatabaseModule,
|
||||
LevelModule,
|
||||
PermissionModule,
|
||||
ApiModule,
|
||||
StatsModule,
|
||||
TechnicianModule,
|
||||
# has to be last!
|
||||
BootLogModule,
|
||||
CoreExtensionModule,
|
||||
|
@@ -5,6 +5,7 @@ from cpl_core.environment import ApplicationEnvironmentABC
|
||||
|
||||
from bot_data.abc.migration_abc import MigrationABC
|
||||
from bot_data.migration.api_migration import ApiMigration
|
||||
from bot_data.migration.auto_role_fix1_migration import AutoRoleFix1Migration
|
||||
from bot_data.migration.auto_role_migration import AutoRoleMigration
|
||||
from bot_data.migration.initial_migration import InitialMigration
|
||||
from bot_data.migration.level_migration import LevelMigration
|
||||
@@ -27,3 +28,4 @@ class StartupMigrationExtension(StartupExtensionABC):
|
||||
services.add_transient(MigrationABC, ApiMigration) # 15.10.2022 #70 - 0.3.0
|
||||
services.add_transient(MigrationABC, LevelMigration) # 06.11.2022 #25 - 0.3.0
|
||||
services.add_transient(MigrationABC, StatsMigration) # 09.11.2022 #46 - 0.3.0
|
||||
services.add_transient(MigrationABC, AutoRoleFix1Migration) # 30.12.2022 #151 - 0.3.0
|
||||
|
@@ -6,7 +6,7 @@
|
||||
"not_implemented_yet": "Ey Alter, das kann ich noch nicht...",
|
||||
"presence": {
|
||||
"booting": "{} Ich fahre gerade hoch...",
|
||||
"running": "{} Behalte Ruhe und iss Kekse :D",
|
||||
"running": "{} Ich esse Kekse :D",
|
||||
"restart": "{} Muss neue Kekse holen...",
|
||||
"shutdown": "{} Ich werde bestimmt wieder kommen..."
|
||||
},
|
||||
@@ -72,11 +72,6 @@
|
||||
}
|
||||
},
|
||||
"modules": {
|
||||
"admin": {
|
||||
"restart_message": "Bin gleich wieder da :D",
|
||||
"shutdown_message": "Trauert nicht um mich, es war eine logische Entscheidung. Das Wohl von Vielen, es wiegt schwerer als das Wohl von Wenigen oder eines Einzelnen. Ich war es und ich werde es immer sein, Euer Freund. Lebt lange und in Frieden :)",
|
||||
"deploy_message": "Der neue Stand wurde hochgeladen."
|
||||
},
|
||||
"auto_role": {
|
||||
"list": {
|
||||
"title": "Beobachtete Nachrichten:",
|
||||
@@ -113,7 +108,7 @@
|
||||
"error": {
|
||||
"not_found": "Regel für auto-role {} nicht gefunden!",
|
||||
"emoji_not_found": "Emoji {} für auto-role Regel {} nicht gefunden!",
|
||||
"rule_not_found": "Rolle {} für auto-role Regel {} nicht gefunden!",
|
||||
"role_not_found": "Rolle {} für auto-role Regel {} nicht gefunden!",
|
||||
"already_exists": "Regel für auto-role {} existiert bereits!"
|
||||
}
|
||||
},
|
||||
@@ -132,16 +127,17 @@
|
||||
"purge_message": "Na gut..., ich lösche alle Nachrichten wenns sein muss."
|
||||
},
|
||||
"base": {
|
||||
"technician_error_message": "Es gab ein Fehler mit dem Event: {}\nDatum und Zeit: {}\nSchau bitte ins log für Details.UUID: {}",
|
||||
"technician_command_error_message": "Es gab ein Fehler mit dem Befehl: {} ausgelöst von {} -> {}\nDatum und Zeit: {}\nSchau bitte ins log für Details.UUID: {}",
|
||||
"welcome_message": "Hello There!\nIch heiße dich bei {} herzlichst willkommen!",
|
||||
"technician_error_message": "Es gab ein Fehler mit dem Event: {}\nDatum und Zeit: {}\nSchau bitte ins log für Details.\nUUID: {}",
|
||||
"technician_command_error_message": "Es gab ein Fehler mit dem Befehl: {} ausgelöst von {} -> {}\nDatum und Zeit: {}\nSchau bitte ins log für Details.\nUUID: {}",
|
||||
"welcome_message": "Hello There!\nIch heiße dich bei {} herzlichst Willkommen!",
|
||||
"welcome_message_for_team": "{} hat gerade das Irrenhaus betreten.",
|
||||
"goodbye_message": "Schade das du uns so schnell verlässt :(",
|
||||
"goodbye_message": "Schade, dass du uns so schnell verlässt :(",
|
||||
"afk_command_channel_missing_message": "Zu unfähig einem Sprachkanal beizutreten?",
|
||||
"afk_command_move_message": "Ich verschiebe dich ja schon... (◔_◔)",
|
||||
"member_joined_help_voice_channel": "{} braucht hilfe, bitte kümmer dich drum :D",
|
||||
"pong": "Pong",
|
||||
"info": {
|
||||
"title": "Gismo",
|
||||
"title": "Krümmelmonster",
|
||||
"description": "Informationen über mich",
|
||||
"fields": {
|
||||
"version": "Version",
|
||||
@@ -155,43 +151,79 @@
|
||||
},
|
||||
"footer": ""
|
||||
},
|
||||
"user_info": {
|
||||
"fields": {
|
||||
"mass_move": {
|
||||
"moved": "Alle Personen aus {} wurden nach {} verschoben.",
|
||||
"channel_from_error": "Du musst dich in einem Voicechannel befinden oder die Option \"channel_from\" mit angeben."
|
||||
},
|
||||
"presence": {
|
||||
"changed": "Presence wurde geändert.",
|
||||
"removed": "Presence wurde entfernt.",
|
||||
"max_char_count_exceeded": "Der Text darf nicht mehr als 128 Zeichen lang sein!"
|
||||
},
|
||||
"user": {
|
||||
"atr": {
|
||||
"id": "Id",
|
||||
"name": "Name",
|
||||
"discord_join": "Discord beigetreten am",
|
||||
"last_join": "Server beigetreten am",
|
||||
"xp": "XP",
|
||||
"ontime": "Ontime",
|
||||
"roles": "Rollen",
|
||||
"joins": "Beitritte",
|
||||
"lefts": "Abgänge",
|
||||
"warnings": "Verwarnungen"
|
||||
},
|
||||
"footer": ""
|
||||
"info": {
|
||||
"footer": ""
|
||||
},
|
||||
"get": {
|
||||
"xp": "{} hat {} xp",
|
||||
"ontime": "{} war insgesamt {} Stunden aktiv in einem Sprachkanal"
|
||||
},
|
||||
"set": {
|
||||
"xp": "{} hat nun {} xp",
|
||||
"error": {
|
||||
"value_type_not_numeric": "Der angegebende Wert ist keine Ganzzahl! :(",
|
||||
"type_error": "Der angegebene Wert ist keine Zahl! :("
|
||||
}
|
||||
},
|
||||
"remove": {
|
||||
"xp": "Die {} von {} wurden entfernt",
|
||||
"ontime": "Die {} von {} wurden entfernt"
|
||||
},
|
||||
"error": {
|
||||
"atr_not_found": "Das Attribut {} konnte nicht gefunden werden :("
|
||||
}
|
||||
}
|
||||
},
|
||||
"boot_log": {
|
||||
"login_message": "Ich bin on the line :D\nDer Scheiß hat {} Sekunden gedauert"
|
||||
},
|
||||
"level": {
|
||||
"new_level_message": "<@{}> ist nun Level {}",
|
||||
"seeding_started": "Levelsystem wird neu geladen.",
|
||||
"seeding_failed": "Levelsystem konnte nicht neu geladen werden.",
|
||||
"seeding_finished": "Levelsystem wurde Erfolgreich neu geladen.",
|
||||
"new_level_message": "{} ist nun Level {}",
|
||||
"seeding_started": "Levelsystem wird neu geladen...",
|
||||
"seeding_failed": "Levelsystem konnte nicht neu geladen werden :(",
|
||||
"seeding_finished": "Levelsystem wurde Erfolgreich neu geladen :)",
|
||||
"error": {
|
||||
"nothing_found": "Keine Level Einträge gefunden.",
|
||||
"level_with_name_already_exists": "Ein Level mit dem Namen {} existiert bereits!",
|
||||
"level_with_xp_already_exists": "Das Level {} hat bereits die Mindest XP {}!"
|
||||
"level_with_xp_already_exists": "Das Level {} hat bereits die Mindest-XP {}!"
|
||||
},
|
||||
"list": {
|
||||
"title": "Level:",
|
||||
"description": "Konfigurierte Level:",
|
||||
"name": "Name",
|
||||
"min_xp": "Mindest XP",
|
||||
"min_xp": "Mindest-XP",
|
||||
"permission_int": "Berechtigungen"
|
||||
},
|
||||
"create": {
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt."
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt :D"
|
||||
},
|
||||
"edit": {
|
||||
"edited": "Level {} wurde bearbeitet :D",
|
||||
"color_invalid": "Die Farbe {} ist ungültig!",
|
||||
"permission_invalid": "Der Berechtigungswert {} ist ungültig!",
|
||||
"not_found": "Level {} nicht gefunden!"
|
||||
},
|
||||
"remove": {
|
||||
"success": "Level {} wurde entfernt :D",
|
||||
@@ -241,6 +273,11 @@
|
||||
"failed": "Statistik kann nicht gelöscht werden :(",
|
||||
"success": "Statistik wurde gelöscht :D"
|
||||
}
|
||||
},
|
||||
"technician": {
|
||||
"restart_message": "Bin gleich wieder da :D",
|
||||
"shutdown_message": "Trauert nicht um mich, es war eine logische Entscheidung. Das Wohl von Vielen, es wiegt schwerer als das Wohl von Wenigen oder eines Einzelnen. Ich war es und ich werde es immer sein, Euer Freund. Lebt lange und in Frieden :)",
|
||||
"log_message": "Hier sind deine Logdateien! :)"
|
||||
}
|
||||
},
|
||||
"api": {
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -11,11 +11,11 @@ Discord bot for the Keksdose discord Server
|
||||
|
||||
"""
|
||||
|
||||
__title__ = 'bot_api.service'
|
||||
__title__ = 'bot_api.abc'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -70,6 +70,9 @@ class AuthServiceABC(ABC):
|
||||
@abstractmethod
|
||||
async def login_async(self, user_dto: AuthUserDTO) -> TokenDTO: pass
|
||||
|
||||
@abstractmethod
|
||||
async def login_discord_async(self, oauth_dto: AuthUserDTO) -> TokenDTO: pass
|
||||
|
||||
@abstractmethod
|
||||
async def refresh_async(self, token_dto: TokenDTO) -> TokenDTO: pass
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"Version": {
|
||||
"Major": "0",
|
||||
"Minor": "3",
|
||||
"Micro": "dev70"
|
||||
"Micro": "0"
|
||||
},
|
||||
"Author": "",
|
||||
"AuthorEmail": "",
|
||||
@@ -16,10 +16,10 @@
|
||||
"LicenseName": "",
|
||||
"LicenseDescription": "",
|
||||
"Dependencies": [
|
||||
"cpl-core==2022.10.0.post7"
|
||||
"cpl-core==2022.12.0"
|
||||
],
|
||||
"DevDependencies": [
|
||||
"cpl-cli==2022.10.0"
|
||||
"cpl-cli==2022.12.0"
|
||||
],
|
||||
"PythonVersion": ">=3.10.4",
|
||||
"PythonPath": {},
|
||||
|
1
kdb-bot/src/bot_api/config
Submodule
1
kdb-bot/src/bot_api/config
Submodule
Submodule kdb-bot/src/bot_api/config added at e6046881b5
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"Api": {
|
||||
"Port": 80,
|
||||
"Host": "0.0.0.0",
|
||||
"RedirectToHTTPS": false
|
||||
},
|
||||
"Authentication": {
|
||||
"SecretKey": "RjNiNUxEeisjSnZ6Zz1XIUBnc2EleHNG",
|
||||
"Issuer": "http://localhost:8044",
|
||||
"Audience": "http://localhost:8043",
|
||||
"TokenExpireTime": 1,
|
||||
"RefreshTokenExpireTime": 7
|
||||
},
|
||||
"DiscordAuthentication": {
|
||||
"ClientSecret": "cmhqYmF4MXBCd2IzeEZoSXRZQ29vY3NwUWwxQzFTZng=",
|
||||
"RedirectURL": "http://localhost:8043/auth/register",
|
||||
"Scope": [
|
||||
"identify",
|
||||
"email"
|
||||
],
|
||||
"TokenURL": "https://discordapp.com/api/oauth2/token",
|
||||
"AuthURL": "https://discordapp.com/api/oauth2/authorize"
|
||||
},
|
||||
"Frontend": {
|
||||
"URL": "http://localhost:8043/"
|
||||
},
|
||||
"EMailClientSettings": {
|
||||
"Host": "mail.sh-edraft.de",
|
||||
"Port": "587",
|
||||
"UserName": "dev-srv@sh-edraft.de",
|
||||
"Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA=="
|
||||
}
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"Api": {
|
||||
"Port": 5000,
|
||||
"Host": "0.0.0.0",
|
||||
"RedirectToHTTPS": false
|
||||
},
|
||||
"Authentication": {
|
||||
"SecretKey": "RjNiNUxEeisjSnZ6Zz1XIUBnc2EleHNG",
|
||||
"Issuer": "http://localhost:5000",
|
||||
"Audience": "http://localhost:4200",
|
||||
"TokenExpireTime": 1,
|
||||
"RefreshTokenExpireTime": 7
|
||||
},
|
||||
"DiscordAuthentication": {
|
||||
"ClientSecret": "V3FTb3JYVFBiVktEeHZxdWJDWW4xcnBCbXRwdmpwcy0=",
|
||||
"_RedirectURL": "http://localhost:5000/api/auth/discord/register",
|
||||
"RedirectURL": "http://localhost:4200/auth/register",
|
||||
"Scope": [
|
||||
"identify",
|
||||
"email"
|
||||
],
|
||||
"TokenURL": "https://discordapp.com/api/oauth2/token",
|
||||
"AuthURL": "https://discordapp.com/api/oauth2/authorize"
|
||||
},
|
||||
"Frontend": {
|
||||
"URL": "http://localhost:4200/"
|
||||
}
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"Api": {
|
||||
"Port": 8044,
|
||||
"Host": "0.0.0.0",
|
||||
"RedirectToHTTPS": false
|
||||
},
|
||||
"Authentication": {
|
||||
"SecretKey": "RjNiNUxEeisjSnZ6Zz1XIUBnc2EleHNG",
|
||||
"Issuer": "http://localhost:8084",
|
||||
"Audience": "http://localhost:4200",
|
||||
"TokenExpireTime": 1,
|
||||
"RefreshTokenExpireTime": 7
|
||||
},
|
||||
"DiscordAuthentication": {
|
||||
"ClientSecret": "V3FTb3JYVFBiVktEeHZxdWJDWW4xcnBCbXRwdmpwcy0=",
|
||||
"RedirectURL": "http://localhost:4200/auth/register",
|
||||
"Scope": [
|
||||
"identify",
|
||||
"email"
|
||||
],
|
||||
"TokenURL": "https://discordapp.com/api/oauth2/token",
|
||||
"AuthURL": "https://discordapp.com/api/oauth2/authorize"
|
||||
},
|
||||
"Frontend": {
|
||||
"URL": "http://localhost:4200/"
|
||||
}
|
||||
}
|
@@ -1 +0,0 @@
|
||||
{}
|
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"Api": {
|
||||
"Port": 80,
|
||||
"Host": "0.0.0.0",
|
||||
"RedirectToHTTPS": false
|
||||
},
|
||||
"Authentication": {
|
||||
"SecretKey": "cEwzW2BdcWxGLTBdPClJImNIbDFJXjVsPGw=",
|
||||
"Issuer": "https://kdb.keksdose-gaming.de/",
|
||||
"Audience": "https://kdb.keksdose-gaming.de/",
|
||||
"TokenExpireTime": 1,
|
||||
"RefreshTokenExpireTime": 7
|
||||
},
|
||||
"DiscordAuthentication": {
|
||||
"ClientSecret": "SXpIOGY4ZzhWVEljOXJwSk5QcVpNU0lmRDNTb2c1Vk8=",
|
||||
"RedirectURL": "https://kdb.keksdose-gaming.de/auth/register",
|
||||
"Scope": [
|
||||
"identify",
|
||||
"email"
|
||||
],
|
||||
"TokenURL": "https://discordapp.com/api/oauth2/token",
|
||||
"AuthURL": "https://discordapp.com/api/oauth2/authorize"
|
||||
},
|
||||
"Frontend": {
|
||||
"URL": "https://kdb.keksdose-gaming.de/"
|
||||
},
|
||||
"EMailClientSettings": {
|
||||
"Host": "mail.sh-edraft.de",
|
||||
"Port": "587",
|
||||
"UserName": "kruemmelmonster@sh-edraft.de",
|
||||
"Credentials": "YjAwT3tPSVspezdadExdOEkoV3M3XiNb"
|
||||
}
|
||||
}
|
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"Api": {
|
||||
"Port": 80,
|
||||
"Host": "0.0.0.0",
|
||||
"RedirectToHTTPS": false
|
||||
},
|
||||
"Authentication": {
|
||||
"SecretKey": "Kj87RjklLUM1MytsUjtbcCswRidBV2VdMXU=",
|
||||
"Issuer": "https://kdb-test.keksdose-gaming.de/",
|
||||
"Audience": "https://kdb-test.keksdose-gaming.de/",
|
||||
"TokenExpireTime": 1,
|
||||
"RefreshTokenExpireTime": 7
|
||||
},
|
||||
"DiscordAuthentication": {
|
||||
"ClientSecret": "VVdRZTg1SnFxUExCNmhzU1RZY05mTHV5TmVaV0NkUmc=",
|
||||
"RedirectURL": "https://kdb-test.keksdose-gaming.de/auth/register",
|
||||
"Scope": [
|
||||
"identify",
|
||||
"email"
|
||||
],
|
||||
"TokenURL": "https://discordapp.com/api/oauth2/token",
|
||||
"AuthURL": "https://discordapp.com/api/oauth2/authorize"
|
||||
},
|
||||
"Frontend": {
|
||||
"URL": "https://kdb-test.keksdose-gaming.de/"
|
||||
},
|
||||
"EMailClientSettings": {
|
||||
"Host": "mail.sh-edraft.de",
|
||||
"Port": "587",
|
||||
"UserName": "kruemmelmonster@sh-edraft.de",
|
||||
"Credentials": "YjAwT3tPSVspezdadExdOEkoV3M3XiNb"
|
||||
}
|
||||
}
|
@@ -1 +0,0 @@
|
||||
{}
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.configuration'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.controller'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -46,14 +46,14 @@ class AuthController:
|
||||
@Route.authorize(role=AuthRoleEnum.admin)
|
||||
async def get_all_users(self) -> Response:
|
||||
result = await self._auth_service.get_all_auth_users_async()
|
||||
return jsonify(result.select(lambda x: x.to_dict()))
|
||||
return jsonify(result.select(lambda x: x.to_dict()).to_list())
|
||||
|
||||
@Route.post(f'{BasePath}/users/get/filtered')
|
||||
@Route.authorize(role=AuthRoleEnum.admin)
|
||||
async def get_filtered_users(self) -> Response:
|
||||
dto: AuthUserSelectCriteria = JSONProcessor.process(AuthUserSelectCriteria, request.get_json(force=True, silent=True))
|
||||
result = await self._auth_service.get_filtered_auth_users_async(dto)
|
||||
result.result = result.result.select(lambda x: x.to_dict())
|
||||
result.result = result.result.select(lambda x: x.to_dict()).to_list()
|
||||
return jsonify(result.to_dict())
|
||||
|
||||
@Route.get(f'{BasePath}/users/get/<email>')
|
||||
|
@@ -82,8 +82,18 @@ class AuthDiscordController:
|
||||
), response['id'])
|
||||
return jsonify(result.to_dict())
|
||||
|
||||
@Route.post(f'{BasePath}/register')
|
||||
async def discord_register(self):
|
||||
dto: OAuthDTO = JSONProcessor.process(OAuthDTO, request.get_json(force=True, silent=True))
|
||||
await self._auth_service.add_auth_user_by_oauth_async(dto)
|
||||
return '', 200
|
||||
@Route.get(f'{BasePath}/login')
|
||||
async def discord_login(self) -> Response:
|
||||
response = self._get_user_from_discord_response()
|
||||
dto = AuthUserDTO(
|
||||
0,
|
||||
response['username'],
|
||||
response['discriminator'],
|
||||
response['email'],
|
||||
str(uuid.uuid4()),
|
||||
None,
|
||||
AuthRoleEnum.normal
|
||||
)
|
||||
|
||||
result = await self._auth_service.login_discord_async(dto)
|
||||
return jsonify(result.to_dict())
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.controller.discord'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -40,14 +40,14 @@ class ServerController:
|
||||
@Route.authorize(role=AuthRoleEnum.admin)
|
||||
async def get_all_servers(self) -> Response:
|
||||
result = await self._discord_service.get_all_servers()
|
||||
result = result.select(lambda x: x.to_dict())
|
||||
result = result.select(lambda x: x.to_dict()).to_list()
|
||||
return jsonify(result)
|
||||
|
||||
@Route.get(f'{BasePath}/get/servers-by-user')
|
||||
@Route.authorize
|
||||
async def get_all_servers_by_user(self) -> Response:
|
||||
result = await self._discord_service.get_all_servers_by_user()
|
||||
result = result.select(lambda x: x.to_dict())
|
||||
result = result.select(lambda x: x.to_dict()).to_list()
|
||||
return jsonify(result)
|
||||
|
||||
@Route.post(f'{BasePath}/get/filtered')
|
||||
@@ -55,11 +55,11 @@ class ServerController:
|
||||
async def get_filtered_servers(self) -> Response:
|
||||
dto: ServerSelectCriteria = JSONProcessor.process(ServerSelectCriteria, request.get_json(force=True, silent=True))
|
||||
result = await self._discord_service.get_filtered_servers_async(dto)
|
||||
result.result = result.result.select(lambda x: x.to_dict())
|
||||
result.result = result.result.select(lambda x: x.to_dict()).to_list()
|
||||
return jsonify(result.to_dict())
|
||||
|
||||
@Route.get(f'{BasePath}/get/<id>')
|
||||
@Route.authorize
|
||||
async def get_server_by_id(self, id: int) -> Response:
|
||||
result = await self._discord_service.get_server_by_id_async(id)
|
||||
result = await self._discord_service.get_server_by_id_async(id).to_list()
|
||||
return jsonify(result.to_dict())
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.event'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.exception'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.filter'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.filter.discord'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import enum
|
||||
from inspect import signature, Parameter
|
||||
|
||||
from cpl_core.utils import String
|
||||
@@ -28,6 +29,9 @@ class JSONProcessor:
|
||||
if isinstance(value, dict):
|
||||
value = JSONProcessor.process(parameter.annotation, value)
|
||||
|
||||
if issubclass(parameter.annotation, enum.Enum):
|
||||
value = parameter.annotation(value)
|
||||
|
||||
args.append(value)
|
||||
|
||||
elif parameter.default != Parameter.empty:
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.logging'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.model'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -85,7 +85,7 @@ class AuthUserDTO(DtoABC):
|
||||
self._email = values['email']
|
||||
self._password = values['password']
|
||||
self._is_confirmed = values['isConfirmed']
|
||||
self._auth_role = values['authRole']
|
||||
self._auth_role = AuthRoleEnum(values['authRole'])
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.model.discord'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -33,8 +33,8 @@ class UpdateAuthUserDTO(DtoABC):
|
||||
return self._change_password
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
self._auth_user = values['authUser']
|
||||
self._new_auth_user = values['newAuthUser']
|
||||
self._auth_user = AuthUserDTO().from_dict(values['authUser'])
|
||||
self._new_auth_user = AuthUserDTO().from_dict(values['newAuthUser'])
|
||||
self._change_password = False if 'changePassword' not in values else bool(values['changePassword'])
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.route'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.service'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -460,6 +460,24 @@ class AuthService(AuthServiceABC):
|
||||
self._db.save_changes()
|
||||
return TokenDTO(token, refresh_token)
|
||||
|
||||
async def login_discord_async(self, user_dto: AuthUserDTO) -> TokenDTO:
|
||||
if user_dto is None:
|
||||
raise ServiceException(ServiceErrorCode.InvalidData, 'User not set')
|
||||
|
||||
db_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
||||
if db_user is None:
|
||||
await self.add_auth_user_async(user_dto)
|
||||
# raise ServiceException(ServiceErrorCode.InvalidUser, f'User not found')
|
||||
|
||||
db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
|
||||
token = self.generate_token(db_user)
|
||||
refresh_token = self._create_and_save_refresh_token(db_user)
|
||||
if db_user.forgot_password_id is not None:
|
||||
db_user.forgot_password_id = None
|
||||
|
||||
self._db.save_changes()
|
||||
return TokenDTO(token, refresh_token)
|
||||
|
||||
async def refresh_async(self, token_dto: TokenDTO) -> TokenDTO:
|
||||
if token_dto is None:
|
||||
raise ServiceException(ServiceErrorCode.InvalidData, f'Token not set')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_api.transformer'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -11,11 +11,11 @@ Discord bot for the Keksdose discord Server
|
||||
|
||||
"""
|
||||
|
||||
__title__ = 'bot_core.service'
|
||||
__title__ = 'bot_core.abc'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -1,5 +1,7 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Callable
|
||||
|
||||
from cpl_query.extension import List
|
||||
from discord.ext.commands import Context
|
||||
|
||||
|
||||
@@ -14,11 +16,20 @@ class ClientUtilsServiceABC(ABC):
|
||||
@abstractmethod
|
||||
def moved_user(self, guild_id: int): pass
|
||||
|
||||
@abstractmethod
|
||||
def moved_users(self, guild_id: int, count: int): pass
|
||||
|
||||
@abstractmethod
|
||||
def get_client(self, dc_ic: int, guild_id: int): pass
|
||||
|
||||
@abstractmethod
|
||||
async def check_if_bot_is_ready_yet(self) -> bool: pass
|
||||
|
||||
@abstractmethod
|
||||
async def check_if_bot_is_ready_yet_and_respond(self, ctx: Context) -> bool: pass
|
||||
|
||||
@abstractmethod
|
||||
async def presence_game(self, t_key: str): pass
|
||||
|
||||
@abstractmethod
|
||||
def get_auto_complete_list(self, _l: List, current: str, select: Callable = None) -> List: pass
|
||||
|
@@ -13,10 +13,14 @@ class CustomFileLoggerABC(Logger, ABC):
|
||||
@abstractmethod
|
||||
def __init__(self, key: str, config: ConfigurationABC, time_format: TimeFormatSettings, env: ApplicationEnvironmentABC):
|
||||
self._key = key
|
||||
settings: LoggingSettings = config.get_configuration(f'{FileLoggingSettings.__name__}_{key}')
|
||||
Logger.__init__(self, settings, time_format, env)
|
||||
self._settings: LoggingSettings = config.get_configuration(f'{FileLoggingSettings.__name__}_{key}')
|
||||
Logger.__init__(self, self._settings, time_format, env)
|
||||
self._begin_log()
|
||||
|
||||
@property
|
||||
def settings(self) -> LoggingSettings:
|
||||
return self._settings
|
||||
|
||||
def _begin_log(self):
|
||||
console_level = self._console.value
|
||||
self._console = LoggingLevelEnum.OFF
|
||||
|
@@ -25,7 +25,7 @@ class MessageServiceABC(ABC):
|
||||
async def send_dm_message(self, message: Union[str, discord.Embed], receiver: Union[discord.User, discord.Member], without_tracking=False): pass
|
||||
|
||||
@abstractmethod
|
||||
async def send_ctx_msg(self, ctx: Context, message: Union[str, discord.Embed], file: discord.File = None, is_persistent: bool = False, wait_before_delete: int = None, without_tracking=True): pass
|
||||
async def send_ctx_msg(self, ctx: Context, message: Union[str, discord.Embed], file: discord.File = None, is_persistent: bool = False, is_public: bool = False, wait_before_delete: int = None, without_tracking=True): pass
|
||||
|
||||
@abstractmethod
|
||||
async def send_interaction_msg(self, interaction: Interaction, message: Union[str, discord.Embed], is_persistent: bool = False, wait_before_delete: int = None, without_tracking=True): pass
|
||||
async def send_interaction_msg(self, interaction: Interaction, message: Union[str, discord.Embed], is_persistent: bool = False, is_public: bool = False, wait_before_delete: int = None, without_tracking=True, **kwargs): pass
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"Version": {
|
||||
"Major": "0",
|
||||
"Minor": "3",
|
||||
"Micro": "dev70"
|
||||
"Micro": "0"
|
||||
},
|
||||
"Author": "Sven Heidemann",
|
||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||
@@ -16,10 +16,10 @@
|
||||
"LicenseName": "MIT",
|
||||
"LicenseDescription": "MIT, see LICENSE for more details.",
|
||||
"Dependencies": [
|
||||
"cpl-core>=0.3.dev70"
|
||||
"cpl-core==2022.12.0"
|
||||
],
|
||||
"DevDependencies": [
|
||||
"cpl-cli==2022.10.0"
|
||||
"cpl-cli==2022.12.0"
|
||||
],
|
||||
"PythonVersion": ">=3.10.4",
|
||||
"PythonPath": {},
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.configuration'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.core_extension'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
30
kdb-bot/src/bot_core/core_extension/core_extension.py
Normal file
30
kdb-bot/src/bot_core/core_extension/core_extension.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from cpl_core.application import ApplicationExtensionABC
|
||||
from cpl_core.configuration import ConfigurationABC
|
||||
from cpl_core.dependency_injection import ServiceProviderABC
|
||||
from cpl_translation import TranslatePipe
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||
from bot_core.helper.command_checks import CommandChecks
|
||||
from bot_core.helper.event_checks import EventChecks
|
||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
||||
|
||||
|
||||
class CoreExtension(ApplicationExtensionABC):
|
||||
|
||||
def __init__(self):
|
||||
ApplicationExtensionABC.__init__(self)
|
||||
|
||||
async def run(self, config: ConfigurationABC, services: ServiceProviderABC):
|
||||
feature_flags: FeatureFlagsSettings = config.get_configuration(FeatureFlagsSettings)
|
||||
if not feature_flags.get_flag(FeatureFlagsEnum.core_module):
|
||||
return
|
||||
|
||||
permissions: PermissionServiceABC = services.get_service(PermissionServiceABC)
|
||||
client_utils: ClientUtilsServiceABC = services.get_service(ClientUtilsServiceABC)
|
||||
message_service: MessageServiceABC = services.get_service(MessageServiceABC)
|
||||
t: TranslatePipe = services.get_service(TranslatePipe)
|
||||
CommandChecks.init(permissions, client_utils, message_service, t)
|
||||
EventChecks.init(client_utils)
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.events'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
26
kdb-bot/src/bot_core/exception/__init__.py
Normal file
26
kdb-bot/src/bot_core/exception/__init__.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
bot Keksdose bot
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Discord bot for the Keksdose discord Server
|
||||
|
||||
:copyright: (c) 2022 sh-edraft.de
|
||||
:license: MIT, see LICENSE for more details.
|
||||
|
||||
"""
|
||||
|
||||
__title__ = 'bot_core.exception'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
7
kdb-bot/src/bot_core/exception/check_error.py
Normal file
7
kdb-bot/src/bot_core/exception/check_error.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from discord.ext.commands import CommandError
|
||||
|
||||
|
||||
class CheckError(CommandError):
|
||||
|
||||
def __init__(self, message, *args):
|
||||
CommandError.__init__(self, message, *args)
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.helper'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
76
kdb-bot/src/bot_core/helper/command_checks.py
Normal file
76
kdb-bot/src/bot_core/helper/command_checks.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from typing import Optional
|
||||
|
||||
from cpl_translation import TranslatePipe
|
||||
from discord.ext import commands
|
||||
from discord.ext.commands import Context
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||
from bot_core.exception.check_error import CheckError
|
||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
||||
|
||||
|
||||
class CommandChecks:
|
||||
_permissions: Optional[PermissionServiceABC] = None
|
||||
_client_utils: Optional[ClientUtilsServiceABC] = None
|
||||
_message_service: Optional[MessageServiceABC] = None
|
||||
_t: Optional[TranslatePipe] = None
|
||||
|
||||
@classmethod
|
||||
def init(
|
||||
cls,
|
||||
permissions: PermissionServiceABC,
|
||||
client_utils: ClientUtilsServiceABC,
|
||||
message_service: MessageServiceABC,
|
||||
translate: TranslatePipe,
|
||||
):
|
||||
cls._permissions = permissions
|
||||
cls._client_utils = client_utils
|
||||
cls._message_service = message_service
|
||||
cls._t = translate
|
||||
|
||||
@classmethod
|
||||
def check_is_ready(cls):
|
||||
async def check_if_bot_is_ready_yet_and_respond(ctx: Context) -> bool:
|
||||
result = await cls._client_utils.check_if_bot_is_ready_yet_and_respond(ctx)
|
||||
if not result:
|
||||
raise CheckError(f'Bot is not ready')
|
||||
return result
|
||||
|
||||
return commands.check(check_if_bot_is_ready_yet_and_respond)
|
||||
|
||||
@classmethod
|
||||
def check_is_member_admin(cls):
|
||||
async def check_is_member_admin(ctx: Context):
|
||||
has_permission = cls._permissions.is_member_admin(ctx.author)
|
||||
if not has_permission:
|
||||
await cls._message_service.send_ctx_msg(ctx, cls._t.transform('common.no_permission_message'))
|
||||
raise CheckError(f'Member {ctx.author.name} is not admin')
|
||||
|
||||
return has_permission
|
||||
|
||||
return commands.check(check_is_member_admin)
|
||||
|
||||
@classmethod
|
||||
def check_is_member_technician(cls):
|
||||
async def check_is_member_technician(ctx: Context):
|
||||
has_permission = cls._permissions.is_member_technician(ctx.author)
|
||||
if not has_permission:
|
||||
await cls._message_service.send_ctx_msg(ctx, cls._t.transform('common.no_permission_message'))
|
||||
raise CheckError(f'Member {ctx.author.name} is not technician')
|
||||
|
||||
return has_permission
|
||||
|
||||
return commands.check(check_is_member_technician)
|
||||
|
||||
@classmethod
|
||||
def check_is_member_moderator(cls):
|
||||
async def check_is_member_moderator(ctx: Context):
|
||||
has_permission = cls._permissions.is_member_moderator(ctx.author)
|
||||
if not has_permission:
|
||||
await cls._message_service.send_ctx_msg(ctx, cls._t.transform('common.no_permission_message'))
|
||||
raise CheckError(f'Member {ctx.author.name} is not moderator')
|
||||
|
||||
return has_permission
|
||||
|
||||
return commands.check(check_is_member_moderator)
|
31
kdb-bot/src/bot_core/helper/event_checks.py
Normal file
31
kdb-bot/src/bot_core/helper/event_checks.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from typing import Optional
|
||||
|
||||
from cpl_translation import TranslatePipe
|
||||
from discord.ext import commands
|
||||
from discord.ext.commands import Context
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||
from bot_core.exception.check_error import CheckError
|
||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
||||
|
||||
|
||||
class EventChecks:
|
||||
_client_utils: Optional[ClientUtilsServiceABC] = None
|
||||
|
||||
@classmethod
|
||||
def init(
|
||||
cls,
|
||||
client_utils: ClientUtilsServiceABC,
|
||||
):
|
||||
cls._client_utils = client_utils
|
||||
|
||||
@classmethod
|
||||
def check_is_ready(cls):
|
||||
async def check_if_bot_is_ready() -> bool:
|
||||
result = await cls._client_utils.check_if_bot_is_ready()
|
||||
if not result:
|
||||
raise CheckError(f'Bot is not ready')
|
||||
return result
|
||||
|
||||
return commands.check(check_if_bot_is_ready)
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.logging'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.pipes'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_core.service'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -1,10 +1,14 @@
|
||||
from typing import Callable
|
||||
|
||||
import discord
|
||||
from cpl_core.configuration import ConfigurationABC
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
from cpl_core.logging import LoggerABC
|
||||
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_query.extension import List
|
||||
from cpl_translation import TranslatePipe
|
||||
from discord import app_commands
|
||||
from discord.ext.commands import Context
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
@@ -54,19 +58,32 @@ class ClientUtilsService(ClientUtilsServiceABC):
|
||||
self._clients.update_client(client)
|
||||
self._db.save_changes()
|
||||
|
||||
def moved_users(self, guild_id: int, count: int):
|
||||
server = self._servers.get_server_by_discord_id(guild_id)
|
||||
client = self._clients.find_client_by_discord_id_and_server_id(self._bot.user.id, server.server_id)
|
||||
client.moved_users_count += count
|
||||
self._clients.update_client(client)
|
||||
self._db.save_changes()
|
||||
|
||||
def get_client(self, dc_ic: int, guild_id: int):
|
||||
server = self._servers.get_server_by_discord_id(guild_id)
|
||||
client = self._clients.find_client_by_discord_id_and_server_id(self._bot.user.id, server.server_id)
|
||||
return client
|
||||
|
||||
async def check_if_bot_is_ready_yet_and_respond(self, ctx: Context) -> bool:
|
||||
async def check_if_bot_is_ready_yet(self) -> bool:
|
||||
if self._config.get_configuration('IS_READY') == 'true':
|
||||
return True
|
||||
|
||||
self._logger.debug(__name__, f'Bot is not ready yet {self._t.transform("common.errors.bot_not_ready_yet")}')
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.errors.bot_not_ready_yet'), without_tracking=True)
|
||||
return False
|
||||
|
||||
async def check_if_bot_is_ready_yet_and_respond(self, ctx: Context) -> bool:
|
||||
result = await self.check_if_bot_is_ready_yet()
|
||||
if not result:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.errors.bot_not_ready_yet'), without_tracking=True)
|
||||
|
||||
return result
|
||||
|
||||
async def presence_game(self, t_key: str):
|
||||
if not self._feature_flags.get_flag(FeatureFlagsEnum.presence):
|
||||
return
|
||||
@@ -75,3 +92,17 @@ class ClientUtilsService(ClientUtilsServiceABC):
|
||||
name = self._t.transform(t_key).format(bot.__version__)
|
||||
await self._bot.change_presence(activity=discord.Game(name=name))
|
||||
self._logger.info(__name__, f'Set presence {name}')
|
||||
|
||||
def get_auto_complete_list(self, _l: List, current: str, select: Callable = None) -> List:
|
||||
if current != '':
|
||||
if select is None:
|
||||
select = lambda x: x
|
||||
|
||||
sl = _l.select(select)
|
||||
sl = sl.where(lambda x: current in x)
|
||||
if current in sl:
|
||||
sl = sl.skip(sl.index_of(current))
|
||||
|
||||
_l = _l.where(lambda x: x.name in sl)
|
||||
|
||||
return _l.take(25)
|
||||
|
@@ -89,7 +89,7 @@ class MessageService(MessageServiceABC):
|
||||
self._db.save_changes()
|
||||
self._logger.info(__name__, f'Sent message to user {receiver.id}')
|
||||
|
||||
async def send_ctx_msg(self, ctx: Context, message: Union[str, discord.Embed], file: discord.File = None, is_persistent: bool = False, wait_before_delete: int = None, without_tracking=False):
|
||||
async def send_ctx_msg(self, ctx: Context, message: Union[str, discord.Embed], file: discord.File = None, is_persistent: bool = False, is_public: bool = False, wait_before_delete: int = None, without_tracking=False):
|
||||
if ctx is None:
|
||||
self._logger.warn(__name__, 'Message context is empty')
|
||||
self._logger.debug(__name__, f'Message: {message}')
|
||||
@@ -99,9 +99,9 @@ class MessageService(MessageServiceABC):
|
||||
msg = None
|
||||
try:
|
||||
if isinstance(message, discord.Embed):
|
||||
msg = await ctx.send(embed=message, file=file)
|
||||
msg = await ctx.send(embed=message, file=file, ephemeral=not is_public)
|
||||
else:
|
||||
msg = await ctx.send(message, file=file)
|
||||
msg = await ctx.send(message, file=file, ephemeral=not is_public)
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Send message to channel {ctx.channel.id} failed', e)
|
||||
else:
|
||||
@@ -119,7 +119,7 @@ class MessageService(MessageServiceABC):
|
||||
if ctx.guild is not None:
|
||||
await self.delete_message(msg, without_tracking)
|
||||
|
||||
async def send_interaction_msg(self, interaction: Interaction, message: Union[str, discord.Embed], is_persistent: bool = False, wait_before_delete: int = None, without_tracking=False):
|
||||
async def send_interaction_msg(self, interaction: Interaction, message: Union[str, discord.Embed], is_persistent: bool = False, is_public: bool = False, wait_before_delete: int = None, without_tracking=False, **kwargs):
|
||||
if interaction is None:
|
||||
self._logger.warn(__name__, 'Message context is empty')
|
||||
self._logger.debug(__name__, f'Message: {message}')
|
||||
@@ -128,9 +128,9 @@ class MessageService(MessageServiceABC):
|
||||
self._logger.debug(__name__, f'Try to send message\t\t{message}\n\tto: {interaction.channel}')
|
||||
try:
|
||||
if isinstance(message, discord.Embed):
|
||||
await interaction.response.send_message(embed=message)
|
||||
await interaction.response.send_message(embed=message, ephemeral=not is_public, **kwargs)
|
||||
else:
|
||||
await interaction.response.send_message(message)
|
||||
await interaction.response.send_message(message, ephemeral=not is_public, **kwargs)
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Send message to channel {interaction.channel.id} failed', e)
|
||||
else:
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_data'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -11,11 +11,11 @@ Discord bot for the Keksdose discord Server
|
||||
|
||||
"""
|
||||
|
||||
__title__ = 'bot_data.service'
|
||||
__title__ = 'bot_data.abc'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -16,7 +16,7 @@ class UserJoinedVoiceChannelRepositoryABC(ABC):
|
||||
def get_user_joined_voice_channel_by_id(self, id: int) -> UserJoinedVoiceChannel: pass
|
||||
|
||||
@abstractmethod
|
||||
def get_user_joined_voice_channels_by_user_id(self, user_id: int) -> list[UserJoinedVoiceChannel]: pass
|
||||
def get_user_joined_voice_channels_by_user_id(self, user_id: int) -> List[UserJoinedVoiceChannel]: pass
|
||||
|
||||
@abstractmethod
|
||||
def get_active_user_joined_voice_channel_by_user_id(self, user_id: int) -> UserJoinedVoiceChannel: pass
|
||||
@@ -35,3 +35,6 @@ class UserJoinedVoiceChannelRepositoryABC(ABC):
|
||||
|
||||
@abstractmethod
|
||||
def delete_user_joined_voice_channel(self, user_joined_voice_channel: UserJoinedVoiceChannel): pass
|
||||
|
||||
@abstractmethod
|
||||
def delete_user_joined_voice_channel_by_user_id(self, user_id: int): pass
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"Version": {
|
||||
"Major": "0",
|
||||
"Minor": "3",
|
||||
"Micro": "dev70"
|
||||
"Micro": "0"
|
||||
},
|
||||
"Author": "Sven Heidemann",
|
||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||
@@ -16,10 +16,10 @@
|
||||
"LicenseName": "MIT",
|
||||
"LicenseDescription": "MIT, see LICENSE for more details.",
|
||||
"Dependencies": [
|
||||
"cpl-core>=0.3.dev70"
|
||||
"cpl-core==2022.12.0"
|
||||
],
|
||||
"DevDependencies": [
|
||||
"cpl-cli==2022.10.0"
|
||||
"cpl-cli==2022.12.0"
|
||||
],
|
||||
"PythonVersion": ">=3.10.4",
|
||||
"PythonPath": {},
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'bot_data.migration'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
29
kdb-bot/src/bot_data/migration/auto_role_fix1_migration.py
Normal file
29
kdb-bot/src/bot_data/migration/auto_role_fix1_migration.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from bot_core.logging.database_logger import DatabaseLogger
|
||||
from bot_data.abc.migration_abc import MigrationABC
|
||||
from bot_data.db_context import DBContext
|
||||
|
||||
|
||||
class AutoRoleFix1Migration(MigrationABC):
|
||||
name = '0.3.0_AutoRoleMigration'
|
||||
|
||||
def __init__(self, logger: DatabaseLogger, db: DBContext):
|
||||
MigrationABC.__init__(self)
|
||||
self._logger = logger
|
||||
self._db = db
|
||||
self._cursor = db.cursor
|
||||
|
||||
def upgrade(self):
|
||||
self._logger.debug(__name__, 'Running upgrade')
|
||||
|
||||
self._cursor.execute(
|
||||
str(f"""
|
||||
ALTER TABLE AutoRoles ADD DiscordChannelId BIGINT NOT NULL AFTER ServerId;
|
||||
""")
|
||||
)
|
||||
|
||||
def downgrade(self):
|
||||
self._cursor.execute(
|
||||
str(f"""
|
||||
ALTER TABLE AutoRoles DROP COLUMN DiscordChannelId;
|
||||
""")
|
||||
)
|
@@ -15,7 +15,7 @@ __title__ = 'bot_data.model'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -6,9 +6,10 @@ from cpl_core.database import TableABC
|
||||
|
||||
class AutoRole(TableABC):
|
||||
|
||||
def __init__(self, server_id: int, dc_message_id: int, created_at: datetime=None, modified_at: datetime=None, id=0):
|
||||
def __init__(self, server_id: int, dc_channel_id: int, dc_message_id: int, created_at: datetime=None, modified_at: datetime=None, id=0):
|
||||
self._auto_role_id = id
|
||||
self._server_id = server_id
|
||||
self._discord_channel_id = dc_channel_id
|
||||
self._discord_message_id = dc_message_id
|
||||
|
||||
TableABC.__init__(self)
|
||||
@@ -23,6 +24,10 @@ class AutoRole(TableABC):
|
||||
def server_id(self) -> int:
|
||||
return self._server_id
|
||||
|
||||
@property
|
||||
def discord_channel_id(self) -> int:
|
||||
return self._discord_channel_id
|
||||
|
||||
@property
|
||||
def discord_message_id(self) -> int:
|
||||
return self._discord_message_id
|
||||
@@ -58,9 +63,10 @@ class AutoRole(TableABC):
|
||||
def insert_string(self) -> str:
|
||||
return str(f"""
|
||||
INSERT INTO `AutoRoles` (
|
||||
`ServerId`, `DiscordMessageId`, `CreatedAt`, `LastModifiedAt`
|
||||
`ServerId`, `DiscordChannelId`, `DiscordMessageId`, `CreatedAt`, `LastModifiedAt`
|
||||
) VALUES (
|
||||
{self._server_id},
|
||||
{self._discord_channel_id},
|
||||
{self._discord_message_id},
|
||||
'{self._created_at}',
|
||||
'{self._modified_at}'
|
||||
@@ -72,6 +78,7 @@ class AutoRole(TableABC):
|
||||
return str(f"""
|
||||
UPDATE `AutoRoles`
|
||||
SET `ServerId` = {self._server_id},
|
||||
`DiscordChannelId` = {self._discord_channel_id},
|
||||
`DiscordMessageId` = {self._discord_message_id},
|
||||
`LastModifiedAt` = '{self._modified_at}'
|
||||
WHERE `AutoRoleId` = {self._auto_role_id};
|
||||
|
@@ -119,3 +119,10 @@ class UserJoinedVoiceChannel(TableABC):
|
||||
DELETE FROM `UserJoinedVoiceChannel`
|
||||
WHERE `JoinId` = {self._join_id};
|
||||
""")
|
||||
|
||||
@staticmethod
|
||||
def delete_by_user_id_string(id: int) -> str:
|
||||
return str(f"""
|
||||
DELETE FROM `UserJoinedVoiceChannel`
|
||||
WHERE `UserId` = {id}
|
||||
""")
|
@@ -15,7 +15,7 @@ __title__ = 'bot_data.service'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -27,6 +27,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
))
|
||||
|
||||
@@ -40,6 +41,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
)
|
||||
|
||||
@@ -56,6 +58,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
)
|
||||
|
||||
@@ -69,6 +72,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
))
|
||||
|
||||
@@ -82,6 +86,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
)
|
||||
|
||||
@@ -98,6 +103,7 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
id=result[0]
|
||||
)
|
||||
|
||||
|
@@ -121,3 +121,7 @@ class UserJoinedVoiceChannelRepositoryService(UserJoinedVoiceChannelRepositoryAB
|
||||
def delete_user_joined_voice_channel(self, user_joined_voice_channel: UserJoinedVoiceChannel):
|
||||
self._logger.trace(__name__, f'Send SQL command: {user_joined_voice_channel.delete_string}')
|
||||
self._context.cursor.execute(user_joined_voice_channel.delete_string)
|
||||
|
||||
def delete_user_joined_voice_channel_by_user_id(self, user_id: int):
|
||||
self._logger.trace(__name__, f'Send SQL command: {UserJoinedVoiceChannel.delete_by_user_id_string}')
|
||||
self._context.cursor.execute(UserJoinedVoiceChannel.delete_by_user_id_string(user_id))
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -2,8 +2,8 @@
|
||||
"ProjectSettings": {
|
||||
"Name": "auto-role",
|
||||
"Version": {
|
||||
"Major": "1",
|
||||
"Minor": "0",
|
||||
"Major": "0",
|
||||
"Minor": "3",
|
||||
"Micro": "0"
|
||||
},
|
||||
"Author": "",
|
||||
@@ -16,10 +16,10 @@
|
||||
"LicenseName": "",
|
||||
"LicenseDescription": "",
|
||||
"Dependencies": [
|
||||
"cpl-core>=2022.10.0.post5"
|
||||
"cpl-core==2022.12.0"
|
||||
],
|
||||
"DevDependencies": [
|
||||
"cpl-cli==2022.10.0"
|
||||
"cpl-cli==2022.12.0"
|
||||
],
|
||||
"PythonVersion": ">=3.10.4",
|
||||
"PythonPath": {},
|
||||
|
@@ -9,7 +9,7 @@ from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||
from modules.auto_role.command.auto_role_group import AutoRoleGroup
|
||||
from modules.auto_role.events.auto_role_on_raw_reaction_add import AutoRoleOnRawReactionAddEvent
|
||||
from modules.auto_role.events.auto_role_on_raw_reaction_remove import AutoRoleOnRawReactionRemoveEvent
|
||||
from modules.auto_role.helper.reaction_handler import ReactionHandler
|
||||
from modules.auto_role.helper.auto_role_reaction_handler import AutoRoleReactionHandler
|
||||
|
||||
|
||||
class AutoRoleModule(ModuleABC):
|
||||
@@ -21,7 +21,7 @@ class AutoRoleModule(ModuleABC):
|
||||
pass
|
||||
|
||||
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
|
||||
services.add_transient(ReactionHandler)
|
||||
services.add_transient(AutoRoleReactionHandler)
|
||||
# commands
|
||||
self._dc.add_command(AutoRoleGroup)
|
||||
# events
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.command'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -1,4 +1,4 @@
|
||||
from typing import List as TList, Optional
|
||||
from typing import List as TList, Optional, Any
|
||||
|
||||
import discord
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
@@ -7,12 +7,13 @@ from cpl_discord.container import TextChannel
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_query.extension import List
|
||||
from cpl_translation import TranslatePipe
|
||||
from discord import app_commands
|
||||
from discord import app_commands, Guild
|
||||
from discord.ext import commands
|
||||
from discord.ext.commands import Context
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||
from bot_core.helper.command_checks import CommandChecks
|
||||
from bot_core.logging.command_logger import CommandLogger
|
||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
@@ -49,6 +50,11 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}')
|
||||
|
||||
async def _auto_role_auto_complete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
auto_roles = self._auto_roles.get_auto_roles_by_server_id(server.server_id).select(lambda x: x.auto_role_id)
|
||||
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in self._client_utils.get_auto_complete_list(auto_roles, current)]
|
||||
|
||||
@commands.hybrid_group(name="auto-role")
|
||||
@commands.guild_only()
|
||||
async def auto_role(self, ctx: Context):
|
||||
@@ -56,15 +62,10 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@auto_role.command(alias='auto-roles')
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def list(self, ctx: Context, wait: int = None):
|
||||
self._logger.debug(__name__, f'Received command auto-role list {ctx}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role list')
|
||||
return
|
||||
|
||||
if ctx.guild is None:
|
||||
return
|
||||
@@ -94,20 +95,15 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@auto_role.command()
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def add(self, ctx: Context, channel: discord.TextChannel, message_id: str):
|
||||
self._logger.debug(__name__, f'Received command auto-role add {ctx} {message_id}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role add')
|
||||
return
|
||||
|
||||
message = List(discord.Message, [message async for message in channel.history(limit=50)]).where(lambda m: m.id == int(message_id)).single_or_default()
|
||||
if message is None:
|
||||
self._logger.debug(__name__, f'Message with id {message_id} not found in {channel.name}')
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.add.error.not_found').format(message_id, channel.name))
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.add.error.not_found').format(message_id, channel.mention))
|
||||
self._logger.trace(__name__, f'Finished command auto-role add')
|
||||
return
|
||||
|
||||
@@ -118,7 +114,7 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
return
|
||||
|
||||
server_id = self._servers.get_server_by_discord_id(ctx.guild.id).server_id
|
||||
self._auto_roles.add_auto_role(AutoRole(server_id, int(message_id)))
|
||||
self._auto_roles.add_auto_role(AutoRole(server_id, int(channel.id), int(message_id)))
|
||||
self._db_context.save_changes()
|
||||
self._logger.info(__name__, f'Saved auto-role for message {message_id} at server {server_id}')
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.add.success').format(message_id))
|
||||
@@ -140,15 +136,10 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@auto_role.command()
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def remove(self, ctx: Context, auto_role: int):
|
||||
self._logger.debug(__name__, f'Received command auto-role remove {ctx} {auto_role}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role remove')
|
||||
return
|
||||
|
||||
auto_role_from_db = self._auto_roles.find_auto_role_by_id(auto_role)
|
||||
if auto_role_from_db is None:
|
||||
@@ -169,9 +160,7 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@remove.autocomplete('auto_role')
|
||||
async def remove_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
auto_roles = self._auto_roles.get_auto_roles_by_server_id(server.server_id).select(lambda x: x.auto_role_id)
|
||||
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles]
|
||||
return await self._auto_role_auto_complete(interaction, current)
|
||||
|
||||
@auto_role.group()
|
||||
@commands.guild_only()
|
||||
@@ -180,15 +169,10 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@rule.command(alias='rules')
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def list(self, ctx: Context, auto_role: int, wait: int = None):
|
||||
self._logger.debug(__name__, f'Received command auto-role rule list {ctx}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role rule list')
|
||||
return
|
||||
|
||||
embed = discord.Embed(
|
||||
title=self._t.transform('modules.auto_role.list.title'),
|
||||
@@ -217,21 +201,14 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
|
||||
@list.autocomplete('auto_role')
|
||||
async def list_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
auto_roles = self._auto_roles.get_auto_roles_by_server_id(server.server_id).select(lambda x: x.auto_role_id)
|
||||
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles]
|
||||
return await self._auto_role_auto_complete(interaction, current)
|
||||
|
||||
@rule.command()
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def add(self, ctx: Context, auto_role: int, emoji_name: str, role_id: str):
|
||||
self._logger.debug(__name__, f'Received command auto-role add {ctx} {auto_role}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role rule add')
|
||||
return
|
||||
|
||||
emoji = discord.utils.get(self._bot.emojis, name=emoji_name)
|
||||
if emoji is None:
|
||||
@@ -253,43 +230,51 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
self._logger.trace(__name__, f'Finished command auto-role rule add')
|
||||
return
|
||||
|
||||
if self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role).where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id).count() > 0:
|
||||
if self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role).where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id).first_or_default() is not None:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.add.error.already_exists').format(auto_role))
|
||||
self._logger.trace(__name__, f'Finished command auto-role rule add')
|
||||
return
|
||||
|
||||
self._auto_roles.add_auto_role_rule(AutoRoleRule(auto_role, emoji_name, int(role_id)))
|
||||
self._db_context.save_changes()
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.add.success').format(emoji, role.name, auto_role))
|
||||
rule = self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role).where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id).single()
|
||||
try:
|
||||
guild: Guild = self._bot.guilds.where(lambda g: g == ctx.guild).single()
|
||||
channel = guild.get_channel(auto_role_from_db.discord_channel_id)
|
||||
message = await channel.fetch_message(auto_role_from_db.discord_message_id)
|
||||
emoji = List(discord.Emoji, guild.emojis).where(lambda x: x.name == rule.emoji_name).single()
|
||||
|
||||
if emoji is None:
|
||||
self._logger.debug(__name__, f'Emoji {rule.emoji_name} not found')
|
||||
return
|
||||
await message.add_reaction(emoji)
|
||||
self._logger.debug(__name__, f'Added reaction {rule.emoji_name} to message: {auto_role_from_db.discord_message_id}')
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Cannot add reaction {rule.emoji_name} to message: {auto_role_from_db.discord_message_id}', e)
|
||||
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.add.success').format(emoji, role.mention, auto_role))
|
||||
self._logger.trace(__name__, f'Finished command auto-role rule add')
|
||||
|
||||
@add.autocomplete('auto_role')
|
||||
async def add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
auto_roles = self._auto_roles.get_auto_roles_by_server_id(server.server_id).select(lambda x: x.auto_role_id)
|
||||
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles]
|
||||
return await self._auto_role_auto_complete(interaction, current)
|
||||
|
||||
@add.autocomplete('emoji_name')
|
||||
async def add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
emojis = interaction.guild.emojis
|
||||
return [app_commands.Choice(name=emoji.name, value=emoji.name) for emoji in emojis]
|
||||
emojis = List(discord.Emoji, interaction.guild.emojis)
|
||||
return [app_commands.Choice(name=emoji.name, value=emoji.name) for emoji in self._client_utils.get_auto_complete_list(emojis, current, lambda e: e.name)]
|
||||
|
||||
@add.autocomplete('role_id')
|
||||
async def rule_add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
roles = interaction.guild.roles
|
||||
return [app_commands.Choice(name=role.name, value=str(role.id)) for role in roles]
|
||||
roles = List(discord.Role, interaction.guild.roles)
|
||||
return [app_commands.Choice(name=role.name, value=str(role.id)) for role in self._client_utils.get_auto_complete_list(roles, current, lambda r: r.name)]
|
||||
|
||||
@rule.command()
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_moderator()
|
||||
async def remove(self, ctx: Context, auto_role_rule: int):
|
||||
self._logger.debug(__name__, f'Received command auto-role remove {ctx} {auto_role_rule}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
|
||||
if not self._permissions.is_member_moderator(ctx.author):
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||
self._logger.trace(__name__, f'Finished command auto-role remove')
|
||||
return
|
||||
|
||||
auto_role_from_db = self._auto_roles.get_auto_role_rule_by_id(auto_role_rule)
|
||||
if auto_role_from_db is None:
|
||||
@@ -309,4 +294,10 @@ class AutoRoleGroup(DiscordCommandABC):
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
auto_roles = self._auto_roles.get_auto_roles_by_server_id(server.server_id).select(lambda x: x.auto_role_id)
|
||||
rules = auto_roles.select_many(lambda ar: self._auto_roles.get_auto_role_rules_by_auto_role_id(ar))
|
||||
return [app_commands.Choice(name=f'{rule.auto_role_rule_id} {rule.emoji_name} {interaction.guild.get_role(int(rule.role_id))}', value=rule.auto_role_rule_id) for rule in rules]
|
||||
return [
|
||||
app_commands.Choice(
|
||||
name=f'{rule.auto_role_rule_id} {rule.emoji_name} {interaction.guild.get_role(int(rule.role_id))}',
|
||||
value=rule.auto_role_rule_id
|
||||
)
|
||||
for rule in self._client_utils.get_auto_complete_list(rules, current, lambda r: r.auto_role_rule_id)
|
||||
]
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.events'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -3,9 +3,10 @@ from cpl_discord.events.on_raw_reaction_add_abc import OnRawReactionAddABC
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from discord import RawReactionActionEvent
|
||||
|
||||
from bot_core.helper.event_checks import EventChecks
|
||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from modules.auto_role.helper.reaction_handler import ReactionHandler
|
||||
from modules.auto_role.helper.auto_role_reaction_handler import AutoRoleReactionHandler
|
||||
|
||||
|
||||
class AutoRoleOnRawReactionAddEvent(OnRawReactionAddABC):
|
||||
@@ -16,7 +17,7 @@ class AutoRoleOnRawReactionAddEvent(OnRawReactionAddABC):
|
||||
bot: DiscordBotServiceABC,
|
||||
servers: ServerRepositoryABC,
|
||||
auto_roles: AutoRoleRepositoryABC,
|
||||
reaction_handler: ReactionHandler
|
||||
reaction_handler: AutoRoleReactionHandler
|
||||
):
|
||||
OnRawReactionAddABC.__init__(self)
|
||||
|
||||
@@ -26,6 +27,7 @@ class AutoRoleOnRawReactionAddEvent(OnRawReactionAddABC):
|
||||
self._auto_roles = auto_roles
|
||||
self._reaction_handler = reaction_handler
|
||||
|
||||
@EventChecks.check_is_ready()
|
||||
async def on_raw_reaction_add(self, payload: RawReactionActionEvent):
|
||||
self._logger.debug(__name__, f'Module {type(self)} started')
|
||||
|
||||
|
@@ -3,9 +3,10 @@ from cpl_discord.events.on_raw_reaction_remove_abc import OnRawReactionRemoveABC
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from discord import RawReactionActionEvent
|
||||
|
||||
from bot_core.helper.event_checks import EventChecks
|
||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from modules.auto_role.helper.reaction_handler import ReactionHandler
|
||||
from modules.auto_role.helper.auto_role_reaction_handler import AutoRoleReactionHandler
|
||||
|
||||
|
||||
class AutoRoleOnRawReactionRemoveEvent(OnRawReactionRemoveABC):
|
||||
@@ -16,7 +17,7 @@ class AutoRoleOnRawReactionRemoveEvent(OnRawReactionRemoveABC):
|
||||
bot: DiscordBotServiceABC,
|
||||
servers: ServerRepositoryABC,
|
||||
auto_roles: AutoRoleRepositoryABC,
|
||||
reaction_handler: ReactionHandler
|
||||
reaction_handler: AutoRoleReactionHandler
|
||||
):
|
||||
OnRawReactionRemoveABC.__init__(self)
|
||||
|
||||
@@ -26,6 +27,7 @@ class AutoRoleOnRawReactionRemoveEvent(OnRawReactionRemoveABC):
|
||||
self._auto_roles = auto_roles
|
||||
self._reaction_handler = reaction_handler
|
||||
|
||||
@EventChecks.check_is_ready()
|
||||
async def on_raw_reaction_remove(self, payload: RawReactionActionEvent):
|
||||
self._logger.debug(__name__, f'Module {type(self)} started')
|
||||
|
||||
|
@@ -15,7 +15,7 @@ __title__ = 'modules.auto_role.helper'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports:
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
@@ -10,7 +10,7 @@ from bot_data.model.auto_role import AutoRole
|
||||
from bot_data.model.auto_role_rule import AutoRoleRule
|
||||
|
||||
|
||||
class ReactionHandler:
|
||||
class AutoRoleReactionHandler:
|
||||
|
||||
def __init__(
|
||||
self,
|
@@ -15,7 +15,7 @@ __title__ = 'modules.base'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
|
||||
__version__ = '0.3.dev25'
|
||||
__version__ = '0.3.0'
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -23,4 +23,4 @@ from collections import namedtuple
|
||||
# imports
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='dev25')
|
||||
version_info = VersionInfo(major='0', minor='3', micro='0')
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user