import 'dotenv/config'; import { Client, GatewayIntentBits, WebhookClient, AuditLogEvent, OAuth2Scopes, Options, Events } from 'discord.js'; // La variable des détecteurs est déclarée mais pas initialisée (elle le sera dans loadDetectors) let firstDetector; // Fonction de chargement asynchrone des modules locaux (pour contourner le blocage d'Alpine) async function loadDetectors() { try { // Import dynamique qui attend la connexion réussie du bot const detectorModule = await import('./detectors/allDetector.js'); firstDetector = detectorModule.default; console.log("[STATUS] Détecteurs chargés avec succès. Bot prêt à troller."); } catch (e) { console.error("ALERTE: Impossible de charger les détecteurs locaux ! Vérifiez l'arborescence et 'data/index.js'.", e); } } // 1. CLIENT DÉFINITION const client = new Client({ makeCache: Options.cacheWithLimits({ MessageManager: 0, }), intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, ] }); // -- GESTION DES LOGS GUILD (Non-critique, peut être décommenté) -- // client.on('guildCreate', ... // client.on('guildDelete', ... // -- 2. DÉMARRAGE & READY -- client.on(Events.ClientReady, async () => { console.log(`[SUCCESS] Logged in as ${client.user?.tag}`); console.log('Bot is ready!'); // DÉMARRAGE DU CHARGEMENT DES MODULES LOURDS APRÈS LA CONNEXION await loadDetectors(); }); // -- 3. GESTION DES MESSAGES (Cœur du bot) -- async function handleMessage(message) { // Le bot ne répond pas tant que le chargement dynamique n'est pas terminé if (!firstDetector) return; try { const reply = await firstDetector.createReply(message); if (reply) { await message.reply(reply); } } catch (e) { console.error('Erreur dans le détecteur:', e); } } client.on('messageCreate', async (message) => { if (message.author.bot) return; await handleMessage(message); }); client.on('messageUpdate', async (oldMessage, newMessage) => { let message = newMessage; if (message.partial) { try { message = await message.fetch(); } catch (e) { return; } } if (!message.author || message.author.bot) return; if (oldMessage.content === message.content) return; if (oldMessage.content && oldMessage.content.match(/(\b|^)quoi(\b|$)/i)) { return; } await handleMessage(message); }); // 4. CONNEXION FINALE client.login(process.env.DISCORD_TOKEN);