2026-02-06 22:23:20 +01:00
|
|
|
import discord
|
|
|
|
|
|
|
|
|
|
async def execute(bot, params, message):
|
|
|
|
|
role_assignments = params.get('role_assignments', [])
|
|
|
|
|
if not role_assignments:
|
|
|
|
|
# Fallback for single assignment
|
|
|
|
|
role_assignments = [params]
|
|
|
|
|
assigned_count = 0
|
|
|
|
|
total_members = 0
|
|
|
|
|
for assignment in role_assignments:
|
|
|
|
|
target_mention = assignment.get('target_user_mention')
|
|
|
|
|
role_name = assignment.get('role_name')
|
2026-06-16 17:09:34 +00:00
|
|
|
|
|
|
|
|
# Try by role_id first if available
|
|
|
|
|
role = None
|
|
|
|
|
role_id = assignment.get('role_id')
|
|
|
|
|
if role_id:
|
|
|
|
|
try:
|
|
|
|
|
role = message.guild.get_role(int(role_id))
|
|
|
|
|
except (ValueError, TypeError):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
if not role and role_name:
|
|
|
|
|
role = discord.utils.find(lambda r: r.name.casefold() == role_name.casefold(), message.guild.roles)
|
|
|
|
|
|
2026-02-06 22:23:20 +01:00
|
|
|
if not role:
|
2026-06-16 17:09:34 +00:00
|
|
|
label = role_name or assignment.get('role_id', 'inconnu')
|
|
|
|
|
await message.channel.send(f"Rôle '{label}' introuvable.")
|
2026-02-06 22:23:20 +01:00
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# Check for bulk assignment
|
|
|
|
|
if target_mention.lower() in ['@everyone', 'everyone', 'all', 'tous']:
|
|
|
|
|
total_members = 0
|
|
|
|
|
assigned_count = 0
|
|
|
|
|
await message.channel.send(f"Ajout du rôle '{role.name}' à tous les membres... (Cela peut prendre du temps)")
|
|
|
|
|
for member in message.guild.members:
|
|
|
|
|
if member.bot:
|
|
|
|
|
continue # Skip bots
|
|
|
|
|
try:
|
|
|
|
|
await member.add_roles(role, reason=f"Rôle ajouté par le Superviseur à tous les membres")
|
|
|
|
|
assigned_count += 1
|
|
|
|
|
total_members += 1
|
|
|
|
|
if assigned_count % 10 == 0: # Progress update every 10 assigns
|
|
|
|
|
await message.channel.send(f"Progression: {assigned_count} sur {total_members} membres...")
|
|
|
|
|
except discord.Forbidden:
|
|
|
|
|
await message.channel.send(f"Impossible d'ajouter le rôle à {member.mention} (permissions insuffisantes)")
|
|
|
|
|
continue
|
|
|
|
|
except Exception as e:
|
|
|
|
|
await message.channel.send(f"Erreur lors de l'ajout à {member.mention}: {str(e)}")
|
|
|
|
|
continue
|
|
|
|
|
await message.channel.send(f"Rôle '{role.name}' ajouté à {assigned_count} membres (bots exclus).")
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# Single user assignment
|
|
|
|
|
if target_mention.startswith('<@') and target_mention.endswith('>'):
|
|
|
|
|
user_id = int(target_mention[2:-1])
|
|
|
|
|
elif target_mention.startswith('<@!') and target_mention.endswith('>'):
|
|
|
|
|
user_id = int(target_mention[3:-1])
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
user_id = int(target_mention)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await message.channel.send(f"Mention ou ID invalide: {target_mention}")
|
|
|
|
|
continue
|
|
|
|
|
member = message.guild.get_member(user_id)
|
|
|
|
|
if not member:
|
|
|
|
|
await message.channel.send(f"Utilisateur {target_mention} introuvable.")
|
|
|
|
|
continue
|
|
|
|
|
try:
|
|
|
|
|
await member.add_roles(role, reason=f"Rôle ajouté par le Superviseur")
|
|
|
|
|
assigned_count += 1
|
|
|
|
|
except discord.Forbidden:
|
|
|
|
|
await message.channel.send(f"Je n'ai pas les permissions pour ajouter le rôle {role.name} à {member.mention}.")
|
|
|
|
|
if assigned_count > 0 and not total_members:
|
|
|
|
|
await message.channel.send(f"{assigned_count} rôle(s) ajouté(s).")
|