fix: gpt-oss:20b ollama, streaming, tableaux JSON, recherche flexible salons/categories
This commit is contained in:
parent
14985f6dbb
commit
189d56026b
21 changed files with 2824 additions and 491 deletions
|
|
@ -1,15 +1,52 @@
|
|||
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
|
||||
|
||||
async def execute(bot, params, message):
|
||||
categories = params.get('categories', [])
|
||||
if not categories:
|
||||
# Fallback for single category
|
||||
categories = [params]
|
||||
guild = message.guild
|
||||
deleted_count = 0
|
||||
for category_params in categories:
|
||||
category_name = category_params.get('category_name')
|
||||
category = discord.utils.find(lambda cat: cat.name.casefold() == category_name.casefold(), guild.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)
|
||||
if not category:
|
||||
await message.channel.send(f"Catégorie '{category_name}' introuvable.")
|
||||
continue
|
||||
|
|
@ -19,4 +56,4 @@ async def execute(bot, params, message):
|
|||
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).")
|
||||
await message.channel.send(f"{deleted_count} catégorie(s) supprimée(s).")
|
||||
Loading…
Add table
Add a link
Reference in a new issue