UNPKG

@discord-additions/components

Version:

Some helpful additions to make creating components easier.

141 lines 8.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Component_1 = __importDefault(require("./Component")); const Constants_1 = require("../util/Constants"); class SelectMenu extends Component_1.default { customID; options = []; placeholder; minValues; maxValues; disabled = false; /** * Create a new SelectMenu * * @see https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-menu-structure * @param {string} customID - the custom id of this select menu */ constructor(customID) { super(Constants_1.ComponentTypes.SELECT_MENU); this.customID = customID; } /** * Set the custom_id of this select menu. * * @see https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-menu-structure * @param {string} customID - a developer-defined identifier for the button, max 100 characters * @returns {SelectMenu} */ setCustomID(customID) { this.customID = customID; return this; } /** * Set the placeholder of this select menu. * * @see https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-menu-structure * @param {string} placeholder - custom placeholder text if nothing is selected, max 100 characters * @returns {SelectMenu} */ setPlaceholder(placeholder) { this.placeholder = placeholder; return this; } /** * Set the minimum/maximum values of this select menu. * * @see https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-menu-structure * @param {number} [min] - the minimum selected values * @param {number} [max] - the maximum selected values * @returns {SelectMenu} */ setValues(min, max) { if (min) this.minValues = min; if (max) this.maxValues = max; return this; } /** * Add an option to this select menu * * @see https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-option-structure * @param {string} label * @param {string} value * @param {string} [description] * @param {object} [emoji] - the emoji to displayed with this option * @param {(string | null)} [emoji.id] - the id of this emoji, null if built in * @param {string} [emoji.name] - the name of this emoji, unicode if built in * @param {boolean} [emoji.animated] - if the emoji is animated * @param {boolean} [defaultSelection] - if this option should be the default selected option * @returns {SelectMenu} */ addOption(label, value, description, emoji, defaultSelection) { this.options.push({ label, value, description, emoji, default: defaultSelection }); return this; } /** * Add options to this select menu in bulk * * @param {Array<SelectMenuOption>} options - the options to add * @returns {SelectMenu} */ addOptions(...options) { options.map(o => this.addOption(o.label, o.value, o.description, o.emoji, o.default)); return this; } /** * Clear all currently present options on this select menu. * * @returns {SelectMenu} */ clearOptions() { this.options = []; return this; } /** this method is meant to be for internal use only, don't use it, as it may break or change at a moments notice */ load(customID, options, placeholder, minValues, maxValues, disabled) { if (customID) this.setCustomID(customID); if (options && Array.isArray(options) && options.length > 0) { this.clearOptions(); this.addOptions(...options); } if (placeholder) this.setPlaceholder(placeholder); if (minValues) this.setValues(minValues, undefined); if (maxValues) this.setValues(undefined, maxValues); if (typeof disabled !== "undefined") { if (disabled) this.disable(); else this.enable(); } return this; } /** converts this SelectMenu instance to raw json */ toJSON() { return { type: this.type, customID: this.customID, options: this.options, placeholder: this.placeholder, minValues: this.minValues, maxValues: this.maxValues, disabled: this.disabled }; } } exports.default = SelectMenu; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0TWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL1NlbGVjdE1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0REFBb0M7QUFDcEMsaURBQW1EO0FBR25ELE1BQXFCLFVBQVcsU0FBUSxtQkFBK0M7SUFDdEYsUUFBUSxDQUFTO0lBQ2pCLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBQ3RDLFdBQVcsQ0FBVTtJQUNyQixTQUFTLENBQVU7SUFDbkIsU0FBUyxDQUFVO0lBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakI7Ozs7O09BS0c7SUFDSCxZQUFZLFFBQWdCO1FBQzNCLEtBQUssQ0FBQywwQkFBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsUUFBZ0I7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLFdBQW1CO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsR0FBWSxFQUFFLEdBQVk7UUFDbkMsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDOUIsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLFdBQW9CLEVBQUUsS0FBb0IsRUFBRSxnQkFBMEI7UUFDN0csSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDakIsS0FBSztZQUNMLEtBQUs7WUFDTCxXQUFXO1lBQ1gsS0FBSztZQUNMLE9BQU8sRUFBRSxnQkFBZ0I7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBRyxPQUFnQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsb0hBQW9IO0lBQ3BILElBQUksQ0FBQyxRQUFpQixFQUFFLE9BQWlDLEVBQUUsV0FBb0IsRUFBRSxTQUFrQixFQUFFLFNBQWtCLEVBQUUsUUFBa0I7UUFDMUksSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLFdBQVc7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ3BDLElBQUksUUFBUTtnQkFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7O2dCQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbkI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxvREFBb0Q7SUFDM0MsTUFBTTtRQUNkLE9BQU87WUFDTixJQUFJLEVBQVMsSUFBSSxDQUFDLElBQUk7WUFDdEIsUUFBUSxFQUFLLElBQUksQ0FBQyxRQUFRO1lBQzFCLE9BQU8sRUFBTSxJQUFJLENBQUMsT0FBTztZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsU0FBUyxFQUFJLElBQUksQ0FBQyxTQUFTO1lBQzNCLFNBQVMsRUFBSSxJQUFJLENBQUMsU0FBUztZQUMzQixRQUFRLEVBQUssSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNILENBQUM7Q0FDRDtBQW5JRCw2QkFtSUMifQ==