From 9b012baa5c09fa80ca37a765b41d16c0c5c85e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lucas=20de=20Oliveira=20Lopes?= <55464917+jlucaso1@users.noreply.github.com> Date: Wed, 19 Nov 2025 10:13:03 -0300 Subject: [PATCH] fix: suppress receipts for newsletter messages to prevent disconnection (#2071) --- src/Socket/messages-recv.ts | 49 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 98a4cbec..b242d276 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -51,6 +51,7 @@ import { getBinaryNodeChildren, getBinaryNodeChildString, isJidGroup, + isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser, @@ -1250,30 +1251,36 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { await sendMessageAck(node, NACK_REASONS.UnhandledError) }) } else { - // no type in the receipt => message delivered - let type: MessageReceiptType = undefined - let participant = msg.key.participant - if (category === 'peer') { - // special peer message - type = 'peer_msg' - } else if (msg.key.fromMe) { - // message was sent by us from a different device - type = 'sender' - // need to specially handle this case - if (isLidUser(msg.key.remoteJid!) || isLidUser(msg.key.remoteJidAlt)) { - participant = author // TODO: investigate sending receipts to LIDs and not PNs + await sendMessageAck(node) + const isNewsletter = isJidNewsletter(msg.key.remoteJid!) + if (!isNewsletter) { + // no type in the receipt => message delivered + let type: MessageReceiptType = undefined + let participant = msg.key.participant + if (category === 'peer') { + // special peer message + type = 'peer_msg' + } else if (msg.key.fromMe) { + // message was sent by us from a different device + type = 'sender' + // need to specially handle this case + if (isLidUser(msg.key.remoteJid!) || isLidUser(msg.key.remoteJidAlt)) { + participant = author // TODO: investigate sending receipts to LIDs and not PNs + } + } else if (!sendActiveReceipts) { + type = 'inactive' } - } else if (!sendActiveReceipts) { - type = 'inactive' - } - await sendReceipt(msg.key.remoteJid!, participant!, [msg.key.id!], type) + await sendReceipt(msg.key.remoteJid!, participant!, [msg.key.id!], type) - // send ack for history message - const isAnyHistoryMsg = getHistoryMsg(msg.message!) - if (isAnyHistoryMsg) { - const jid = jidNormalizedUser(msg.key.remoteJid!) - await sendReceipt(jid, undefined, [msg.key.id!], 'hist_sync') + // send ack for history message + const isAnyHistoryMsg = getHistoryMsg(msg.message!) + if (isAnyHistoryMsg) { + const jid = jidNormalizedUser(msg.key.remoteJid!) + await sendReceipt(jid, undefined, [msg.key.id!], 'hist_sync') + } + } else { + logger.debug({ key: msg.key }, 'processed newsletter message without receipts') } }