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..a8ffda6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -19,25 +19,68 @@ 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 || + ''; + + // 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 || + ''; + + // 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 || + extendedTextMessage || + imageTextMessage || + videoTextMessage || + documentTextMessage || + viewOnceTextMessage || + quotedTextMessage; + + // 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'),