Beta/commandes/categories/supprimer.py

59 lines
2.2 KiB
Python
Raw Normal View History

2026-02-06 22:23:20 +01:00
import discord
import re
def strip_emoji(text):
"""Remove emoji characters for fuzzy matching."""
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF"
u"\U0001F1E0-\U0001F1FF\U00002702-\U000027B0\U000024C2-\U0001F251"
u"\U0000FE00-\U0000FE0F\U0000200D\U0000E0100-\U0000E01EFF"
u"\u20E3\u00A9\u00AE\u2122"
"]+", flags=re.UNICODE)
return emoji_pattern.sub('', text).strip()
async def find_category(guild, category_name_or_id):
"""Find a category by ID or name (exact then fuzzy)."""
# 1. Try by ID
try:
cat_id = int(category_name_or_id)
cat = guild.get_channel(cat_id)
if cat and isinstance(cat, discord.CategoryChannel):
return cat
except (ValueError, TypeError):
pass
# 2. Exact name
for cat in guild.categories:
if cat.name.casefold() == category_name_or_id.casefold():
return cat
# 3. Fuzzy (strip emoji)
clean_search = strip_emoji(category_name_or_id).lower().strip()
for cat in guild.categories:
clean_name = strip_emoji(cat.name).lower().strip()
if clean_name == clean_search or (clean_search and clean_search in clean_name):
return cat
return None
2026-02-06 22:23:20 +01:00
async def execute(bot, params, message):
categories = params.get('categories', [])
if not categories:
categories = [params]
guild = message.guild
deleted_count = 0
for category_params in categories:
category_name = category_params.get('category_name') or category_params.get('category_id')
if not category_name:
continue
category = await find_category(guild, category_name)
2026-02-06 22:23:20 +01:00
if not category:
await message.channel.send(f"Catégorie '{category_name}' introuvable.")
continue
try:
await category.delete(reason="Supprimée par le Superviseur")
deleted_count += 1
except discord.Forbidden:
await message.channel.send(f"Je n'ai pas les permissions pour supprimer la catégorie '{category_name}'.")
if deleted_count > 0:
await message.channel.send(f"{deleted_count} catégorie(s) supprimée(s).")