From d350d3e59abb542d2bc688d2379d4222ade0c971 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:22:56 +0000 Subject: [PATCH] perf(baileys): optimize group broadcast by making it asynchronous Moved the WhatsApp group broadcast logic inside an unawaited async IIFE. This prevents the sequential `for...of` loop from blocking the main `connection.update` event handler while still maintaining the 500ms delay per message required to prevent rate limits. Added `.catch()` blocks for individual message errors and the background task itself. Co-authored-by: Rukafuu <111822334+Rukafuu@users.noreply.github.com> --- .../adapters/baileysAdapter.js | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Chat/backend/services/whatsapp-gateway/adapters/baileysAdapter.js b/Chat/backend/services/whatsapp-gateway/adapters/baileysAdapter.js index 5fa9aadc..27511365 100644 --- a/Chat/backend/services/whatsapp-gateway/adapters/baileysAdapter.js +++ b/Chat/backend/services/whatsapp-gateway/adapters/baileysAdapter.js @@ -76,15 +76,24 @@ export async function startBaileys(config) { const gData = JSON.parse(fs.readFileSync(groupsPath, 'utf8')); const gIds = Object.keys(gData).filter(k => k.endsWith('@g.us')); - let count = 0; - for (const gid of gIds) { - // Small delay to prevent rate limit (500ms per msg) - await new Promise(r => setTimeout(r, 500)); - await sock.sendMessage(gid, { text: "⚡ *Lira Online!*\nDigite */menu* para ver as novidades." }); - count++; - } - logger.info(`Broadcasted to ${count} groups.`); - fs.writeFileSync(BCAST_FILE, NOW.toString()); + // Process groups asynchronously in background to prevent blocking + (async () => { + let count = 0; + for (const gid of gIds) { + try { + // Small delay to prevent rate limit (500ms per msg) + await new Promise(r => setTimeout(r, 500)); + await sock.sendMessage(gid, { text: "⚡ *Lira Online!*\nDigite */menu* para ver as novidades." }); + count++; + } catch (err) { + logger.error(`Failed to broadcast to group ${gid}`, err); + } + } + logger.info(`Broadcasted to ${count} groups.`); + fs.writeFileSync(BCAST_FILE, NOW.toString()); + })().catch(err => { + logger.error('Background broadcast task failed', err); + }); } } catch (e) { logger.error('Broadcast failed', e);