From 8118d4edc3f68c86f84ca05d96a6d51df5073e5b Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 6 Nov 2022 19:36:15 +0100 Subject: [PATCH] Improved logic to create roles for levels by default #25 --- kdb-bot/src/modules/level/level_seeder.py | 46 ++++++++++------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/kdb-bot/src/modules/level/level_seeder.py b/kdb-bot/src/modules/level/level_seeder.py index 8193f474..e7329126 100644 --- a/kdb-bot/src/modules/level/level_seeder.py +++ b/kdb-bot/src/modules/level/level_seeder.py @@ -25,7 +25,7 @@ class LevelSeeder(DataSeederABC): async def _create_level(self, level: Level, guild: Guild, server: Server): try: - if guild.roles.where(lambda r: r.name == level.name).count() != 0: + if guild.roles.where(lambda r: r.name == level.name).count() > 0: return await guild.create_role(name=level.name, colour=Colour(int(level.color, 16)), hoist=False, mentionable=True, permissions=Permissions(level.permissions)) @@ -36,50 +36,42 @@ class LevelSeeder(DataSeederABC): self._logger.error(__name__, f'Creating level failed', e) async def seed(self): - created_default = False + # create levels for guild in self._bot.guilds: + created_default = False + if guild.roles.where(lambda r: r.name == '___ Level ___').count() == 0: + await guild.create_role(name='___ Level ___') + server = self._servers.find_server_by_discord_id(guild.id) if server is None: continue levels = self._levels.find_levels_by_server_id(server.server_id) if levels is not None and levels.count() > 0: + # create levels from db for level in levels: await self._create_level(level, guild, server) + self._logger.debug(__name__, f'Seeded levels') + else: + # create default levels + for level in self._default_levels: + created_default = True + await self._create_level(level, guild, server) + + self._logger.debug(__name__, f'Seeded default levels') + + if created_default: continue - for level in self._default_levels: - created_default = True - await self._create_level(level, guild, server) - - self._logger.debug(__name__, f'Seeded default levels') - - if created_default: - return - - for guild in self._bot.guilds: - server = self._servers.find_server_by_discord_id(guild.id) - if server is None: - continue - - levels = self._levels.find_levels_by_server_id(server.server_id) - roles: List[Role] = List(Role) + position_above_levels = guild.roles.where(lambda r: r.name == '~~~ Level ~~~').single().position for role in guild.roles.order_by_descending(lambda r: r.position): if levels.where(lambda l: l.name == role.name).count() == 0: continue - roles.append(role) - - levels = levels.order_by(lambda l: l.min_xp) - position_below_levels = roles.where(lambda r: r.name == levels.order_by(lambda l: l.min_xp).first().name).single().position - 1 - for role in roles: - new_position = position_below_levels + (levels.index(levels.where(lambda l: l.name == role.name).single()) - 1) + new_position = position_above_levels - (levels.index(levels.where(lambda l: l.name == role.name).single()) + 1) if new_position <= 0: - above_role: Role = roles.where(lambda r: r.position == 1).single() - await above_role.edit(position=above_role.position + 1) new_position = 1 - try: self._logger.debug(__name__, f'Moved {role.name} from {role.position} to {new_position}') await role.edit(position=new_position)