@discord-additions/components
Version:
Some helpful additions to make creating components easier.
130 lines • 6.71 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 Button extends Component_1.default {
style;
customID;
url;
label;
emoji;
/**
* Create a new Button
*
* @see https://discord.com/developers/docs/interactions/message-components#button-object-button-structure
* @param {ButtonStyle} style - the style of this button - 1, blurple - 2, grey - 3, green - 4, red - 5, link
* @param {string} urlOrCustomID - the url of this button if style 5, else the custom id of this button
*/
constructor(style, urlOrCustomID) {
super(Constants_1.ComponentTypes.BUTTON);
this.style = style;
if (style === Constants_1.ButtonStyles.LINK)
this.url = urlOrCustomID;
else
this.customID = urlOrCustomID;
}
/**
* Set the style of this button
*
* * 1 - blurple
* * 2 - grey
* * 3 - green
* * 4 - red
* * 5 - link
*
* @see https://discord.com/developers/docs/interactions/message-components#button-object-button-styles
* @param {ButtonStyle} style - the style of this button
* @returns {Button}
*/
setStyle(style) {
this.style = style;
return this;
}
/**
* Set the custom id of this button (styles 1-4)
*
* @see https://discord.com/developers/docs/interactions/message-components#button-object-button-structure
* @param {string} customID - a developer-defined identifier for the button, max 100 characters
* @returns {Button}
*/
setCustomID(customID) {
this.customID = customID;
return this;
}
/**
* Set the custom id of this button (style 5)
*
* @see https://discord.com/developers/docs/interactions/message-components#button-object-button-structure
* @param {string} url - the url to open when this button is clicked
* @returns {Button}
*/
setURL(url) {
this.url = url;
return this;
}
/**
* Set the label of this button
*
* @see https://discord.com/developers/docs/interactions/message-components#button-object-button-structure
* @param {string} label - the label to display on this button
* @returns {Button}
*/
setLabel(label) {
this.label = label;
return this;
}
/**
* Set the emoji of this buttom
*
* @param {string} emoji - the emoji to display on this button
* @returns {Button}
*/
setEmoji(emoji) {
this.emoji = emoji;
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(style, urlOrCustomID, label, emoji, disabled) {
if (style)
this.setStyle(style);
if (urlOrCustomID) {
if (this.style === Constants_1.ButtonStyles.LINK)
this.url = urlOrCustomID;
else
this.customID = urlOrCustomID;
}
if (label)
this.setLabel(label);
if (emoji)
this.setEmoji(emoji);
if (typeof disabled !== "undefined") {
if (disabled)
this.disable();
else
this.enable();
}
return this;
}
toJSON() {
const obj = {
type: this.type,
style: this.style,
label: this.label,
emoji: this.emoji,
disabled: this.disabled
};
if (this.style === Constants_1.ButtonStyles.LINK) {
obj.url = this.url;
return obj;
}
else {
obj.customID = this.customID;
return obj;
}
}
}
exports.default = Button;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0cnVjdHVyZXMvQnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQW9DO0FBQ3BDLGlEQUFpRTtBQUtqRSxNQUFxQixNQUFPLFNBQVEsbUJBQTBDO0lBQzdFLEtBQUssQ0FBYztJQUNuQixRQUFRLENBQVU7SUFDbEIsR0FBRyxDQUFVO0lBQ2IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFnQjtJQUNyQjs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWtCLEVBQUUsYUFBcUI7UUFDcEQsS0FBSyxDQUFDLDBCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxLQUFLLEtBQUssd0JBQVksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUM7O1lBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxRQUFRLENBQUMsS0FBa0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLFFBQWdCO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxHQUFXO1FBQ2pCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsUUFBUSxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsS0FBbUI7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsb0hBQW9IO0lBQ3BILElBQUksQ0FBQyxLQUFtQixFQUFFLGFBQXNCLEVBQUUsS0FBYyxFQUFFLEtBQW9CLEVBQUUsUUFBa0I7UUFDekcsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLGFBQWEsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssd0JBQVksQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDOztnQkFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7U0FDbkM7UUFDRCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDcEMsSUFBSSxRQUFRO2dCQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVRLE1BQU07UUFDZCxNQUFNLEdBQUcsR0FBRztZQUNYLElBQUksRUFBTSxJQUFJLENBQUMsSUFBSTtZQUNuQixLQUFLLEVBQUssSUFBSSxDQUFDLEtBQUs7WUFDcEIsS0FBSyxFQUFLLElBQUksQ0FBQyxLQUFLO1lBQ3BCLEtBQUssRUFBSyxJQUFJLENBQUMsS0FBSztZQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDVSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyx3QkFBWSxDQUFDLElBQUksRUFBRTtZQUNwQyxHQUFpQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBSSxDQUFDO1lBQ25DLE9BQU8sR0FBRyxDQUFDO1NBQ1g7YUFBTTtZQUNMLEdBQXlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFTLENBQUM7WUFDckQsT0FBTyxHQUFHLENBQUM7U0FDWDtJQUVGLENBQUM7Q0FDRDtBQXZIRCx5QkF1SEMifQ==