diff --git a/index.js b/index.js index ae3625b..c1b8b45 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,25 @@ -import { Client, GatewayIntentBits, WebhookClient, AuditLogEvent, OAuth2Scopes, Options, Events } from 'discord.js'; -import firstDetector from './detectors/allDetector.js'; import 'dotenv/config'; +import { Client, GatewayIntentBits, WebhookClient, AuditLogEvent, OAuth2Scopes, Options, Events } from 'discord.js'; -console.log("--- DEBUG ---"); -console.log("Test Token:", process.env.DISCORD_TOKEN ? "Présent (Longueur: " + process.env.DISCORD_TOKEN.length + ")" : "ABSENT !"); -console.log("Tentative de connexion à Discord."); +// 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, // le bot ne se souviendra pas des anciens messages (pas de cache) + MessageManager: 0, }), intents: [ GatewayIntentBits.Guilds, @@ -17,9 +28,24 @@ const client = new Client({ ] }); -// Gestion des Messages (Listeners) -// Fonction locale pour traiter un message (remplace newMessageListener) +// -- 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) { @@ -37,21 +63,16 @@ client.on('messageCreate', async (message) => { client.on('messageUpdate', async (oldMessage, newMessage) => { let message = newMessage; - if (message.partial) { try { message = await message.fetch(); } catch (e) { - console.error('Error while fetching message', e); return; } } - if (!message.author || message.author.bot) return; - if (oldMessage.content === message.content) return; // Pas de changement de texte - if (!message.content) return; - - // on évite de spammer + if (oldMessage.content === message.content) return; + if (oldMessage.content && oldMessage.content.match(/(\b|^)quoi(\b|$)/i)) { return; } @@ -59,8 +80,5 @@ client.on('messageUpdate', async (oldMessage, newMessage) => { await handleMessage(message); }); -client.on(Events.ClientReady, () => { - console.log(`Hello World !`); -}); - +// 4. CONNEXION FINALE client.login(process.env.DISCORD_TOKEN); \ No newline at end of file diff --git a/indexOld.js b/indexOld.js new file mode 100644 index 0000000..ae3625b --- /dev/null +++ b/indexOld.js @@ -0,0 +1,66 @@ +import { Client, GatewayIntentBits, WebhookClient, AuditLogEvent, OAuth2Scopes, Options, Events } from 'discord.js'; +import firstDetector from './detectors/allDetector.js'; +import 'dotenv/config'; + +console.log("--- DEBUG ---"); +console.log("Test Token:", process.env.DISCORD_TOKEN ? "Présent (Longueur: " + process.env.DISCORD_TOKEN.length + ")" : "ABSENT !"); +console.log("Tentative de connexion à Discord."); + +const client = new Client({ + makeCache: Options.cacheWithLimits({ + MessageManager: 0, // le bot ne se souviendra pas des anciens messages (pas de cache) + }), + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.MessageContent, + ] +}); + +// Gestion des Messages (Listeners) +// Fonction locale pour traiter un message (remplace newMessageListener) +async function handleMessage(message) { + 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) { + console.error('Error while fetching message', e); + return; + } + } + + if (!message.author || message.author.bot) return; + if (oldMessage.content === message.content) return; // Pas de changement de texte + if (!message.content) return; + + // on évite de spammer + if (oldMessage.content && oldMessage.content.match(/(\b|^)quoi(\b|$)/i)) { + return; + } + + await handleMessage(message); +}); + +client.on(Events.ClientReady, () => { + console.log(`Hello World !`); +}); + +client.login(process.env.DISCORD_TOKEN); \ No newline at end of file