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.
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 |

View File

@ -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)
});
};
})

View File

@ -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');

View File

@ -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",

View File

@ -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();
}
}