diff --git a/index.d.ts b/index.d.ts index b16a20f..fa36547 100644 --- a/index.d.ts +++ b/index.d.ts @@ -649,6 +649,7 @@ declare namespace WAWebJS { * broadcast: false, * fromMe: false, * hasQuotedMsg: false, + * hasReaction: false, * location: undefined, * mentionedIds: [] * } @@ -678,6 +679,8 @@ declare namespace WAWebJS { hasMedia: boolean, /** Indicates if the message was sent as a reply to another message */ hasQuotedMsg: boolean, + /** Indicates whether there are reactions to the message */ + hasReaction: boolean, /** Indicates the duration of the message in seconds */ duration: string, /** ID that represents the message */ @@ -779,6 +782,10 @@ declare namespace WAWebJS { * Gets the payment details associated with a given message */ getPayment: () => Promise, + /** + * Gets the reactions associated with the given message + */ + getReactions: () => Promise, } /** ID that represents a message */ @@ -1381,6 +1388,13 @@ declare namespace WAWebJS { senderId: string ack?: number } + + export type ReactionList = { + id: string, + aggregateEmoji: string, + hasReactionByMe: boolean, + senders: Array + } } export = WAWebJS diff --git a/src/structures/Message.js b/src/structures/Message.js index 2e16ed7..87d7163 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -5,7 +5,8 @@ const MessageMedia = require('./MessageMedia'); const Location = require('./Location'); const Order = require('./Order'); const Payment = require('./Payment'); -const { MessageTypes } = require('../util/Constants'); +const Reaction = require('./Reaction'); +const {MessageTypes} = require('../util/Constants'); /** * Represents a Message on WhatsApp @@ -134,6 +135,12 @@ class Message extends Base { */ this.hasQuotedMsg = data.quotedMsg ? true : false; + /** + * Indicates whether there are reactions to the message + * @type {boolean} + */ + this.hasReaction = data.hasReaction ? true : false; + /** * Indicates the duration of the message in seconds * @type {string} @@ -529,6 +536,44 @@ class Message extends Base { } return undefined; } + + + /** + * Reaction List + * @typedef {Object} ReactionList + * @property {string} id Original emoji + * @property {string} aggregateEmoji aggregate emoji + * @property {boolean} hasReactionByMe Flag who sent the reaction + * @property {Array} senders Reaction senders, to this message + */ + + /** + * Gets the reactions associated with the given message + * @return {Promise} + */ + async getReactions() { + if (!this.hasReaction) { + return undefined; + } + + const reactions = await this.client.pupPage.evaluate(async (msgId) => { + const msgReactions = await window.Store.Reactions.find(msgId); + if (!msgReactions || !msgReactions.reactions.length) return null; + return msgReactions.reactions.serialize(); + }, this.id._serialized); + + if (!reactions) { + return undefined; + } + + return reactions.map(reaction => { + reaction.senders = reaction.senders.map(sender => { + sender.timestamp = Math.round(sender.timestamp / 1000); + return new Reaction(this.client, sender); + }); + return reaction; + }); + } } module.exports = Message;