From 9f3b00d58d4f6b1527db42069acafff01123cbf8 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Thu, 4 Aug 2022 11:13:00 +0530 Subject: [PATCH] fix: temp patch for button/list messages --- src/Socket/messages-send.ts | 3 ++- src/Utils/messages.ts | 38 +++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 67a7f04..7dbaa26 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -4,7 +4,7 @@ import NodeCache from 'node-cache' import { proto } from '../../WAProto' import { WA_DEFAULT_EPHEMERAL } from '../Defaults' import { AnyMessageContent, MediaConnInfo, MessageReceiptType, MessageRelayOptions, MiscMessageGenerationOptions, SocketConfig, WAMessageKey } from '../Types' -import { aggregateMessageKeysNotFromMe, assertMediaContent, bindWaitForEvent, decryptMediaRetryData, encodeWAMessage, encryptMediaRetryRequest, encryptSenderKeyMsgSignalProto, encryptSignalProto, extractDeviceJids, generateMessageID, generateWAMessage, getStatusCodeForMediaRetry, getUrlFromDirectPath, getWAUploadToServer, jidToSignalProtocolAddress, parseAndInjectE2ESessions, unixTimestampSeconds } from '../Utils' +import { aggregateMessageKeysNotFromMe, assertMediaContent, bindWaitForEvent, decryptMediaRetryData, encodeWAMessage, encryptMediaRetryRequest, encryptSenderKeyMsgSignalProto, encryptSignalProto, extractDeviceJids, generateMessageID, generateWAMessage, getStatusCodeForMediaRetry, getUrlFromDirectPath, getWAUploadToServer, jidToSignalProtocolAddress, parseAndInjectE2ESessions, patchMessageForMdIfRequired, unixTimestampSeconds } from '../Utils' import { getUrlInfo } from '../Utils/link-preview' import { areJidsSameUser, BinaryNode, BinaryNodeAttributes, getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, isJidUser, jidDecode, jidEncode, jidNormalizedUser, JidWithDevice, S_WHATSAPP_NET } from '../WABinary' import { makeGroupsSocket } from './groups' @@ -628,6 +628,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { } } + fullMsg.message = patchMessageForMdIfRequired(fullMsg.message!) await relayMessage(jid, fullMsg.message!, { messageId: fullMsg.key.id!, cachedGroupMetadata: options.cachedGroupMetadata, additionalAttributes }) if(config.emitOwnEvents) { process.nextTick(() => { diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index cd32bfe..3840c2a 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -22,7 +22,7 @@ import { WAProto, WATextMessage, } from '../Types' -import { jidNormalizedUser } from '../WABinary' +import { isJidGroup, jidNormalizedUser } from '../WABinary' import { generateMessageID, unixTimestampSeconds } from './generics' import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, MediaDownloadOptions } from './messages-media' @@ -392,6 +392,7 @@ export const generateWAMessageContent = async( m = { templateMessage: { + fourRowTemplate: msg, hydratedTemplate: msg } } @@ -494,7 +495,7 @@ export const generateWAMessageFromContent = ( message: message, messageTimestamp: timestamp, messageStubParameters: [], - participant: jid.includes('@g.us') ? userJid : undefined, + participant: isJidGroup(jid) ? userJid : undefined, status: WAMessageStatus.PENDING } return WAProto.WebMessageInfo.fromObject(messageJSON) @@ -717,4 +718,37 @@ export const assertMediaContent = (content: proto.IMessage | null | undefined) = } return mediaContent +} + + +const generateContextInfo = () => { + const info: proto.IMessageContextInfo = { + deviceListMetadataVersion: 2, + deviceListMetadata: { } + } + return info +} + +/** + * this is an experimental patch to make buttons work + * Don't know how it works, but it does for now + */ +export const patchMessageForMdIfRequired = (message: proto.IMessage) => { + const requiresPatch = !!( + message.buttonsMessage + // || message.templateMessage + || message.listMessage + ) + if(requiresPatch) { + message = { + viewOnceMessage: { + message: { + messageContextInfo: generateContextInfo(), + ...message + } + } + } + } + + return message } \ No newline at end of file