From 0b9b9a4a23f6f20ce0043c135cb55a619a2a0ec9 Mon Sep 17 00:00:00 2001 From: Mow Date: Sat, 8 Nov 2025 20:18:49 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20commande=20de=20k?= =?UTF-8?q?ick=20pour=20inclure=20la=20possibilit=C3=A9=20d'utiliser=20un?= =?UTF-8?q?=20ID=20utilisateur,=20ajout=20de=20messages=20d'erreur=20pour?= =?UTF-8?q?=20les=20utilisateurs=20introuvables.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- discordbot/moderation.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/discordbot/moderation.py b/discordbot/moderation.py index d7dc3f1..23c2e56 100644 --- a/discordbot/moderation.py +++ b/discordbot/moderation.py @@ -752,9 +752,9 @@ async def handle_staff_help_command(message: Message, bot): if ConfigurationHelper().getValue('moderation_kick_enable'): value = ( - "• `!kick @utilisateur raison`\n" + "• `!kick @utilisateur raison` ou `!kick raison`\n" " Expulse temporairement un utilisateur du serveur\n" - "Exemple: `!kick @User Spam de liens`" + "Exemples: `!kick @User Spam de liens` ou `!kick 123456789012345678 Spam`" ) embed.add_field(name="👢 Expulsion", value=value, inline=False) @@ -770,20 +770,40 @@ async def handle_kick_command(message: Message, bot): parts = message.content.split(maxsplit=2) if not has_staff_role(message.author.roles): await send_access_denied(message.channel) - elif len(parts) < 2 or not message.mentions: + elif len(parts) < 2: await _send_kick_usage(message.channel) else: - target_member = message.mentions[0] - reason = parts[2] if len(parts) > 2 else "Sans raison" - await _process_kick_success(message, target_member, reason) + target_user, reason = await _parse_kick_target_and_reason(message, bot, parts) + if not target_user: + await _send_user_not_found_for_kick(message.channel) + else: + await _process_kick_success(message, target_user, reason) async def _send_kick_usage(channel): embed = discord.Embed( title="📋 Utilisation de la commande", - description="**Syntaxe :** `!kick @utilisateur [raison]`", + description="**Syntaxe :** `!kick @utilisateur [raison]` ou `!kick [raison]`", color=discord.Color.blue() ) - embed.add_field(name="Exemples", value="• `!kick @User Spam dans le chat`\n• `!kick @User Comportement inapproprié`", inline=False) + embed.add_field(name="Exemples", value="• `!kick @User Spam dans le chat`\n• `!kick 123456789012345678 Comportement inapproprié`", inline=False) + await channel.send(embed=embed) + +async def _parse_kick_target_and_reason(message: Message, bot, parts: list): + if message.mentions: + return message.mentions[0], (parts[2] if len(parts) > 2 else "Sans raison") + try: + user_id = int(parts[1]) + user = await bot.fetch_user(user_id) + return user, (parts[2] if len(parts) > 2 else "Sans raison") + except (ValueError, discord.NotFound): + return None, None + +async def _send_user_not_found_for_kick(channel): + embed = discord.Embed( + title="❌ Erreur", + description="Utilisateur introuvable. Vérifiez la mention ou l'ID Discord.", + color=discord.Color.red() + ) await channel.send(embed=embed) async def _process_kick_success(message: Message, target_member, reason: str):