From 2bfd4896dac6989551ac34a1fda762199e81929e Mon Sep 17 00:00:00 2001 From: LiaoYijun Date: Tue, 24 Dec 2024 09:17:28 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20baileys=5Fauth=5Finfo=20=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E7=9B=AE=E5=BD=95=EF=BC=9B=E7=BE=A4=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20participant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wai-server/.gitignore | 2 + wai-server/api/channels/channel.controller.js | 6 -- wai-server/core/baileys/index.js | 61 +++++++++---------- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/wai-server/.gitignore b/wai-server/.gitignore index 9db2983..9f2fc15 100644 --- a/wai-server/.gitignore +++ b/wai-server/.gitignore @@ -37,3 +37,5 @@ wa-logs.txt baileys_store_multi.json baileys_auth_info_*/ + +baileys_auth_info/ diff --git a/wai-server/api/channels/channel.controller.js b/wai-server/api/channels/channel.controller.js index f07a5ae..01e261b 100644 --- a/wai-server/api/channels/channel.controller.js +++ b/wai-server/api/channels/channel.controller.js @@ -9,12 +9,6 @@ exports.newConnect = async ctx => { try { const { phone } = ctx.query; const whatsApp1 = await createWhatsApp(phone); - // console.info(whatsApp1); - whatsApp1.on('connection.open', async sock => { - console.info('收到:connection.open'); - // await sock.sendMessage('8617607730395' + '@s.whatsapp.net', { text: '收到事件,发送消息' }); - await whatsApp1.sendTextMessage('8617607730395', '收到事件,发送消息'); - }); const qr = await whatsApp1.start(); waInstance.wa = whatsApp1; ctx.assert(whatsApp1, 503, 'No available connections'); diff --git a/wai-server/core/baileys/index.js b/wai-server/core/baileys/index.js index 9aa437b..63fefab 100644 --- a/wai-server/core/baileys/index.js +++ b/wai-server/core/baileys/index.js @@ -35,13 +35,15 @@ setInterval(() => { const createWhatsApp = async (phone) => { const channelId = generateId() const whatsAppNo = phone - const { state, saveCreds } = await useMultiFileAuthState('baileys_auth_info_' + phone + '_' + channelId) + const { state, saveCreds } = await useMultiFileAuthState('baileys_auth_info/' + phone + '_' + channelId) // fetch latest version of WA Web const { version, isLatest } = await fetchLatestBaileysVersion() const waVersion = version.join('.') + ', ' + (isLatest ? 'latest' : 'out') - // const waEmitter = new EventEmitter(); const formatPhoneNumber = (number) => { + + if (number === null || number === undefined) return '' + if (number.indexOf('@g.us') > -1) { return number } else if (number.indexOf('@broadcast') > -1) { @@ -52,6 +54,9 @@ const createWhatsApp = async (phone) => { } const parsePhoneNumber = (number) => { + + if (number === null || number === undefined) return '' + if (number.indexOf('@s.whatsapp.net') > -1) { return number.split('@')[0] } else { @@ -59,9 +64,24 @@ const createWhatsApp = async (phone) => { } } - const on = (eventName, listener) => { - waEmitter.on(eventName, listener); - } + // status: sent read delivered failed + // 2 sent, 3 delivered, 4 read, 0 error + // Time: 2008-07-07 15:37:07 + + const formatStatus = (number) => { + if (number === 2) return 'sent' + else if (number === 3) return 'delivered' + else if (number === 4) return 'read' + else if (number === 0) return 'error' + else return 'played' + } + const formatTimestamp = (timestamp) => { + if (timestamp === null) return '' + + const datetime = new Date(timestamp * 1000) + + return datetime.getFullYear() + '-' + (datetime.getMonth() + 1) + '-' + datetime.getDay() + ' ' + datetime.getHours() + ':' + datetime.getMinutes() + ':' + datetime.getSeconds() + } const sendTextMessage = (whatsAppNo, content) => { const number = formatPhoneNumber(whatsAppNo) @@ -158,25 +178,6 @@ const createWhatsApp = async (phone) => { sendTextMessage('120363335516526642@g.us', '这是群消息:' + new Date().toString()) } - // status: sent read delivered failed - // 2 sent, 3 delivered, 4 read, 0 error - // Time: 2008-07-07 15:37:07 - - const formatStatus = (number) => { - if (number === 2) return 'sent' - else if (number === 3) return 'delivered' - else if (number === 4) return 'read' - else if (number === 0) return 'error' - else return 'played' - } - const formatTimestamp = (timestamp) => { - if (timestamp === null) return '' - - const datetime = new Date(msg.messageTimestamp * 1000) - - return datetime.getFullYear() + '-' + (datetime.getMonth() + 1) + '-' + datetime.getDay() + ' ' + datetime.getHours() + ':' + datetime.getMinutes() + ':' + datetime.getSeconds() - } - if (msg.key.fromMe) { waEmitter.emit('message:updated', { "id": msg.key.id, @@ -188,9 +189,8 @@ const createWhatsApp = async (phone) => { "text": { "body": text }, - conversation: { - id: msg.key.participant, - type: '不区分', + participant: { + id: parsePhoneNumber(msg.key.participant), name: msg.pushName }, "createTime": formatTimestamp(msg.messageTimestamp), @@ -210,9 +210,8 @@ const createWhatsApp = async (phone) => { "text": { "body": text }, - conversation: { - id: msg.key.participant, - type: '不区分', + participant: { + id: parsePhoneNumber(msg.key.participant), name: msg.pushName }, "createTime": formatTimestamp(msg.messageTimestamp), @@ -250,7 +249,7 @@ const createWhatsApp = async (phone) => { version: waVersion, channelId : channelId, phone: phone, - start, on,sendTextMessage,sendImageMessage + start, sendTextMessage, sendImageMessage } }