diff --git a/wai-server/core/baileys/helper.js b/wai-server/core/baileys/helper.js index 58b6fed..e7ba004 100644 --- a/wai-server/core/baileys/helper.js +++ b/wai-server/core/baileys/helper.js @@ -67,7 +67,7 @@ const getFileExtension = mimeType => { case 'image/webp': return '.webp'; default: - return 'unknown'; + return '-unknown'; } } diff --git a/wai-server/core/baileys/index.js b/wai-server/core/baileys/index.js index 96caaf0..b280912 100644 --- a/wai-server/core/baileys/index.js +++ b/wai-server/core/baileys/index.js @@ -91,7 +91,7 @@ const createWhatsApp = async phone => { store?.bind(waSocket.ev); const parseTextMessage = original => { - const text = original.message?.conversation || original.message?.extendedTextMessage?.text; + const text = original.message?.conversation; return { type: 'text', text: { @@ -100,6 +100,35 @@ const createWhatsApp = async phone => { }; }; + const parseExtendedTextMessage = original => { + const text = original.message?.extendedTextMessage?.text; + return { + type: 'text', + text: { + body: text, + }, + }; + }; + + const parseReactionMessage = original => { + const text = original.message?.reactionMessage?.text; + return { + type: 'text', + text: { + body: text, + }, + }; + }; + + const parseEditedMessage = original => { + const text = original.message?.protocolMessage?.editedMessage?.conversation; + return { + type: 'text', + text: { + body: text, + }, + }; + }; const parseImageMessage = async original => { const imageMessage = original.message.imageMessage; @@ -122,6 +151,26 @@ const createWhatsApp = async phone => { }; }; + const parseDocumentMessage = async original => { + const documentMessage = original.message.documentMessage; + const imageBuffer = await downloadMediaMessage( + original, 'buffer', {}, { logger, reuploadRequest: waSocket.updateMediaMessage, }, + ); + const imageFilename = './temp/doc_' + whatsAppNo + '_' + original.key.id + '_' + documentMessage.fileName; + await writeFile(imageFilename, imageBuffer); + + return { + type: 'document', + document: { + mimetype: documentMessage.mimetype, + sha256: uint8ArrayToBase64(documentMessage.fileSha256), + caption: documentMessage.caption, + filePath: imageFilename, + link_original: documentMessage.url, + }, + }; + }; + const parseTemplateMessage = original => { if (original.message.templateMessage.hydratedTemplate) { const text = original.message.templateMessage?.hydratedTemplate?.hydratedContentText; @@ -144,30 +193,32 @@ const createWhatsApp = async phone => { const getMessageParser = (original) => { - const contentType = getContentType(original); - // ... + const messageType = getContentType(original.message) + console.info('messageType: ', messageType) + + if (original.message?.conversation) return parseTextMessage; - if (original.message?.conversation || original.message?.extendedTextMessage?.text) return parseTextMessage; + if (original.message?.extendedTextMessage) return parseExtendedTextMessage; + + if (original.message?.reactionMessage) return parseReactionMessage; + + if (original.message?.protocolMessage?.editedMessage) return parseEditedMessage; if (original.message?.imageMessage) return parseImageMessage; + // if (original.message?.documentMessage) return parseDocumentMessage; + if (original.message?.templateMessage) return parseTemplateMessage; return null; }; - const getEventSource = (upsert) => { + const getUpsertSource = (upsert) => { // source = prefix + infix + suffix // prefix: server.name // infix: upsert/update // suffix: notify/append... - if (upsert.type === 'notify') { - return serverConfig.name + '.messages.upsert.notify'; - } else if (upsert.type === 'append') { - return serverConfig.name + '.messages.upsert.append'; - } else { - return serverConfig.name + '.messages.upsert.unknown'; - } + return serverConfig.name + '.messages.upsert.' + upsert.type; }; const handleMessagesUpsert = async upsert => { @@ -204,7 +255,7 @@ const createWhatsApp = async phone => { } const emitEventName = msg.key.fromMe ? 'message:updated' : 'message:received'; - const msgEventSource = getEventSource(upsert); + const msgEventSource = getUpsertSource(upsert); const msgDirection = msg.key.fromMe ? 'outbound' : 'inbound'; const msgFrom = msg.key.fromMe ? whatsAppNo : remoteNo; const msgTo = msg.key.fromMe ? remoteNo : whatsAppNo; @@ -236,6 +287,7 @@ const createWhatsApp = async phone => { if (messageParser) { const parsedMessage = await messageParser(msg); const mergedMessage = Object.assign({}, standardMessage, parsedMessage); + console.info('mergedMessage: ', mergedMessage); waEmitter.emit(emitEventName, mergedMessage); } else { console.info('不支持该消息类型:', msg); @@ -357,6 +409,7 @@ const createWhatsApp = async phone => { // 第一次一分钟,后面是 20 秒更新一次 if (qrCode === null) { qrCode = qr; + console.info('qrCode:', qrCode) waEmitter.emit('creds:update', { id: generateId(), qr, whatsAppNo,