diff --git a/src/modules/ranks/ui/overview.py b/src/modules/ranks/ui/overview.py index 3562bfba..27cb77d1 100644 --- a/src/modules/ranks/ui/overview.py +++ b/src/modules/ranks/ui/overview.py @@ -12,6 +12,7 @@ from data import ORDER from utils.ui import MessageUI, Confirm from utils.lib import MessageArgs +from wards import equippable_role from babel.translator import ctx_translator from .. import babel, logger @@ -185,25 +186,11 @@ class RankOverviewUI(MessageUI): or edit an existing rank, or throw an error if the role is @everyone or not manageable by the client. """ + role: discord.Role = selected.values[0] - if role >= selection.user.top_role: - # Do not allow user to manage a role above their own top role - t = self.bot.translator.t - error = t(_p( - 'ui:rank_overview|menu:roles|error:above_caller', - "You have insufficient permissions to assign {mention} as a rank role! " - "You may only manage roles below your top role." - )).format(mention=role.mention) - embed = discord.Embed( - title=t(_p( - 'ui:rank_overview|menu:roles|error:above_caller|title', - "Insufficient permissions!" - )), - description=error, - colour=discord.Colour.brand_red() - ) - await selection.response.send_message(embed=embed, ephemeral=True) - elif role.is_assignable(): + + if role.is_assignable(): + # Create or edit the selected role existing = next((rank for rank in self.ranks if rank.roleid == role.id), None) if existing: # Display and edit the given role @@ -216,6 +203,8 @@ class RankOverviewUI(MessageUI): ) else: # Create new rank based on role + # Need to check the calling author has authority to manage this role + await equippable_role(self.bot, role, selection.user) await RankEditor.create_rank( selection, self.rank_type, diff --git a/src/modules/ranks/ui/preview.py b/src/modules/ranks/ui/preview.py index 21e1064f..7dcca0e4 100644 --- a/src/modules/ranks/ui/preview.py +++ b/src/modules/ranks/ui/preview.py @@ -7,6 +7,7 @@ from discord.ui.button import button, Button, ButtonStyle from meta import conf, LionBot from core.data import RankType +from wards import equippable_role from utils.ui import MessageUI, AButton, AsComponents from utils.lib import MessageArgs, replace_multiple @@ -214,24 +215,11 @@ class RankPreviewUI(MessageUI): role: discord.Role = selected.values[0] await selection.response.defer(thinking=True, ephemeral=True) - if role >= selection.user.top_role: - # Do not allow user to manage a role above their own top role - error = t(_p( - 'ui:rank_preview|menu:roles|error:above_caller', - "You have insufficient permissions to assign {mention} as a rank role! " - "You may only manage roles below your top role." - )) - embed = discord.Embed( - title=t(_p( - 'ui:rank_preview|menu:roles|error:above_caller|title', - "Insufficient permissions!" - )), - description=error, - colour=discord.Colour.brand_red() - ) - await selection.response.send_message(embed=embed, ephemeral=True) - elif role.is_assignable(): + if role.is_assignable(): # Update the rank role + # Generic permission check for the new role + await equippable_role(self.bot, role, selection.user) + await self.rank.update(roleid=role.id) self.bot.get_cog('RankCog').flush_guild_ranks(self.guild.id) if self.parent is not None and not self.parent.is_finished():