diff --git a/src/Connection/messages.ts b/src/Connection/messages.ts index aff4cb9..27db7b6 100644 --- a/src/Connection/messages.ts +++ b/src/Connection/messages.ts @@ -2,7 +2,7 @@ import BinaryNode from "../BinaryNode"; import { Boom } from '@hapi/boom' import { EventEmitter } from 'events' import { Chat, Presence, WAMessageCursor, SocketConfig, WAMessage, WAMessageKey, ParticipantAction, WAMessageProto, WAMessageStatus, WAMessageStubType, GroupMetadata, AnyMessageContent, MiscMessageGenerationOptions, WAFlag, WAMetric, WAUrlInfo, MediaConnInfo, MessageUpdateType, MessageInfo, MessageInfoUpdate, WAMediaUploadFunction, MediaType, WAMessageUpdate } from "../Types"; -import { isGroupID, toNumber, whatsappID, generateWAMessage, decryptMediaMessageBuffer } from "../Utils"; +import { isGroupID, toNumber, whatsappID, generateWAMessage, decryptMediaMessageBuffer, extractMessageContent } from "../Utils"; import makeChatsSocket from "./chats"; import { DEFAULT_ORIGIN, MEDIA_PATH_MAP, WA_DEFAULT_EPHEMERAL } from "../Defaults"; import got from "got"; @@ -444,7 +444,7 @@ const makeMessagesSocket = (config: SocketConfig) => { downloadMediaMessage: async(message: WAMessage, type: 'buffer' | 'stream' = 'buffer') => { const downloadMediaMessage = async () => { - let mContent = message.message?.ephemeralMessage?.message || message.message + let mContent = extractMessageContent(message.message) if (!mContent) throw new Boom('No message present', { statusCode: 400, data: message }) const stream = await decryptMediaMessageBuffer(mContent) diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 958d8f2..1f0f9f7 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -336,4 +336,30 @@ export const generateWAMessage = async( ), options ) -) \ No newline at end of file +) + +/** + * Extract the true message content from a message + * Eg. extracts the inner message from a disappearing message/view once message + */ +export const extractMessageContent = (content: WAMessageContent | undefined | null): WAMessageContent | undefined => { + if(content?.buttonsMessage) { + const { buttonsMessage } = content + if(buttonsMessage.imageMessage) { + return { imageMessage: buttonsMessage.imageMessage } + } else if(buttonsMessage.documentMessage) { + return { documentMessage: buttonsMessage.documentMessage } + } else if(buttonsMessage.videoMessage) { + return { videoMessage: buttonsMessage.videoMessage } + } else if(buttonsMessage.locationMessage) { + return { locationMessage: buttonsMessage.locationMessage } + } else { + return { conversation: buttonsMessage.contentText } + } + } else { + return content?.ephemeralMessage?.message || + content?.viewOnceMessage?.message || + content || + undefined + } + } \ No newline at end of file