UNPKG

@oceanicjs/builders

Version:

Helpful builders for various Discord related things.

151 lines 11 kB
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9Db21wb25lbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUErQztBQUMvQyx5RUFBeUM7QUFDekMsaUZBQWlEO0FBQ2pELCtFQUErQztBQUUvQywyQ0FXb0I7QUFLcEIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLDJCQUFjLENBQUMsYUFBYSxFQUFFLDJCQUFjLENBQUMsV0FBVyxFQUFFLDJCQUFjLENBQUMsV0FBVyxFQUFFLDJCQUFjLENBQUMsa0JBQWtCLEVBQUUsMkJBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0TCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsMkJBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUU3RSxNQUFxQixnQkFBZ0I7SUFDekIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLEdBQXFCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLFlBQVksTUFBZTtRQUN2QixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYSxFQUFFLE9BQTZCLFFBQVE7UUFDdEUsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLE9BQU87Z0JBQ0gsRUFBRSxFQUFRLElBQUk7Z0JBQ2QsSUFBSSxFQUFNLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztTQUNMO2FBQU07WUFDSCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ2hEO1lBQ0QsT0FBTztnQkFDSCxFQUFFO2dCQUNGLElBQUk7Z0JBQ0osUUFBUSxFQUFFLElBQUksS0FBSyxHQUFHO2FBQ3pCLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksbUJBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFNBQTBCO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNyQztTQUNKO2FBQU07WUFDSCxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDNUI7aUJBQU07Z0JBQ0gsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQjtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxHQUFHLFVBQWtDO1FBQy9DLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLE9BQW9DO1FBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEosT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxhQUFxQyxFQUFFO1FBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsT0FBNkI7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLG9CQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFMLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLE9BQTJCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxtQkFBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyTyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE9BQTRCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBTSxDQUFDLHlCQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyx5QkFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0SixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxNQUFNO1FBQ0YsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBYSxDQUFDO0lBQzVFLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQW9CLENBQUM7SUFDdEYsQ0FBQztDQUNKO0FBckpELG1DQXFKQyJ9