mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
Fixed all buttons except templates
This commit is contained in:
@@ -8,6 +8,7 @@ import { aggregateMessageKeysNotFromMe, assertMediaContent, bindWaitForEvent, de
|
|||||||
import { getUrlInfo } from '../Utils/link-preview'
|
import { getUrlInfo } from '../Utils/link-preview'
|
||||||
import { areJidsSameUser, BinaryNode, BinaryNodeAttributes, getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, isJidUser, jidDecode, jidEncode, jidNormalizedUser, JidWithDevice, S_WHATSAPP_NET } from '../WABinary'
|
import { areJidsSameUser, BinaryNode, BinaryNodeAttributes, getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, isJidUser, jidDecode, jidEncode, jidNormalizedUser, JidWithDevice, S_WHATSAPP_NET } from '../WABinary'
|
||||||
import { makeGroupsSocket } from './groups'
|
import { makeGroupsSocket } from './groups'
|
||||||
|
import ListType = proto.Message.ListMessage.ListType;
|
||||||
|
|
||||||
export const makeMessagesSocket = (config: SocketConfig) => {
|
export const makeMessagesSocket = (config: SocketConfig) => {
|
||||||
const {
|
const {
|
||||||
@@ -338,6 +339,7 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
|||||||
|
|
||||||
await authState.keys.transaction(
|
await authState.keys.transaction(
|
||||||
async() => {
|
async() => {
|
||||||
|
const mediaType = getMediaType(message)
|
||||||
if(isGroup) {
|
if(isGroup) {
|
||||||
const [groupData, senderKeyMap] = await Promise.all([
|
const [groupData, senderKeyMap] = await Promise.all([
|
||||||
(async() => {
|
(async() => {
|
||||||
@@ -404,7 +406,7 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
|||||||
|
|
||||||
await assertSessions(senderKeyJids, false)
|
await assertSessions(senderKeyJids, false)
|
||||||
|
|
||||||
const result = await createParticipantNodes(senderKeyJids, senderKeyMsg)
|
const result = await createParticipantNodes(senderKeyJids, senderKeyMsg, mediaType ? { mediatype: mediaType } : undefined)
|
||||||
shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || result.shouldIncludeDeviceIdentity
|
shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || result.shouldIncludeDeviceIdentity
|
||||||
|
|
||||||
participants.push(...result.nodes)
|
participants.push(...result.nodes)
|
||||||
@@ -449,8 +451,8 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
|||||||
{ nodes: meNodes, shouldIncludeDeviceIdentity: s1 },
|
{ nodes: meNodes, shouldIncludeDeviceIdentity: s1 },
|
||||||
{ nodes: otherNodes, shouldIncludeDeviceIdentity: s2 }
|
{ nodes: otherNodes, shouldIncludeDeviceIdentity: s2 }
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
createParticipantNodes(meJids, meMsg),
|
createParticipantNodes(meJids, meMsg, mediaType ? { mediatype: mediaType } : undefined),
|
||||||
createParticipantNodes(otherJids, message)
|
createParticipantNodes(otherJids, message, mediaType ? { mediatype: mediaType } : undefined)
|
||||||
])
|
])
|
||||||
participants.push(...meNodes)
|
participants.push(...meNodes)
|
||||||
participants.push(...otherNodes)
|
participants.push(...otherNodes)
|
||||||
@@ -502,6 +504,22 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
|||||||
logger.debug({ jid }, 'adding device identity')
|
logger.debug({ jid }, 'adding device identity')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const buttonType = getButtonType(message)
|
||||||
|
if(buttonType){
|
||||||
|
(stanza.content as BinaryNode[]).push({
|
||||||
|
tag: 'biz',
|
||||||
|
attrs: { },
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
tag: buttonType,
|
||||||
|
attrs: getButtonArgs(message),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
logger.debug({ jid }, 'adding business node')
|
||||||
|
}
|
||||||
|
|
||||||
logger.debug({ msgId }, `sending message to ${participants.length} devices`)
|
logger.debug({ msgId }, `sending message to ${participants.length} devices`)
|
||||||
|
|
||||||
await sendNode(stanza)
|
await sendNode(stanza)
|
||||||
@@ -511,6 +529,67 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
|||||||
return msgId
|
return msgId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getMediaType = (message: proto.IMessage) => {
|
||||||
|
if(message.imageMessage) {
|
||||||
|
return 'image'
|
||||||
|
} else if(message.videoMessage) {
|
||||||
|
return message.videoMessage.gifPlayback ? 'gif' : 'video'
|
||||||
|
} else if(message.audioMessage) {
|
||||||
|
return message.audioMessage.ptt ? 'ptt' : 'audio'
|
||||||
|
} else if(message.contactMessage) {
|
||||||
|
return 'vcard'
|
||||||
|
} else if(message.documentMessage) {
|
||||||
|
return 'document'
|
||||||
|
} else if(message.contactsArrayMessage) {
|
||||||
|
return 'contact_array'
|
||||||
|
} else if(message.liveLocationMessage) {
|
||||||
|
return 'livelocation'
|
||||||
|
} else if(message.stickerMessage) {
|
||||||
|
return 'sticker'
|
||||||
|
} else if(message.listMessage) {
|
||||||
|
return 'list'
|
||||||
|
} else if(message.listResponseMessage) {
|
||||||
|
return 'list_response'
|
||||||
|
} else if(message.buttonsResponseMessage) {
|
||||||
|
return 'buttons_response'
|
||||||
|
} else if(message.orderMessage) {
|
||||||
|
return 'order'
|
||||||
|
} else if(message.productMessage) {
|
||||||
|
return 'product'
|
||||||
|
} else if(message.interactiveResponseMessage) {
|
||||||
|
return 'native_flow_response'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getButtonType = (message: proto.IMessage) => {
|
||||||
|
if(message.buttonsMessage) {
|
||||||
|
return 'buttons'
|
||||||
|
} else if(message.buttonsResponseMessage) {
|
||||||
|
return 'buttons_response'
|
||||||
|
} else if(message.interactiveResponseMessage) {
|
||||||
|
return 'interactive_response'
|
||||||
|
} else if(message.listMessage) {
|
||||||
|
return 'list'
|
||||||
|
} else if(message.listResponseMessage) {
|
||||||
|
return 'list_response'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getButtonArgs = (message: proto.IMessage): BinaryNode['attrs'] => {
|
||||||
|
if(message.templateMessage){
|
||||||
|
// TODO: Add attributes
|
||||||
|
return {}
|
||||||
|
} else if(message.listMessage) {
|
||||||
|
const type = message.listMessage.listType
|
||||||
|
if(!type){
|
||||||
|
throw new Boom("Expected list type inside message")
|
||||||
|
}
|
||||||
|
return {v: '2', type: ListType[type].toLowerCase()};
|
||||||
|
} else {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const getPrivacyTokens = async(jids: string[]) => {
|
const getPrivacyTokens = async(jids: string[]) => {
|
||||||
const t = unixTimestampSeconds().toString()
|
const t = unixTimestampSeconds().toString()
|
||||||
const result = await query({
|
const result = await query({
|
||||||
|
|||||||
Reference in New Issue
Block a user