@discord-additions/components
Version:
Some helpful additions to make creating components easier.
141 lines • 8.02 kB
JavaScript
"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==