fix: suppress receipts for newsletter messages to prevent disconnection (#2071)

This commit is contained in:
João Lucas de Oliveira Lopes
2025-11-19 10:13:03 -03:00
committed by GitHub
parent e5f820d119
commit 9b012baa5c
+28 -21
View File
@@ -51,6 +51,7 @@ import {
getBinaryNodeChildren, getBinaryNodeChildren,
getBinaryNodeChildString, getBinaryNodeChildString,
isJidGroup, isJidGroup,
isJidNewsletter,
isJidStatusBroadcast, isJidStatusBroadcast,
isLidUser, isLidUser,
isPnUser, isPnUser,
@@ -1250,30 +1251,36 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => {
await sendMessageAck(node, NACK_REASONS.UnhandledError) await sendMessageAck(node, NACK_REASONS.UnhandledError)
}) })
} else { } else {
// no type in the receipt => message delivered await sendMessageAck(node)
let type: MessageReceiptType = undefined const isNewsletter = isJidNewsletter(msg.key.remoteJid!)
let participant = msg.key.participant if (!isNewsletter) {
if (category === 'peer') { // no type in the receipt => message delivered
// special peer message let type: MessageReceiptType = undefined
type = 'peer_msg' let participant = msg.key.participant
} else if (msg.key.fromMe) { if (category === 'peer') {
// message was sent by us from a different device // special peer message
type = 'sender' type = 'peer_msg'
// need to specially handle this case } else if (msg.key.fromMe) {
if (isLidUser(msg.key.remoteJid!) || isLidUser(msg.key.remoteJidAlt)) { // message was sent by us from a different device
participant = author // TODO: investigate sending receipts to LIDs and not PNs 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 // send ack for history message
const isAnyHistoryMsg = getHistoryMsg(msg.message!) const isAnyHistoryMsg = getHistoryMsg(msg.message!)
if (isAnyHistoryMsg) { if (isAnyHistoryMsg) {
const jid = jidNormalizedUser(msg.key.remoteJid!) const jid = jidNormalizedUser(msg.key.remoteJid!)
await sendReceipt(jid, undefined, [msg.key.id!], 'hist_sync') await sendReceipt(jid, undefined, [msg.key.id!], 'hist_sync')
}
} else {
logger.debug({ key: msg.key }, 'processed newsletter message without receipts')
} }
} }