diff --git a/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/whatsapp/index.js b/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/whatsapp/index.js index 72883f6..692eb92 100644 --- a/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/whatsapp/index.js +++ b/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/whatsapp/index.js @@ -23,6 +23,7 @@ let sock = null; let connected = false; let phoneNumber = null; let ownJid = null; +let ownLid = null; // acelasi cont, adresat in formatul nou LID let currentQR = null; let currentPairingCode = null; let reconnectAttempts = 0; @@ -69,12 +70,19 @@ async function startConnection() { reconnectAttempts = 0; phoneNumber = sock.user?.id?.split(':')[0] || sock.user?.id?.split('@')[0] || null; ownJid = phoneNumber ? `${phoneNumber}@s.whatsapp.net` : null; - console.log(`[whatsapp] Connected as ${phoneNumber} (self-chat-only mode: ${TEST_MODE_SELF_CHAT_ONLY})`); + // WhatsApp adreseaza conturile si prin LID (Linked ID), nu doar prin numar. Pe + // conturile noi, self-chat-ul soseste ca `@lid`, deci comparatia doar cu + // `@s.whatsapp.net` arunca toate mesajele. Sufixul de dispozitiv (":13") + // apare in credentiale dar nu si in remoteJid-ul mesajelor — il taiem. + const rawLid = sock.user?.lid || sock.authState?.creds?.me?.lid || null; + ownLid = rawLid ? `${rawLid.split(':')[0].split('@')[0]}@lid` : null; + console.log(`[whatsapp] Connected as ${phoneNumber} (lid: ${ownLid || 'n/a'}, self-chat-only mode: ${TEST_MODE_SELF_CHAT_ONLY})`); } if (connection === 'close') { connected = false; phoneNumber = null; + ownLid = null; const statusCode = lastDisconnect?.error?.output?.statusCode; const shouldReconnect = statusCode !== DisconnectReason.loggedOut; @@ -101,11 +109,23 @@ async function startConnection() { for (const msg of messages) { if (msg.key.remoteJid === 'status@broadcast') continue; const isGroup = msg.key.remoteJid.endsWith('@g.us'); - const isSelfChat = ownJid && msg.key.remoteJid === ownJid; - if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat) continue; - if (msg.key.fromMe && !isGroup && !isSelfChat) continue; + const isSelfChat = (ownJid && msg.key.remoteJid === ownJid) + || (ownLid && msg.key.remoteJid === ownLid); + // Mesajele aruncate se logheaza. Fara asta, un JID care nu se potriveste cu + // ownJid (ex. formatul @lid) face bridge-ul sa taca fara nicio urma in log. + if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat) { + console.log(`[whatsapp] ignorat (nu e self-chat): remoteJid=${msg.key.remoteJid} ownJid=${ownJid} ownLid=${ownLid}`); + continue; + } + if (msg.key.fromMe && !isGroup && !isSelfChat) { + console.log(`[whatsapp] ignorat (fromMe, nu e self-chat): remoteJid=${msg.key.remoteJid}`); + continue; + } const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text; - if (!text) continue; + if (!text) { + console.log(`[whatsapp] ignorat (fara text): remoteJid=${msg.key.remoteJid} tipuri=${Object.keys(msg.message || {}).join(',')}`); + continue; + } messageQueue.push({ from: msg.key.remoteJid, @@ -131,6 +151,7 @@ app.get('/status', (_req, res) => { connected, phone: phoneNumber, selfChatOnly: TEST_MODE_SELF_CHAT_ONLY, + lid: ownLid, qr: connected ? null : currentQR, }); });