diff --git a/src/Types/Message.ts b/src/Types/Message.ts index 62d2f8b..5c98064 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -94,6 +94,7 @@ export type PollMessageOptions = { values: string[] /** 32 byte message secret to encrypt poll selections */ messageSecret?: Uint8Array + toAnnouncementGroup?: boolean } type SharePhoneNumber = { diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 1236091..a53c69c 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -435,6 +435,7 @@ export const generateWAMessageContent = async( m.listResponseMessage = { ...message.listReply } } else if('poll' in message) { message.poll.selectableCount ||= 0 + message.poll.toAnnouncementGroup ||= false if(!Array.isArray(message.poll.values)) { throw new Boom('Invalid poll values', { statusCode: 400 }) @@ -455,11 +456,24 @@ export const generateWAMessageContent = async( messageSecret: message.poll.messageSecret || randomBytes(32), } - m.pollCreationMessage = { + const pollCreationMessage = { name: message.poll.name, selectableOptionsCount: message.poll.selectableCount, options: message.poll.values.map(optionName => ({ optionName })), } + + if (message.poll.toAnnouncementGroup) { + // poll v2 is for community announcement groups (single select and multiple) + m.pollCreationMessageV2 = pollCreationMessage + } else { + if(message.poll.selectableCount > 0) { + //poll v3 is for single select polls + m.pollCreationMessageV3 = pollCreationMessage + } else { + // poll v3 for multiple choice polls + m.pollCreationMessage = pollCreationMessage + } + } } else if('sharePhoneNumber' in message) { m.protocolMessage = { type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER