@globalart/nestcord
Version:
A module for creating Discord bots using NestJS, based on Discord.js
83 lines (82 loc) • 3.53 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ButtonsPaginationBuilder = void 0;
const discord_js_1 = require("discord.js");
const base_pagination_builder_1 = require("./base-pagination.builder");
const assert = require("assert");
class ButtonsPaginationBuilder extends base_pagination_builder_1.BasePaginationBuilder {
constructor() {
super(...arguments);
this.pages = [];
}
get maxPages() {
if (this.pages.length) {
return this.pages.length;
}
return this._maxPages || null;
}
set maxPages(value) {
this._maxPages = value;
}
setPages(pages) {
this.pages = pages;
return this;
}
setButtons(buttons) {
this.buttons = buttons;
return this;
}
setPagesFactory(factory) {
this.pagesFactory = factory;
return this;
}
setMaxPages(maxPages) {
this.maxPages = maxPages;
return this;
}
build() {
return __awaiter(this, arguments, void 0, function* (page = 1) {
page = Math.max(1, Math.min(page, this.maxPages)) || 1;
assert(!!this.customId, 'Custom id must be set');
assert(!!this.pagesFactory || this.pages.length >= 1, 'Pages factory must be set if no pages are provided');
assert(this.maxPages !== null, 'Max pages must be set if no pages are provided');
assert(this.maxPages >= page, `Page ${page} is out of range (max: ${this.maxPages})`);
const pageBuilder = this.pages[page - 1] || (yield this.pagesFactory(page, this.maxPages));
const pageOptions = pageBuilder.build();
const row = Object.values(this.buttons).map((buttons) => {
const component = this.createButtons(buttons);
return new discord_js_1.ActionRowBuilder().addComponents(component);
});
return Object.assign(Object.assign({}, pageOptions), { components: [...row, ...pageOptions.components] });
});
}
createButtons(buttons) {
return Object.entries(buttons).map(([_, button]) => {
const builder = new discord_js_1.ButtonBuilder();
builder.setStyle(button.style).setLabel(button.label);
if (button.emoji) {
builder.setEmoji(button.emoji);
}
if (button.disabled) {
builder.setDisabled(true);
}
if (button.style === discord_js_1.ButtonStyle.Link) {
builder.setURL(button.link);
}
else {
builder.setCustomId(`nestcord-pagination/${this.customId}/${button.customId}/${button.options || ''}`);
}
return builder;
});
}
}
exports.ButtonsPaginationBuilder = ButtonsPaginationBuilder;