diff --git a/.gitignore b/.gitignore index 214fb82..e336e96 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ /node_modules .env -.gitconfig -db.json \ No newline at end of file +.gitconfig \ No newline at end of file diff --git a/README.md b/README.md index bd9bced..fc87ffa 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,22 @@ -# genius-troll +# intro + +## genius-troll + réponses troll et fun facts -to invite : https://discord.com/oauth2/authorize?client_id=1441128583178227883&permissions=8&integration_type=0&scope=bot+applications.commands +[to invite](https://discord.com/oauth2/authorize?client_id=1441128583178227883&permissions=8&integration_type=0&scope=bot+applications.commands) -# dépendances -bun add fr-compromise conjugation-fr discord.js +# dev +## version -# version - 0.1.1 : initialisation et création du code - 0.2.1 : ajout de modules de détection - 0.2.2 : rajout de nouveaux comportement (détection d'un feur par quelqu'un d'autre, ...) - 0.3.1 : ajout de db (retention de setting) et maj des dependences -- 1.0.0 : ca marche \ No newline at end of file +- 1.0.0 : ca marche via vs code +- 1.1.0 : fix sur lxc + +## dependences + +- npm i +- node index.js diff --git a/index.js b/index.js index c1b8b45..46b83f6 100644 --- a/index.js +++ b/index.js @@ -1,25 +1,15 @@ import 'dotenv/config'; -import { Client, GatewayIntentBits, WebhookClient, AuditLogEvent, OAuth2Scopes, Options, Events } from 'discord.js'; +import { Client, GatewayIntentBits, Options, Events } from 'discord.js'; +// Import statique : si ça plante ici (RAM), tu le sauras tout de suite +import firstDetector from './detectors/allDetector.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, + MessageManager: 0, // Très bien pour la RAM + // Ajoute ceci pour économiser encore plus : + UserManager: 0, + GuildMemberManager: 0, + ThreadManager: 0, }), intents: [ GatewayIntentBits.Guilds, @@ -28,57 +18,21 @@ const client = new Client({ ] }); -// -- 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 () => { +client.on(Events.ClientReady, () => { 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; + try { + const reply = await firstDetector.createReply(message); // Plus besoin de vérifier si firstDetector existe + if (reply) await message.reply(reply); + } catch (e) { + console.error('Erreur détecteur:', e); } - - await handleMessage(message); }); -// 4. CONNEXION FINALE +// ... (Reste du code inchangé) + client.login(process.env.DISCORD_TOKEN); \ No newline at end of file diff --git a/indexFaulty.JS b/indexFaulty.JS new file mode 100644 index 0000000..c1b8b45 --- /dev/null +++ b/indexFaulty.JS @@ -0,0 +1,84 @@ +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); \ No newline at end of file