group-out mearged with Chats-out

This commit is contained in:
rawee 2023-02-17 02:19:20 +05:30
parent 3e5fe7984d
commit e60da7078a
5 changed files with 48 additions and 24 deletions

View File

@ -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. 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- MultiMedia Message: Requirments-
| Input | Description | | Input | Description |

View File

@ -17,6 +17,7 @@ module.exports = function(RED) {
if (waEvent ==='message'){ if (waEvent ==='message'){
node.waClient.on(waEvent, async message => { node.waClient.on(waEvent, async message => {
let msg = {}; let msg = {};
msg.event = waEvent;
msg.payload = message.body|| null; msg.payload = message.body|| null;
msg.from = message.author || message.from ; msg.from = message.author || message.from ;
msg.chatID = message.from.replace(/\D/g, ''); msg.chatID = message.from.replace(/\D/g, '');
@ -26,7 +27,10 @@ module.exports = function(RED) {
}); });
} else { } else {
node.waClient.on(waEvent, async message => { node.waClient.on(waEvent, async message => {
node.send(message); msg = {};
msg.event = waEvent;
msg.message = message
node.send(msg);
}); });
}; };
}) })
@ -63,6 +67,7 @@ module.exports = function(RED) {
if (waEvent ==='messages.upsert'){ if (waEvent ==='messages.upsert'){
client.ev.on('messages.upsert', msgs =>{ client.ev.on('messages.upsert', msgs =>{
msgs.messages.forEach(async msg =>{ msgs.messages.forEach(async msg =>{
msg.event = waEvent;
msg.payload = msg.message?.conversation; msg.payload = msg.message?.conversation;
msg.from = msg.key.participant || msg.key.remoteJid; msg.from = msg.key.participant || msg.key.remoteJid;
msg.from = msg.from.replace(/\D/g, '') || msg.from; msg.from = msg.from.replace(/\D/g, '') || msg.from;
@ -73,9 +78,9 @@ module.exports = function(RED) {
} }
else { else {
client.ev.on(waEvent, msgs =>{ client.ev.on(waEvent, msgs =>{
msgs.event = waEvent;
node.send(msgs) node.send(msgs)
}); });
}; };
}) })

View File

@ -12,22 +12,35 @@ module.exports = function(RED) {
}; };
const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); 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 = typeof numb ==='number' ? numb : numb.replace(/\D/g, '');
numb = `${numb}@c.us`; // numb = `${numb}@c.us`;
return numb 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 = typeof numb ==='number' ? numb : numb.replace(/\D/g, '');
numb = `${numb}@s.whatsapp.net` const [result] = await (await node.waClient).onWhatsApp(numb)
return numb if (result?.exists){
console.log(result.exists)
return result.jid
}
return numb = `${numb}@g.us`;
} }
async function whatsappMessage(numb , inputMessage){ async function whatsappMessage(numb , inputMessage){
if (node.waClient.clientType === "waWebClient"){ if (node.waClient.clientType === "waWebClient"){
try { try {
numb = webNubmerSeteing(numb); numb = await webNubmerSeteing(numb);
if(typeof inputMessage === "object"){ if(typeof inputMessage === "object"){
inputMessage = new Buttons(inputMessage.text, inputMessage.buttons, "text" ,inputMessage.footer); inputMessage = new Buttons(inputMessage.text, inputMessage.buttons, "text" ,inputMessage.footer);
node.waClient.sendMessage(numb, inputMessage); node.waClient.sendMessage(numb, inputMessage);
@ -41,7 +54,7 @@ module.exports = function(RED) {
else if (node.waClient.clientType === "waSocketClient"){ else if (node.waClient.clientType === "waSocketClient"){
try { try {
let client = await node.waClient; let client = await node.waClient;
numb = socNubmerSeteing(numb) numb = await socNubmerSeteing(numb)
if (typeof inputMessage ==="string"){ if (typeof inputMessage ==="string"){
inputMessage = {text : inputMessage}; inputMessage = {text : inputMessage};
} }
@ -64,12 +77,12 @@ module.exports = function(RED) {
var whatsappImageBase64 = whatsappImage.split(',')[1] || whatsappImage; var whatsappImageBase64 = whatsappImage.split(',')[1] || whatsappImage;
try { try {
if (node.waClient.clientType === "waWebClient"){ if (node.waClient.clientType === "waWebClient"){
numb = webNubmerSeteing(node.number) numb = await webNubmerSeteing(node.number)
var myMessage = new MessageMedia('image/png', whatsappImageBase64, null, null); var myMessage = new MessageMedia('image/png', whatsappImageBase64, null, null);
node.waClient.sendMessage(numb, myMessage, {caption : whatsappCaption || "Image from Node-Red"}); node.waClient.sendMessage(numb, myMessage, {caption : whatsappCaption || "Image from Node-Red"});
} }
else { else {
numb = socNubmerSeteing(node.number) numb = await socNubmerSeteing(node.number)
const imageMessage = { const imageMessage = {
text: whatsappCaption, text: whatsappCaption,
footer: null, footer: null,
@ -109,7 +122,10 @@ module.exports = function(RED) {
delay(2000) delay(2000)
} }
} }
} else { } else if(message.key.remoteJid){
whatsappMessage(message.key, message.payload)
}
else {
SetStatus("No number","red"); SetStatus("No number","red");
setTimeout(()=>{ setTimeout(()=>{
SetStatus('Connected','green'); SetStatus('Connected','green');

View File

@ -1,6 +1,6 @@
{ {
"name": "node-red-contrib-whatsapp-link", "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", "description": "Node to send and receive whatsapp messages in groups and chats. | No third party APIs",
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -127,7 +127,7 @@ Participants : ${chat.groupMetadata.size}`
// const loggerFile = pino.destination(whatsappLinkDirSocketLogs); // const loggerFile = pino.destination(whatsappLinkDirSocketLogs);
const socketClient = makeWASocket.default({ const socketClient = makeWASocket.default({
printQRInTerminal: false, printQRInTerminal: false,
logger:pino({level: "fatal"}), logger:pino({level: "silent"}),
auth : state, auth : state,
browser: ["Node-RED", "Chrome", "4.0.0"], browser: ["Node-RED", "Chrome", "4.0.0"],
markOnlineOnConnect: true, markOnlineOnConnect: true,
@ -152,7 +152,9 @@ 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) => { socketClient.ev.on('connection.update', (update) => {
const { connection, lastDisconnect } = update const { connection, lastDisconnect } = update
@ -198,7 +200,8 @@ Participants : ${chat.groupMetadata.size}`
clearInterval(WAnode.connectionSetupID); clearInterval(WAnode.connectionSetupID);
WAnode.client.WAClose(); WAnode.client.WAClose();
} else { } else {
WAnode.client.end() // WAnode.client.removeAllListeners();
WAnode.client.end();
} }
} }