feat: vote_update event (#2596)
* Merge branch 'add-polls' into polls-ext * added listener to poll votes * added isUnvote property * added option for custom message secret * usage example updated * added logic for catching removed votes * usage example updated * fixed logic for poll vote events * temp usage example * No more `isCurrentState` * messageSecret converted to array Co-authored-by: tuyuribr <45042245+tuyuribr@users.noreply.github.com> * docs updated * we already have messageSecret in vote.parentMessage * PollVote.selectedOptions changed to be similar to pollOptions * docs fixed * window.injectToFunction clarifications * minor clarifications * fix: typo * style: fix broken link in readme file --------- Co-authored-by: tuyuribr <45042245+tuyuribr@users.noreply.github.com>
This commit is contained in:
parent
8c810a8462
commit
01714fe599
1 changed files with 132 additions and 3 deletions
61
src/structures/PollVote.js
Normal file
61
src/structures/PollVote.js
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
'use strict';
|
||||
|
||||
const Message = require('./Message');
|
||||
const Base = require('./Base');
|
||||
|
||||
/**
|
||||
* Selected poll option structure
|
||||
* @typedef {Object} SelectedPollOption
|
||||
* @property {number} id The local selected or deselected option ID
|
||||
* @property {string} name The option name
|
||||
*/
|
||||
|
||||
/**
|
||||
* Represents a Poll Vote on WhatsApp
|
||||
* @extends {Base}
|
||||
*/
|
||||
class PollVote extends Base {
|
||||
constructor(client, data) {
|
||||
super(client);
|
||||
|
||||
if (data) this._patch(data);
|
||||
}
|
||||
|
||||
_patch(data) {
|
||||
/**
|
||||
* The person who voted
|
||||
* @type {string}
|
||||
*/
|
||||
this.voter = data.sender;
|
||||
|
||||
/**
|
||||
* The selected poll option(s)
|
||||
* If it's an empty array, the user hasn't selected any options on the poll,
|
||||
* may occur when they deselected all poll options
|
||||
* @type {SelectedPollOption[]}
|
||||
*/
|
||||
this.selectedOptions =
|
||||
data.selectedOptionLocalIds.length > 0
|
||||
? data.selectedOptionLocalIds.map((e) => ({
|
||||
name: data.parentMessage.pollOptions.find((x) => x.localId === e).name,
|
||||
localId: e
|
||||
}))
|
||||
: [];
|
||||
|
||||
/**
|
||||
* Timestamp the option was selected or deselected at
|
||||
* @type {number}
|
||||
*/
|
||||
this.interractedAtTs = data.senderTimestampMs;
|
||||
|
||||
/**
|
||||
* The poll creation message associated with the poll vote
|
||||
* @type {Message}
|
||||
*/
|
||||
this.parentMessage = new Message(this.client, data.parentMessage);
|
||||
|
||||
return super._patch(data);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PollVote;
|
||||
Loading…
Reference in a new issue