From f9a5f2141fa90a56b8f0cbee87b18db04ab0b53a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Sep 2025 00:09:58 +0000 Subject: [PATCH 1/3] Initial plan From 80f867575fe6458dd1f9b48b0cf25da54a6c0286 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Sep 2025 00:17:08 +0000 Subject: [PATCH 2/3] Improve message text extraction to handle more WhatsApp message types Co-authored-by: Polabiel <40695127+Polabiel@users.noreply.github.com> --- src/configuration/general.ts | 3 +- src/utils/index.ts | 66 +++++++++++++++++++++++++++++------- 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/configuration/general.ts b/src/configuration/general.ts index 4ef9cb7..8ecc1d1 100644 --- a/src/configuration/general.ts +++ b/src/configuration/general.ts @@ -66,7 +66,8 @@ export const general: GeneralConfig = { PREFIX_EMOJI: "🤖", COMMANDS_DIR: getCommandsDir(), TEMP_DIR: ensureDirectoryExists(path.join(projectRoot, "assets", "temp")), - CACHE_DIR: ensureDirectoryExists(path.join(projectRoot, "cache")), TIMEOUT_IN_MILLISECONDS_BY_EVENT: 15000, + CACHE_DIR: ensureDirectoryExists(path.join(projectRoot, "cache")), + TIMEOUT_IN_MILLISECONDS_BY_EVENT: 15000, NUMBERS_HOSTS: process.env.NUMBER_HOST ? JSON.parse(process.env.NUMBER_HOST.replace(/'/g, '"')) : [], NUMBER_BOT: process.env.NUMBER_BOT ? `${process.env.NUMBER_BOT}@s.whatsapp.net` : "", OPENAI_API_KEY: process.env.OPENAI_API_KEY, diff --git a/src/utils/index.ts b/src/utils/index.ts index 0aaca02..9b7db6f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -19,25 +19,67 @@ import { logger } from './logger'; let commandCache: ICommandImports | null = null; export function extractDataFromMessage(baileysMessage: proto.IWebMessageInfo) { + // Extract text from various message types with more robust handling const textMessage: string = - baileysMessage.message?.conversation! ?? - baileysMessage.message?.ephemeralMessage?.message?.conversation!; + baileysMessage.message?.conversation || + baileysMessage.message?.ephemeralMessage?.message?.conversation || + ''; + const extendedTextMessage: string = - baileysMessage.message?.extendedTextMessage?.text! ?? - baileysMessage.message?.ephemeralMessage?.message?.extendedTextMessage - ?.text!; + baileysMessage.message?.extendedTextMessage?.text || + baileysMessage.message?.ephemeralMessage?.message?.extendedTextMessage?.text || + ''; + const imageTextMessage: string = - baileysMessage.message?.imageMessage?.caption! ?? - baileysMessage.message?.ephemeralMessage?.message?.videoMessage?.caption!; + baileysMessage.message?.imageMessage?.caption || + baileysMessage.message?.ephemeralMessage?.message?.imageMessage?.caption || + ''; + const videoTextMessage: string = - baileysMessage.message?.videoMessage?.caption! ?? - baileysMessage.message?.ephemeralMessage?.message?.imageMessage?.caption!; - - const fullMessage = - textMessage || extendedTextMessage || imageTextMessage || videoTextMessage; + baileysMessage.message?.videoMessage?.caption || + baileysMessage.message?.ephemeralMessage?.message?.videoMessage?.caption || + ''; + + // Handle additional message types that might contain commands + const documentTextMessage: string = + baileysMessage.message?.documentMessage?.caption || + baileysMessage.message?.ephemeralMessage?.message?.documentMessage?.caption || + ''; + + const audioTextMessage: string = + baileysMessage.message?.audioMessage?.caption || + baileysMessage.message?.ephemeralMessage?.message?.audioMessage?.caption || + ''; + + // Handle viewOnce messages + const viewOnceTextMessage: string = + baileysMessage.message?.viewOnceMessage?.message?.imageMessage?.caption || + baileysMessage.message?.viewOnceMessage?.message?.videoMessage?.caption || + baileysMessage.message?.viewOnceMessageV2?.message?.imageMessage?.caption || + baileysMessage.message?.viewOnceMessageV2?.message?.videoMessage?.caption || + ''; + + // Combine all possible text sources + const fullMessage = textMessage || + extendedTextMessage || + imageTextMessage || + videoTextMessage || + documentTextMessage || + audioTextMessage || + viewOnceTextMessage; + + // Debug logging for message extraction issues + if (!fullMessage && baileysMessage.message) { + logger.debug('Message extraction failed for message type:', { + messageKeys: Object.keys(baileysMessage.message), + remoteJid: baileysMessage?.key?.remoteJid, + messageId: baileysMessage?.key?.id + }); + } if (!fullMessage) { return { + fullMessage: '', remoteJid: baileysMessage?.key?.remoteJid, prefix: '', isGroup: baileysMessage?.key?.remoteJid?.endsWith('@g.us'), From b45bfe360995ee44df024aaaea4a6261e8cfd4d2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Sep 2025 00:19:32 +0000 Subject: [PATCH 3/3] Add support for quoted messages and finalize message extraction improvements Co-authored-by: Polabiel <40695127+Polabiel@users.noreply.github.com> --- src/utils/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/utils/index.ts b/src/utils/index.ts index 9b7db6f..a8ffda6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -46,11 +46,6 @@ export function extractDataFromMessage(baileysMessage: proto.IWebMessageInfo) { baileysMessage.message?.ephemeralMessage?.message?.documentMessage?.caption || ''; - const audioTextMessage: string = - baileysMessage.message?.audioMessage?.caption || - baileysMessage.message?.ephemeralMessage?.message?.audioMessage?.caption || - ''; - // Handle viewOnce messages const viewOnceTextMessage: string = baileysMessage.message?.viewOnceMessage?.message?.imageMessage?.caption || @@ -58,6 +53,12 @@ export function extractDataFromMessage(baileysMessage: proto.IWebMessageInfo) { baileysMessage.message?.viewOnceMessageV2?.message?.imageMessage?.caption || baileysMessage.message?.viewOnceMessageV2?.message?.videoMessage?.caption || ''; + + // Handle quoted messages - messages that are replies might contain commands + const quotedTextMessage: string = + baileysMessage.message?.extendedTextMessage?.contextInfo?.quotedMessage?.conversation || + baileysMessage.message?.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.text || + ''; // Combine all possible text sources const fullMessage = textMessage || @@ -65,8 +66,8 @@ export function extractDataFromMessage(baileysMessage: proto.IWebMessageInfo) { imageTextMessage || videoTextMessage || documentTextMessage || - audioTextMessage || - viewOnceTextMessage; + viewOnceTextMessage || + quotedTextMessage; // Debug logging for message extraction issues if (!fullMessage && baileysMessage.message) {