diff --git a/index.js b/index.js index 3a0f8ce..b08e2c2 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,16 @@ -const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, fetchLatestBaileysVersion, proto, generateWAMessageFromContent, generateWAMessageContent ,prepareWAMessageMedia} = require('@fizzxydev/baileys-pro'); const express = require('express'); -const { Boom } = require('@hapi/boom'); const qrcode = require('qrcode'); const path = require('path'); const fs = require('fs'); +const NodeCache = require('node-cache'); +const { + default: makeWASocket, + useMultiFileAuthState, + DisconnectReason, + fetchLatestBaileysVersion, + proto, + generateWAMessageFromContent +} = require('@fizzxydev/baileys-pro'); const app = express(); app.use(express.json()); @@ -13,6 +20,15 @@ let sock; let qrData = null; let isConnected = false; +// 💾 Group Metadata Cache (5 minutes) +const groupCache = new NodeCache({ stdTTL: 300, useClones: false }); + +// Simule une récupération de message depuis un store pour getMessage +async function getMessageFromStore(key) { + // À adapter selon ta logique réelle + return { conversation: "Message temporaire pour retry" }; +} + const initBaileys = async () => { const { version } = await fetchLatestBaileysVersion(); const { state, saveCreds } = await useMultiFileAuthState('auth'); @@ -20,23 +36,21 @@ const initBaileys = async () => { sock = makeWASocket({ version, auth: state, - printQRInTerminal: false + markOnlineOnConnect: false, + getMessage: async (key) => await getMessageFromStore(key), + cachedGroupMetadata: async (jid) => groupCache.get(jid) }); - sock.ev.on('connection.update', async (update) => { - const { connection, lastDisconnect, qr } = update; + sock.ev.on('connection.update', async ({ connection, lastDisconnect, qr }) => { if (qr) { qrData = await qrcode.toDataURL(qr); isConnected = false; } + if (connection === 'close') { const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut; - if (shouldReconnect) { - console.log('🔁 Reconnexion...'); - initBaileys(); - } else { - console.log('❌ Déconnecté.'); - } + console.log(shouldReconnect ? '🔁 Reconnexion...' : '❌ Déconnecté.'); + if (shouldReconnect) initBaileys(); } else if (connection === 'open') { console.log('✅ Connecté à WhatsApp'); isConnected = true; @@ -44,9 +58,29 @@ const initBaileys = async () => { }); sock.ev.on('creds.update', saveCreds); + + // 📌 Caching des groupes + sock.ev.on('groups.update', async ([event]) => { + const metadata = await sock.groupMetadata(event.id); + groupCache.set(event.id, metadata); + }); + + sock.ev.on('group-participants.update', async (event) => { + const metadata = await sock.groupMetadata(event.id); + groupCache.set(event.id, metadata); + }); + + // (Facultatif) Gestion des messages reçus + sock.ev.on('messages.upsert', async ({ messages }) => { + const msg = messages[0]; + if (!msg.key.fromMe && msg.message?.conversation) { + console.log('💬 Message reçu de', msg.key.remoteJid, ':', msg.message.conversation); + } + }); }; initBaileys(); + app.use('/static', express.static(path.join(__dirname, 'public'))); app.get('/login', (req, res) => { diff --git a/package.json b/package.json index 9a7c66b..e9d8771 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "axios": "^1.4.0", "express": "^4.18.4", "qrcode": "^1.5.1", - "sharp": "^0.33.0" + "sharp": "^0.33.0", + "node-cache": "^5.1.2" + } }