UNPKG

@globalart/nestcord

Version:

A module for creating Discord bots using NestJS, based on Discord.js

83 lines (82 loc) 3.53 kB
"use strict"; 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;