Verwarnungssystem #35 #235

Merged
edraft merged 7 commits from #35 into 1.0.0 2023-02-24 08:49:09 +01:00
3 changed files with 11 additions and 11 deletions
Showing only changes of commit 2d995544c3 - Show all commits

View File

@ -4,7 +4,6 @@ from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
from bot_core.logging.database_logger import DatabaseLogger
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.user_repository_abc import UserRepositoryABC
from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
from bot_data.model.user_warnings import UserWarnings
@ -16,7 +15,6 @@ class UserWarningsRepositoryService(UserWarningsRepositoryABC):
logger: DatabaseLogger,
db_context: DatabaseContextABC,
users: UserRepositoryABC,
servers: ServerRepositoryABC,
):
self._logger = logger
edraft marked this conversation as resolved Outdated

Du übergibst servers: ServerRepositoryABC aber dies wird in der Definition von des Constructors nirgendswo zugewiesen.
Ich sehe auch nicht dass self._servers in der Klasse irgendwo verwendet wird. Somit könnte der Parameter weg.

Du übergibst ```servers: ServerRepositoryABC``` aber dies wird in der Definition von des Constructors nirgendswo zugewiesen. Ich sehe auch nicht dass ```self._servers``` in der Klasse irgendwo verwendet wird. Somit könnte der Parameter weg.
self._context = db_context

View File

@ -371,12 +371,13 @@ class UserGroup(DiscordCommandABC):
title=member.name, description=self._t.transform("modules.base.user.atr.warnings"), color=int("ef9d0d", 16)
)
warnings = self._user_warnings.get_user_warnings_by_user_id(user.id)
edraft marked this conversation as resolved Outdated

Evtl. die Zugriffe auf die Datenbank hier verringern, in dem das Ergebnis in einer Variable zwischengespeichert wird.

Von:

warnings_id_string = ""
for warning in self._user_warnings.get_user_warnings_by_user_id(user.id):
    warnings_id_string += f"{warning.id}\n"

warnings_description_string = ""
for warning in self._user_warnings.get_user_warnings_by_user_id(user.id):
    warnings_description_string += f"{warning.description}\n"

Zu:

warnings = self._user_warnings.get_user_warnings_by_user_id(user.id)

warnings_id_string = ""
for warning in warnings:
    warnings_id_string += f"{warning.id}\n"

warnings_description_string = ""
for warning in warnings:
    warnings_description_string += f"{warning.description}\n"

Auch wenn unwahrscheinlich, aber ich meine dass dadurch auch eine zwischenzeitliche Änderung in der Datenbank keine Auswirkung auf die Formatierung des Embeds hat.

Evtl. die Zugriffe auf die Datenbank hier verringern, in dem das Ergebnis in einer Variable zwischengespeichert wird. Von: ```python warnings_id_string = "" for warning in self._user_warnings.get_user_warnings_by_user_id(user.id): warnings_id_string += f"{warning.id}\n" warnings_description_string = "" for warning in self._user_warnings.get_user_warnings_by_user_id(user.id): warnings_description_string += f"{warning.description}\n" ``` Zu: ```python warnings = self._user_warnings.get_user_warnings_by_user_id(user.id) warnings_id_string = "" for warning in warnings: warnings_id_string += f"{warning.id}\n" warnings_description_string = "" for warning in warnings: warnings_description_string += f"{warning.description}\n" ``` Auch wenn unwahrscheinlich, aber ich meine dass dadurch auch eine zwischenzeitliche Änderung in der Datenbank keine Auswirkung auf die Formatierung des Embeds hat.
warnings_id_string = ""
for warning in self._user_warnings.get_user_warnings_by_user_id(user.id):
for warning in warnings:
warnings_id_string += f"{warning.id}\n"
warnings_description_string = ""
for warning in self._user_warnings.get_user_warnings_by_user_id(user.id):
for warning in warnings:
warnings_description_string += f"{warning.description}\n"
embed.add_field(
@ -399,8 +400,8 @@ class UserGroup(DiscordCommandABC):
async def add(self, ctx: Context, member: discord.Member, description: str):
self._logger.debug(__name__, f"Received command user warning add {ctx}:{member},{description}")
try:
edraft marked this conversation as resolved
Review

Hier wird zuerst eine Message gesendet bevor versucht wird eine Warnung hinzuzufügen.
Bitte die beiden Zeilen tauschen:

await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.success"))
await self._user_warnings_service.add_warnings(member, description, ctx.author.id)
Hier wird zuerst eine Message gesendet bevor versucht wird eine Warnung hinzuzufügen. Bitte die beiden Zeilen tauschen: ```python await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.success")) await self._user_warnings_service.add_warnings(member, description, ctx.author.id) ```
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.success"))
await self._user_warnings_service.add_warnings(member, description, ctx.author.id)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.success"))
except Exception as e:
self._logger.error(__name__, f"Adding user warning failed", e)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.failed"))
@ -413,8 +414,8 @@ class UserGroup(DiscordCommandABC):
async def remove(self, ctx: Context, warning_id: int):
self._logger.debug(__name__, f"Received command user warning remove {ctx}:{warning_id}")
try:
edraft marked this conversation as resolved
Review

Auch hier wird zuerst eine Nachricht versendet, bevor die eine Aktion stattfindet. Auch hier die beiden Zeilen tauschen.

Auch hier wird zuerst eine Nachricht versendet, bevor die eine Aktion stattfindet. Auch hier die beiden Zeilen tauschen.
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.remove.success"))
await self._user_warnings_service.remove_warnings(warning_id)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.remove.success"))
except Exception as e:
self._logger.error(__name__, f"Removing user warning failed", e)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.remove.failed"))

View File

@ -57,13 +57,14 @@ class UserWarningsService:
else:
translation = self._t.transform("modules.base.warnings.team_warned").format(member.mention, description)
await self._message_service.send_channel_message(channel, translation)
self._bot.loop.create_task(self._message_service.send_channel_message(channel, translation))
except Exception as e:
self._logger.error(__name__, f"Team notification for user warning failed!", e)
async def notify_user(self, member: discord.Member, message: str):
try:
await self._message_service.send_dm_message(message, member)
# run as task to keep the interaction alive
self._bot.loop.create_task(self._message_service.send_dm_message(message, member))
except Exception as e:
self._logger.error(__name__, f"User notification for user warning failed!", e)
@ -71,7 +72,7 @@ class UserWarningsService:
existing_warnings = self._warnings.get_user_warnings_by_user_id(user.id)
if existing_warnings.count() == 1:
await self._message_service.send_dm_message(self._t.transform("modules.base.warnings.first"), member)
await self.notify_user(member, self._t.transform("modules.base.warnings.first"))
elif existing_warnings.count() == 2:
server = self._servers.get_server_by_discord_id(member.guild.id)
@ -84,7 +85,7 @@ class UserWarningsService:
user.xp = new_level.min_xp
self._users.update_user(user)
self._db.save_changes()
await self._message_service.send_dm_message(self._t.transform("modules.base.warnings.second"), member)
await self.notify_user(member, self._t.transform("modules.base.warnings.second"))
elif existing_warnings.count() == 3:
server = self._servers.get_server_by_discord_id(member.guild.id)
@ -96,7 +97,7 @@ class UserWarningsService:
user.xp = new_level.min_xp
self._users.update_user(user)
self._db.save_changes()
await self._message_service.send_dm_message(self._t.transform("modules.base.warnings.third"), member)
await self.notify_user(member, self._t.transform("modules.base.warnings.third"))
elif existing_warnings.count() >= 4:
user.xp = 0