diff --git a/wai-server/core/baileys/index.js b/wai-server/core/baileys/index.js index 46eb6fe..28b9ec8 100644 --- a/wai-server/core/baileys/index.js +++ b/wai-server/core/baileys/index.js @@ -9,6 +9,8 @@ const { downloadMediaMessage, isJidUser } = require('@whiskeysockets/baileys'); +const fs = require('fs'); +const path = require('path'); const { writeFile } = require('fs/promises'); const waEmitter = require('../emitter'); const serverConfig = require('../../config').server; @@ -27,14 +29,16 @@ const createWhatsApp = async phone => { const logger = P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }, P.destination('./logs/wa-logs-' + phone + '_' + channelId + '.txt')); logger.level = 'trace'; const msgRetryCounterCache = new NodeCache(); - const storeFilename = './baileys_auth_info/baileys_store_' + phone + '_' + channelId + '.json' + const storeFilename = './baileys_auth_info/baileys_store_' + phone + '.json' const store = makeInMemoryStore({ logger }); store?.readFromFile(storeFilename); // save every 10s setInterval(() => { store?.writeToFile(storeFilename); }, 10_000); - const { state, saveCreds } = await useMultiFileAuthState('./baileys_auth_info/' + phone); + + const authStateFolder = './baileys_auth_info/' + phone; + const { state, saveCreds } = await useMultiFileAuthState(authStateFolder); // fetch latest version of WA Web const { version, isLatest } = await fetchLatestBaileysVersion(); const waVersion = version.join('.') + ', ' + (isLatest ? 'latest' : 'out'); @@ -185,6 +189,7 @@ const createWhatsApp = async phone => { const handleCredsUpdate = async () => { await saveCreds(); } + const start = () => { const waSocket = makeWASocket({ @@ -208,11 +213,11 @@ const createWhatsApp = async phone => { store?.bind(waSocket.ev); - const sendTextMessageHandler = (event) => { - const { to: number, externalId, content } = event; + const sendMessageHandler = (event) => { + const { to: number, externalId, ...content } = event; const jid = encodeJid(number); waSocket.sendMessage( - jid, { text: content } + jid, content ).then(msg => { externalIdCache.set(msg.key.id, externalId) }).catch(ex => { @@ -223,7 +228,8 @@ const createWhatsApp = async phone => { direction: 'outbound', from: whatsAppNo, to: number, - error: `发送文本消息出错 ` + ex, + error: `发送消息出错 ` + ex, + whatsAppNo, eventSource: serverConfig.name + '.sendMessage.catch', updateTime: formatTimestamp(new Date().getTime() / 1000), }); @@ -235,10 +241,17 @@ const createWhatsApp = async phone => { const { connection, lastDisconnect, qr } = update; if (connection === 'close') { - waEmitter.off('request.' + whatsAppNo + '.send.text', sendTextMessageHandler); + waEmitter.off('request.' + whatsAppNo + '.send.message', sendMessageHandler); if((lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut) { start(); } else { + // logout 异步删除验证目录 + fs.rm(authStateFolder, { recursive: true, force: true }, (err) => { + if (err) { + return console.error(`Error deleting directory: ${err.message}`); + } + console.log('Directory deleted successfully: ', authStateFolder); + }); waEmitter.emit('connection:close', { whatsAppNo, channelId, eventSource: serverConfig.name + '.connection.update.close', @@ -251,51 +264,7 @@ const createWhatsApp = async phone => { eventSource: serverConfig.name + '.connection.update.open', }); - waEmitter.on('request.' + whatsAppNo + '.send.text', sendTextMessageHandler); - // 考虑迁移到 connection.update 事件之外,测试看是否能发送消息? - // waEmitter.on('request.' + whatsAppNo + '.send.text', event => { - // const { to: number, externalId, content } = event; - // const jid = encodeJid(number); - // waSocket.sendMessage( - // jid, { text: content } - // ).then(msg => { - // externalIdCache.set(msg.key.id, externalId) - // }).catch(ex => { - // waEmitter.emit('message:updated', { - // id: generateId(), - // externalId, - // status: 'failed', - // direction: 'outbound', - // from: whatsAppNo, - // to: number, - // error: `发送文本消息出错 ` + ex, - // eventSource: serverConfig.name + '.sendMessage.catch', - // updateTime: formatTimestamp(new Date().getTime() / 1000), - // }); - // }); - // }); - - waEmitter.on('request.' + whatsAppNo + '.send.image', event => { - const {to: number, externalId, imageUrl} = event; - const jid = encodeJid(number); - waSocket.sendMessage( - jid, {image: { url: imageUrl }} - ).then(msg => { - externalIdCache.set(msg.key.id, externalId); - }).catch(ex => { - waEmitter.emit('message:updated', { - id: generateId(), - externalId, - status: 'failed', - direction: 'outbound', - from: whatsAppNo, - to: number, - error: `发送图片消息出错 ` + ex, - eventSource: serverConfig.name + '.sendMessage.catch', - updateTime: formatTimestamp(new Date().getTime() / 1000), - }); - }); - }); + waEmitter.on('request.' + whatsAppNo + '.send.text', sendMessageHandler); } else if (qr !== undefined) { // WebSocket 创建成功等待扫码,如果没有扫码会更新 qr // 第一次一分钟,后面是 20 秒更新一次