Verwarnungssystem #35 #235
@@ -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
						
					
				 
				 | 
			||||
        self._context = db_context
 | 
			
		||||
 
 | 
			
		||||
@@ -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
						
					
				 
				
				
					
						Ebola-Chan
						commented  
			
		Evtl. die Zugriffe auf die Datenbank hier verringern, in dem das Ergebnis in einer Variable zwischengespeichert wird. Von: Zu: 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
					
				 
				
				
					
						Ebola-Chan
						commented  
			
		Hier wird zuerst eine Message gesendet bevor versucht wird eine Warnung hinzuzufügen. 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
					
				 
				
				
					
						Ebola-Chan
						commented  
			
		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"))
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user
	
Du übergibst
servers: ServerRepositoryABCaber dies wird in der Definition von des Constructors nirgendswo zugewiesen.Ich sehe auch nicht dass
self._serversin der Klasse irgendwo verwendet wird. Somit könnte der Parameter weg.