# commandes/no_link.py import re import disnake from disnake.ext import commands import json import os # Chemins ABSOLUS BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DATA_DIR = os.path.join(BASE_DIR, "..", "data") SECURITY_FILE = os.path.join(DATA_DIR, "security.json") # Créer le dossier data/ s'il n'existe pas os.makedirs(DATA_DIR, exist_ok=True) def load_guild_security(guild_id: int) -> dict: """Retourne la configuration d'un serveur.""" if not os.path.isfile(SECURITY_FILE): return {} with open(SECURITY_FILE, "r") as f: data = json.load(f) return data.get(str(guild_id), {}) # Regex pour détecter les liens URL_REGEX = re.compile(r"(?i)\b((?:https?://|www\.)[^\s<>]+)\b") class NoLink(commands.Cog): """Supprime les messages contenant un lien si l'option anti_link est activée pour le serveur.""" def __init__(self, bot: commands.Bot) -> None: self.bot = bot @commands.Cog.listener() async def on_message(self, message: disnake.Message) -> None: if message.author.bot or not message.guild: return guild_settings = load_guild_security(message.guild.id) if not guild_settings.get("anti_link", False): return # Option désactivée → ne rien faire if URL_REGEX.search(message.content): try: await message.delete() await message.channel.send( f"{message.author.mention} ⚠️ Les liens sont interdits sur ce serveur.", delete_after=5 ) except disnake.Forbidden: print(f"Impossible de supprimer le message de {message.author} (permissions manquantes).") except Exception as exc: print(f"Erreur lors de la suppression du message : {exc}") def setup(bot: commands.Bot) -> None: bot.add_cog(NoLink(bot))