forked from sh-edraft.de/sh_discord_bot
		
	Added level service #25
This commit is contained in:
		| @@ -8,6 +8,7 @@ from cpl_discord.service.discord_collection_abc import DiscordCollectionABC | ||||
| from bot_core.abc.module_abc import ModuleABC | ||||
| from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum | ||||
| from modules.level.level_seeder import LevelSeeder | ||||
| from modules.level.service.level_service import LevelService | ||||
|  | ||||
|  | ||||
| class LevelModule(ModuleABC): | ||||
| @@ -23,3 +24,4 @@ class LevelModule(ModuleABC): | ||||
|  | ||||
|     def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): | ||||
|         services.add_transient(LevelSeeder) | ||||
|         services.add_transient(LevelService) | ||||
|   | ||||
							
								
								
									
										1
									
								
								kdb-bot/src/modules/level/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kdb-bot/src/modules/level/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # imports | ||||
							
								
								
									
										53
									
								
								kdb-bot/src/modules/level/service/level_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								kdb-bot/src/modules/level/service/level_service.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| from cpl_core.database.context import DatabaseContextABC | ||||
| from cpl_core.logging import LoggerABC | ||||
| from cpl_discord.container import Guild, Role, Member | ||||
| from cpl_discord.service import DiscordBotServiceABC | ||||
|  | ||||
| from bot_data.model.level import Level | ||||
| from bot_data.model.user import User | ||||
| from bot_data.service.level_repository_service import LevelRepositoryService | ||||
| from bot_data.service.user_repository_service import UserRepositoryService | ||||
|  | ||||
|  | ||||
| class LevelService: | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             logger: LoggerABC, | ||||
|             db: DatabaseContextABC, | ||||
|             levels: LevelRepositoryService, | ||||
|             users: UserRepositoryService, | ||||
|             bot: DiscordBotServiceABC | ||||
|     ): | ||||
|         self._logger = logger | ||||
|         self._db = db | ||||
|         self._levels = levels | ||||
|         self._users = users | ||||
|         self._bot = bot | ||||
|  | ||||
|     def get_level(self, user: User) -> Level: | ||||
|         levels = self._levels.get_levels_by_server_id(user.server.server_id).order_by(lambda l: l.min_xp) | ||||
|         return levels.where(lambda l: l.min_xp > user.xp).first() | ||||
|  | ||||
|     async def set_level(self, user: User): | ||||
|         level_names = self._levels.get_levels_by_server_id(user.server.server_id).select(lambda l: l.name) | ||||
|         guild: Guild = self._bot.guilds.where(lambda g: g.id == user.server.discord_server_id).single() | ||||
|         level_role: Role = guild.roles.where(lambda r: r.name == self.get_level(user).name).single() | ||||
|         member: Member = guild.members.where(lambda m: m.id == user.discord_id).single() | ||||
|         for role in member.roles: | ||||
|             if role.name not in level_names.to_list(): | ||||
|                 continue | ||||
|  | ||||
|             try: | ||||
|                 self._logger.debug(__name__, f'Try to remove role {role.name} from {member.name}') | ||||
|                 await member.remove_roles(role) | ||||
|                 self._logger.info(__name__, f'Removed role {role.name} from {member.name}') | ||||
|             except Exception as e: | ||||
|                 self._logger.error(__name__, f'Removing role {role.name} from {member.name} failed!', e) | ||||
|  | ||||
|         try: | ||||
|             self._logger.debug(__name__, f'Try to add role {level_role.name} to {member.name}') | ||||
|             await member.add_roles(level_role) | ||||
|             self._logger.info(__name__, f'Add role {level_role.name} to {member.name}') | ||||
|         except Exception as e: | ||||
|             self._logger.error(__name__, f'Adding role {level_role.name} to {member.name} failed!', e) | ||||
		Reference in New Issue
	
	Block a user