import discord async def _find_category(guild, category_params): """Find a category by ID first, then by name (case-insensitive).""" category_id = category_params.get('category_id') if category_id: try: cat = guild.get_channel(int(category_id)) if cat and isinstance(cat, discord.CategoryChannel): return cat except (ValueError, TypeError): pass category_name = category_params.get('category_name') if not category_name: return None return discord.utils.find(lambda cat: cat.name.casefold() == category_name.casefold(), guild.categories) async def execute(bot, params, message): categories = params.get('categories', []) if not categories: # Fallback for single category categories = [params] guild = message.guild renamed_count = 0 for category_params in categories: category_name = category_params.get('category_name') new_name = category_params.get('new_name') category = await _find_category(guild, category_params) if not category: label = category_name or category_params.get('category_id', 'inconnue') await message.channel.send(f"Catégorie '{label}' introuvable.") continue try: await category.edit(name=new_name) renamed_count += 1 except discord.Forbidden: label = category_name or category_params.get('category_id', 'inconnue') await message.channel.send(f"Je n'ai pas les permissions pour renommer la catégorie '{label}'.") if renamed_count > 0: await message.channel.send(f"{renamed_count} catégorie(s) renommée(s).")