Initialisation du repository de Beta
This commit is contained in:
commit
14985f6dbb
9469 changed files with 1903273 additions and 0 deletions
79
commandes/security/unmute.py
Normal file
79
commandes/security/unmute.py
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
import asyncio
|
||||
from ..autres.config import config
|
||||
|
||||
async def execute(bot, params, message):
|
||||
users = params.get('users', [])
|
||||
if not users:
|
||||
# Fallback for single user
|
||||
users = [params]
|
||||
|
||||
# Get mute role from config or default to 'muted'
|
||||
mute_role_name = config.get_mute_role(message.guild.id) or 'muted'
|
||||
mute_role = discord.utils.get(message.guild.roles, name=mute_role_name)
|
||||
|
||||
if not mute_role:
|
||||
await message.channel.send(f"Rôle '{mute_role_name}' introuvable. Impossible de démuter.")
|
||||
return
|
||||
|
||||
unmuted_count = 0
|
||||
failed_count = 0
|
||||
|
||||
for user_params in users:
|
||||
target_mention = user_params.get('target_user_mention')
|
||||
user_id = None
|
||||
|
||||
# Parse mention or ID
|
||||
if target_mention.startswith('<@') and target_mention.endswith('>'):
|
||||
try:
|
||||
# Handle <@123> and <@!123>
|
||||
clean_id = target_mention[2:-1]
|
||||
if clean_id.startswith('!'):
|
||||
clean_id = clean_id[1:]
|
||||
user_id = int(clean_id)
|
||||
except ValueError:
|
||||
pass
|
||||
elif target_mention.startswith('@'):
|
||||
# Handle @username
|
||||
username = target_mention[1:]
|
||||
member = discord.utils.find(lambda m: m.name == username or m.display_name == username, message.guild.members)
|
||||
if member:
|
||||
user_id = member.id
|
||||
else:
|
||||
try:
|
||||
user_id = int(target_mention)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if not user_id:
|
||||
# Try finding member by name if ID parsing failed
|
||||
username = target_mention.lstrip('@')
|
||||
member = discord.utils.find(lambda m: m.name == username or m.display_name == username, message.guild.members)
|
||||
if member:
|
||||
user_id = member.id
|
||||
|
||||
if not user_id:
|
||||
await message.channel.send(f"Mention ou ID invalide: {target_mention}")
|
||||
failed_count += 1
|
||||
continue
|
||||
|
||||
member = message.guild.get_member(user_id)
|
||||
if not member:
|
||||
await message.channel.send(f"Utilisateur introuvable dans le serveur: {target_mention}")
|
||||
failed_count += 1
|
||||
continue
|
||||
|
||||
if mute_role not in member.roles:
|
||||
await message.channel.send(f"{member.mention} n'est pas muté.")
|
||||
continue
|
||||
|
||||
try:
|
||||
await member.remove_roles(mute_role, reason="Démuté par le Superviseur")
|
||||
unmuted_count += 1
|
||||
except discord.Forbidden:
|
||||
await message.channel.send(f"Je n'ai pas les permissions pour démuter {member.mention}.")
|
||||
failed_count += 1
|
||||
|
||||
if unmuted_count > 0:
|
||||
await message.channel.send(f"{unmuted_count} utilisateur(s) démuté(s).")
|
||||
Loading…
Add table
Add a link
Reference in a new issue