@oceanicjs/builders
Version:
Helpful builders for various Discord related things.
151 lines • 11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const ActionRow_1 = tslib_1.__importDefault(require("./Structures/ActionRow"));
const Button_1 = tslib_1.__importDefault(require("./Structures/Button"));
const SelectMenu_1 = tslib_1.__importDefault(require("./Structures/SelectMenu"));
const TextInput_1 = tslib_1.__importDefault(require("./Structures/TextInput"));
const oceanic_js_1 = require("oceanic.js");
const SelectMenuTypeValues = [oceanic_js_1.ComponentTypes.STRING_SELECT, oceanic_js_1.ComponentTypes.USER_SELECT, oceanic_js_1.ComponentTypes.ROLE_SELECT, oceanic_js_1.ComponentTypes.MENTIONABLE_SELECT, oceanic_js_1.ComponentTypes.CHANNEL_SELECT];
const UniqueRowNeeded = [...SelectMenuTypeValues, oceanic_js_1.ComponentTypes.TEXT_INPUT];
class ComponentBuilder {
currentIndex = 0;
rows = [];
rowMax = 5;
constructor(rowMax) {
if (rowMax) {
this.rowMax = rowMax;
}
}
/**
* Convert an emoji to a partial.
* @param emoji The unicode point of the emoji if default, else the fully qualified emoji.
* @param type `default` if built in (unicode), `custom` otherwise (this can be assumed from the format by us).
* @example emojiToPartial("🐾", "default")
* @example emojiToPartial("<:paws8:681748079778463796>", "custom")
*/
static emojiToPartial(emoji, type = "custom") {
if (type === "default") {
return {
id: null,
name: emoji,
animated: false
};
}
else {
const [, anim, name, id] = /^<?(a)?:(.*):([\d]{15,21})>?$/.exec(emoji) ?? [];
if (!name || !id) {
return this.emojiToPartial(emoji, "default");
}
return {
id,
name,
animated: anim === "a"
};
}
}
getCurrentRow() {
return (this.rows[this.currentIndex] || (this.rows[this.currentIndex] = new ActionRow_1.default()));
}
/**
* Add a component to the current row, or a new row depending on certain conditions
* @param component The component to add.
*/
addComponent(component) {
const cur = this.getCurrentRow();
if (UniqueRowNeeded.includes(component.type)) {
if (cur.isEmpty()) {
cur.addComponent(component);
this.addRow();
}
else {
this.addRow([component]).addRow();
}
}
else {
if (cur.size >= this.rowMax) {
this.addRow([component]);
}
else {
cur.addComponent(component);
}
}
return this;
}
/**
* Add several components.
* @param components The components to add.
*/
addComponents(...components) {
components.map(c => this.addComponent(c));
return this;
}
/**
* Add an interaction button to the current row.
* @param options The options for adding the interaction button.
*/
addInteractionButton(options) {
this.addComponent(new Button_1.default(options.style, options.customID)["load"](options.style, options.customID, options.label, options.emoji, options.disabled));
return this;
}
/**
* Start a new action row.
* @param components The components to start this new row with.
*/
addRow(components = []) {
this.currentIndex++;
this.rows.push(new ActionRow_1.default().addComponents(...components));
return this;
}
/**
* Add a select menu (to the current row, if empty - else as a new row).
* @param options The options for adding the select menu.
*/
addSelectMenu(options) {
this.addComponent(new SelectMenu_1.default(options.type, options.customID)["load"](options.customID, options.options, options.placeholder, options.minValues, options.maxValues, options.disabled));
return this;
}
/**
* Add a text input to the current row.
* @param options The options for adding the text input.
* @returns
*/
addTextInput(options) {
this.addComponent(new TextInput_1.default(options.style, options.label, options.customID)["load"](options.style, options.label, options.customID, options.placeholder, options.value, options.minLength, options.maxLength, options.required));
return this;
}
/**
* Add a url button to the current row
* @param options The options for adding the url button.
*/
addURLButton(options) {
this.addComponent(new Button_1.default(oceanic_js_1.ButtonStyles.LINK, options.url)["load"](oceanic_js_1.ButtonStyles.LINK, options.url, options.label, options.emoji, options.disabled));
return this;
}
/**
* Remove all of the rows that are empty.
*/
removeEmptyRows() {
this.rows.forEach((row, index) => {
if (row.size === 0) {
this.rows.splice(index, 1);
}
});
this.currentIndex = this.rows.length - 1;
return this;
}
setRowMax(rowMax) {
this.rowMax = rowMax;
return this;
}
/** convert the current contents to JSON */
toJSON() {
return this.removeEmptyRows().rows.map(row => row.toJSON());
}
/** convert the current contents to JSON */
toJSONRaw() {
return this.removeEmptyRows().rows.map(row => row.toJSONRaw());
}
}
exports.default = ComponentBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9Db21wb25lbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUErQztBQUMvQyx5RUFBeUM7QUFDekMsaUZBQWlEO0FBQ2pELCtFQUErQztBQUUvQywyQ0FXb0I7QUFLcEIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLDJCQUFjLENBQUMsYUFBYSxFQUFFLDJCQUFjLENBQUMsV0FBVyxFQUFFLDJCQUFjLENBQUMsV0FBVyxFQUFFLDJCQUFjLENBQUMsa0JBQWtCLEVBQUUsMkJBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0TCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsMkJBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUU3RSxNQUFxQixnQkFBZ0I7SUFDekIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLEdBQXFCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLFlBQVksTUFBZTtRQUN2QixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYSxFQUFFLE9BQTZCLFFBQVE7UUFDdEUsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLE9BQU87Z0JBQ0gsRUFBRSxFQUFRLElBQUk7Z0JBQ2QsSUFBSSxFQUFNLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztTQUNMO2FBQU07WUFDSCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLElBQUksSUFBSSxD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