From e60da7078a2c8b32461b82658994a87a2ee3e841 Mon Sep 17 00:00:00 2001 From: rawee Date: Fri, 17 Feb 2023 02:19:20 +0530 Subject: [PATCH] group-out mearged with Chats-out --- README.md | 2 +- chats-in.js | 19 ++++++++++++------- chats-out.js | 38 +++++++++++++++++++++++++++----------- package.json | 2 +- whatsappLink.js | 11 +++++++---- 5 files changed, 48 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 80ddf07..494c4fc 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Admin Node generate QR Code just below the node for easy connection with whatsap Their are many other events options avilable along with `message` event in Chats-In Node. For details refer documentation for Chats-In Node. -3. **Chats Out** : As simple as mention on name, node will send `msg.payload` recived at input to the number mentioned in node. +3. **Chats / Group Out** : As simple as mention on name, node will send `msg.payload` recived at input to the number mentioned in node. MultiMedia Message: Requirments- | Input | Description | diff --git a/chats-in.js b/chats-in.js index 24b0dd4..c3fd660 100644 --- a/chats-in.js +++ b/chats-in.js @@ -17,6 +17,7 @@ module.exports = function(RED) { if (waEvent ==='message'){ node.waClient.on(waEvent, async message => { let msg = {}; + msg.event = waEvent; msg.payload = message.body|| null; msg.from = message.author || message.from ; msg.chatID = message.from.replace(/\D/g, ''); @@ -26,7 +27,10 @@ module.exports = function(RED) { }); } else { node.waClient.on(waEvent, async message => { - node.send(message); + msg = {}; + msg.event = waEvent; + msg.message = message + node.send(msg); }); }; }) @@ -63,19 +67,20 @@ module.exports = function(RED) { if (waEvent ==='messages.upsert'){ client.ev.on('messages.upsert', msgs =>{ msgs.messages.forEach(async msg =>{ - msg.payload = msg.message?.conversation; - msg.from = msg.key.participant || msg.key.remoteJid; - msg.from = msg.from.replace(/\D/g, '') || msg.from; - msg.chatID = msg.key.remoteJid.replace(/\D/g, '') || msg.key.remoteJid ; - node.send(msg) + msg.event = waEvent; + msg.payload = msg.message?.conversation; + msg.from = msg.key.participant || msg.key.remoteJid; + msg.from = msg.from.replace(/\D/g, '') || msg.from; + msg.chatID = msg.key.remoteJid.replace(/\D/g, '') || msg.key.remoteJid ; + node.send(msg) }) }); } else { client.ev.on(waEvent, msgs =>{ + msgs.event = waEvent; node.send(msgs) }); - }; }) diff --git a/chats-out.js b/chats-out.js index 96e0fce..0abbcef 100644 --- a/chats-out.js +++ b/chats-out.js @@ -12,22 +12,35 @@ module.exports = function(RED) { }; const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); - function webNubmerSeteing(numb){ + async function webNubmerSeteing(numb){ numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); - numb = `${numb}@c.us`; - return numb + // numb = `${numb}@c.us`; + var numbID = await node.waClient.getNumberId(numb); + if(numbID) { + return `${numbID.user}@${numbID.server}`; + } else { + return `${numb}@g.us` + } + // return numb } - function socNubmerSeteing(numb){ + async function socNubmerSeteing(numb){ + if (numb.remoteJid){ + return numb.remoteJid; + } numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); - numb = `${numb}@s.whatsapp.net` - return numb + const [result] = await (await node.waClient).onWhatsApp(numb) + if (result?.exists){ + console.log(result.exists) + return result.jid + } + return numb = `${numb}@g.us`; } async function whatsappMessage(numb , inputMessage){ if (node.waClient.clientType === "waWebClient"){ try { - numb = webNubmerSeteing(numb); + numb = await webNubmerSeteing(numb); if(typeof inputMessage === "object"){ inputMessage = new Buttons(inputMessage.text, inputMessage.buttons, "text" ,inputMessage.footer); node.waClient.sendMessage(numb, inputMessage); @@ -41,7 +54,7 @@ module.exports = function(RED) { else if (node.waClient.clientType === "waSocketClient"){ try { let client = await node.waClient; - numb = socNubmerSeteing(numb) + numb = await socNubmerSeteing(numb) if (typeof inputMessage ==="string"){ inputMessage = {text : inputMessage}; } @@ -64,12 +77,12 @@ module.exports = function(RED) { var whatsappImageBase64 = whatsappImage.split(',')[1] || whatsappImage; try { if (node.waClient.clientType === "waWebClient"){ - numb = webNubmerSeteing(node.number) + numb = await webNubmerSeteing(node.number) var myMessage = new MessageMedia('image/png', whatsappImageBase64, null, null); node.waClient.sendMessage(numb, myMessage, {caption : whatsappCaption || "Image from Node-Red"}); } else { - numb = socNubmerSeteing(node.number) + numb = await socNubmerSeteing(node.number) const imageMessage = { text: whatsappCaption, footer: null, @@ -109,7 +122,10 @@ module.exports = function(RED) { delay(2000) } } - } else { + } else if(message.key.remoteJid){ + whatsappMessage(message.key, message.payload) + } + else { SetStatus("No number","red"); setTimeout(()=>{ SetStatus('Connected','green'); diff --git a/package.json b/package.json index 1618e7b..bf9ab95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-whatsapp-link", - "version": "0.1.34", + "version": "0.1.35", "description": "Node to send and receive whatsapp messages in groups and chats. | No third party APIs", "repository": { "type": "git", diff --git a/whatsappLink.js b/whatsappLink.js index cc4c6f2..a3f7285 100644 --- a/whatsappLink.js +++ b/whatsappLink.js @@ -127,7 +127,7 @@ Participants : ${chat.groupMetadata.size}` // const loggerFile = pino.destination(whatsappLinkDirSocketLogs); const socketClient = makeWASocket.default({ printQRInTerminal: false, - logger:pino({level: "fatal"}), + logger:pino({level: "silent"}), auth : state, browser: ["Node-RED", "Chrome", "4.0.0"], markOnlineOnConnect: true, @@ -152,8 +152,10 @@ Participants : ${chat.groupMetadata.size}` }, }) - socketClient.ev.on('creds.update', saveCreds) - + socketClient.ev.on('creds.update', saveCreds); + console.log(socketClient) + // socketClient.setMaxListeners(0); + socketClient.ev.on('connection.update', (update) => { const { connection, lastDisconnect } = update if (connection === 'close') { @@ -198,7 +200,8 @@ Participants : ${chat.groupMetadata.size}` clearInterval(WAnode.connectionSetupID); WAnode.client.WAClose(); } else { - WAnode.client.end() + // WAnode.client.removeAllListeners(); + WAnode.client.end(); } }