import discord async def _find_role(guild, role_params): """Find a role by ID first, then by name (case-insensitive).""" role_id = role_params.get('role_id') if role_id: try: r = guild.get_role(int(role_id)) if r: return r except (ValueError, TypeError): pass role_name = role_params.get('role_name') if not role_name: return None return discord.utils.find(lambda r: r.name.casefold() == role_name.casefold(), guild.roles) async def execute(bot, params, message): roles = params.get('roles', []) if not roles: # Fallback for single role roles = [params] guild = message.guild moved_count = 0 for role_params in roles: role_name = role_params.get('role_name') position = role_params.get('position') role = await _find_role(guild, role_params) if not role: label = role_name or role_params.get('role_id', 'inconnu') await message.channel.send(f"Rôle '{label}' introuvable.") continue try: await role.edit(position=position) moved_count += 1 except discord.Forbidden: label = role_name or role_params.get('role_id', 'inconnu') await message.channel.send(f"Je n'ai pas les permissions pour déplacer le rôle '{label}'.") if moved_count > 0: await message.channel.send(f"{moved_count} rôle(s) déplacé(s).")