2026-02-06 22:23:20 +01:00
|
|
|
import discord
|
|
|
|
|
|
2026-06-16 17:09:34 +00:00
|
|
|
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)
|
|
|
|
|
|
2026-02-06 22:23:20 +01:00
|
|
|
async def execute(bot, params, message):
|
|
|
|
|
roles = params.get('roles', [])
|
|
|
|
|
if not roles:
|
|
|
|
|
# Fallback for single role
|
|
|
|
|
roles = [params]
|
|
|
|
|
guild = message.guild
|
|
|
|
|
deleted_count = 0
|
|
|
|
|
for role_params in roles:
|
|
|
|
|
role_name = role_params.get('role_name')
|
2026-06-16 17:09:34 +00:00
|
|
|
|
|
|
|
|
role = await _find_role(guild, role_params)
|
2026-02-06 22:23:20 +01:00
|
|
|
if not role:
|
2026-06-16 17:09:34 +00:00
|
|
|
label = role_name or role_params.get('role_id', 'inconnu')
|
|
|
|
|
await message.channel.send(f"Rôle '{label}' introuvable.")
|
2026-02-06 22:23:20 +01:00
|
|
|
continue
|
|
|
|
|
try:
|
|
|
|
|
await role.delete(reason="Supprimé par le Superviseur")
|
|
|
|
|
deleted_count += 1
|
|
|
|
|
except discord.Forbidden:
|
2026-06-16 17:09:34 +00:00
|
|
|
label = role_name or role_params.get('role_id', 'inconnu')
|
|
|
|
|
await message.channel.send(f"Je n'ai pas les permissions pour supprimer le rôle '{label}'.")
|
2026-02-06 22:23:20 +01:00
|
|
|
if deleted_count > 0:
|
2026-06-16 17:09:34 +00:00
|
|
|
await message.channel.send(f"{deleted_count} rôle(s) supprimé(s).")
|