| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -10,6 +10,7 @@ from bot_data.abc.user_repository_abc import UserRepositoryABC
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from bot_data.abc.user_warning_repository_abc import UserWarningsRepositoryABC
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from bot_data.model.user_warnings import UserWarnings
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from modules.level.service.level_service import LevelService
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from modules.permission.abc.permission_service_abc import PermissionServiceABC
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class UserWarningsService:
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -25,6 +26,7 @@ class UserWarningsService:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        level_service: LevelService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        message_service: MessageServiceABC,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        t: TranslatePipe,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        permissions: PermissionServiceABC,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    ):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._logger = logger
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._db = db
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -36,6 +38,7 @@ class UserWarningsService:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._level_service = level_service
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._message_service = message_service
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._t = t
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._permissions = permissions
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    async def add_warnings(self, guild_id: int, member_id: int, description: str, author_id: int = None):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        server = self._servers.get_server_by_discord_id(guild_id)
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -57,41 +60,49 @@ class UserWarningsService:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self._t.transform("modules.base.warnings.message").format(warning.description), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        match existing_warnings.count():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            case 1:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                await self._message_service.send_dm_message(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    self._t.transform("modules.base.warnings.messages.first"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            case 2:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                server = self._servers.get_server_by_discord_id(guild_id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                user = self._users.get_user_by_discord_id_and_server_id(member_id, server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                level = self._level_service.get_level(user)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                levels = self._levels.get_levels_by_server_id(server.id).order_by(lambda l: l.min_xp)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if existing_warnings.count() == 1:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            await self._message_service.send_dm_message(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self._t.transform("modules.base.warnings.messages.first"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        elif existing_warnings.count() == 2:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            server = self._servers.get_server_by_discord_id(guild_id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            user = self._users.get_user_by_discord_id_and_server_id(member_id, server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            level = self._level_service.get_level(user)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            levels = self._levels.get_levels_by_server_id(server.id).order_by(lambda l: l.min_xp)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                new_level = levels.where(lambda l: l.min_xp < level.min_xp).last()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                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.messages.second"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            case 3:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                server = self._servers.get_server_by_discord_id(guild_id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                user = self._users.get_user_by_discord_id_and_server_id(member_id, server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                levels = self._levels.get_levels_by_server_id(server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            new_level = levels.where(lambda l: l.min_xp < level.min_xp).last()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            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.messages.second"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        elif existing_warnings.count() == 3:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            server = self._servers.get_server_by_discord_id(guild_id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            user = self._users.get_user_by_discord_id_and_server_id(member_id, server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            levels = self._levels.get_levels_by_server_id(server.id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                new_level = levels.where(lambda l: l.min_xp > 0).order_by(lambda l: l.min_xp).last()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                user.xp = new_level.min_xp
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self._users.update_user(user)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self._db.save_changes()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            new_level = levels.where(lambda l: l.min_xp > 0).order_by(lambda l: l.min_xp).last()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            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.messages.third"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        elif existing_warnings.count() >= 4:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            user.xp = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self._users.update_user(user)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self._db.save_changes()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            await member.kick()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            mods = [
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                *self._permissions.get_admins(member.guild.id),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                *self._permissions.get_moderators(member.guild.id),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            ]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            for a in mods:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                await self._message_service.send_dm_message(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    self._t.transform("modules.base.warnings.messages.third"), member
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    self._t.transform("modules.base.warnings.messages.kick").format(member.mention),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    a,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            case 4:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                user.xp = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self._users.update_user(user)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self._db.save_changes()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                await member.kick()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def remove_warnings(self, id: int):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        warning = self._warnings.get_user_warnings_by_id(id)
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				 
 |