UNPKG

discord.js-selfbot-v13

Version:

A unofficial discord.js fork for creating selfbots [Based on discord.js v13]

109 lines (92 loc) 2.46 kB
'use strict'; const { Collection } = require('@discordjs/collection'); const Base = require('./Base'); const { PollAnswer } = require('./PollAnswer'); const { Error } = require('../errors'); const { PollLayoutTypes } = require('../util/Constants'); /** * Represents a Poll * @extends {Base} */ class Poll extends Base { constructor(client, data, message) { super(client); /** * The message that started this poll * @name Poll#message * @type {Message} * @readonly */ Object.defineProperty(this, 'message', { value: message }); /** * The media for a poll's question * @typedef {Object} PollQuestionMedia * @property {string} text The text of this question */ /** * The media for this poll's question * @type {PollQuestionMedia} */ this.question = { text: data.question.text, }; /** * The answers of this poll * @type {Collection<number, PollAnswer>} */ this.answers = data.answers.reduce( (acc, answer) => acc.set(answer.answer_id, new PollAnswer(this.client, answer, this)), new Collection(), ); /** * The timestamp when this poll expires * @type {number} */ this.expiresTimestamp = Date.parse(data.expiry); /** * Whether this poll allows multiple answers * @type {boolean} */ this.allowMultiselect = data.allow_multiselect; /** * The layout type of this poll * @type {PollLayoutType} */ this.layoutType = PollLayoutTypes[data.layout_type]; this._patch(data); } _patch(data) { if (data.results) { /** * Whether this poll's results have been precisely counted * @type {boolean} */ this.resultsFinalized = data.results.is_finalized; for (const answerResult of data.results.answer_counts) { const answer = this.answers.get(answerResult.id); answer?._patch(answerResult); } } else { this.resultsFinalized ??= false; } } /** * The date when this poll expires * @type {Date} * @readonly */ get expiresAt() { return new Date(this.expiresTimestamp); } /** * Ends this poll. * @returns {Promise<Message>} */ async end() { if (Date.now() > this.expiresTimestamp) { throw new Error('POLL_ALREADY_EXPIRED'); } return this.message.channel.messages.endPoll(this.message.id); } } module.exports = { Poll };