diff --git a/kdb-bot/src/modules/short_role_name/service/short_role_name_service.py b/kdb-bot/src/modules/short_role_name/service/short_role_name_service.py index 89ae5fad..5a2e8af8 100644 --- a/kdb-bot/src/modules/short_role_name/service/short_role_name_service.py +++ b/kdb-bot/src/modules/short_role_name/service/short_role_name_service.py @@ -1,3 +1,5 @@ +from typing import Optional + import discord from cpl_core.configuration import ConfigurationABC from cpl_core.logging import LoggerABC @@ -41,7 +43,11 @@ class ShortRoleNameService: before = "" after = "" new_nick = member.nick if member.nick is not None else member.name - role_ids = List(discord.Role, member.roles).select(lambda x: x.id) + member_roles = List(discord.Role, member.roles) + highest_role: Optional[discord.Role] = ( + member_roles.last_or_default() if settings.short_role_name_only_set_highest_role else None + ) + member_role_ids = member_roles.select(lambda x: x.id) server = self._server.get_server_by_discord_id(member.guild.id) for short_role_name in self._short_role_names.get_short_role_names_by_server_id(server.id): @@ -51,7 +57,11 @@ class ShortRoleNameService: new_nick = new_nick.replace(f"[{short_role_name.short_name}] ", "") new_nick = new_nick.replace(f"[{short_role_name.short_name}]", "") - if short_role_name.role_id not in role_ids: + if ( + short_role_name.role_id not in member_role_ids + or highest_role + and highest_role.id != short_role_name.role_id + ): continue if short_role_name.position == ShortRoleNamePositionEnum.before: