UNPKG

discord.js-pages

Version:

Dynamic pages pagination module for discord.js

232 lines (231 loc) 6.74 kB
import { Message, GuildMember, EmbedBuilder, MessageOptions, ColorResolvable, ButtonComponent, ActionRowBuilder, SelectMenuComponent, InteractionReplyOptions, ChatInputCommandInteraction, MessageActionRowComponentBuilder } from 'discord.js'; import { APIMessage } from 'discord-api-types/v10'; import { Page, Action, Button, Trigger, EndMethod, ActionUnion, EndMethodUnion, AutoGeneratePagesOptions, ResetListenTimeoutOptions, AllowArray } from './types'; declare type Files = Exclude<MessageOptions['files'], undefined>; export declare class PagesBuilder extends EmbedBuilder { /** * Common */ readonly interaction: ChatInputCommandInteraction; private message; private messageComponent?; private collector; private buildMethod; /** * Pages */ private pages; private files; private currentPage; private paginationFormat; private loop; /** * Components */ protected components: ActionRowBuilder<MessageActionRowComponentBuilder>[]; private defaultButtons; /** * Listen */ private listenTimeout; private listenUsers; private timeout; private autoResetTimeout; private endColor; private endMethod; /** * Triggers */ private triggers; constructor(interaction: ChatInputCommandInteraction); /** * Method for initial pages setup * * @example * ``` * builder.setPages( * new Embed() * .setTitle('Hello World!') * ); * * builder.setPages([ * new Embed() * .setTitle('Hello World!'), * () => ( * new Embed() * .setTitle('Function page') * ) * ]); * ``` */ setPages(pages: Page | Page[]): this; /** * Method for adding pages to the end */ addPages(pages: Page | Page[]): this; /** * Method for initial files setup */ setFiles(files: Files | Files[number]): this; /** * Method for adding files to the end */ addFiles(files: Files | Files[number]): this; /** * Method for auto generating pages * * @example * ``` * builder.autoGeneratePages({ * items: [ * 'Player 1', * 'Player 2', * 'Player 3' * ], * countPerPage: 2 * }); * ``` */ autoGeneratePages({ items, countPerPage }: AutoGeneratePagesOptions): this; /** * Method for opening a specific page */ setPage(pageNumber: number): Promise<ReturnType<PagesBuilder['editReply']>>; /** * Method for edit current reply * * @hidden */ private editReply; /** * Method for getting the page */ getPage(pageNumber?: number): Promise<EmbedBuilder[]>; /** * Method for setting the pagination format * * @example * %c - Current page * %m - Max page * * ``` * builder.setPaginationFormat('Current page: %c, Max: %m'); * ``` */ setPaginationFormat(format?: string): this; /** * Method for setting endless page switching when reaching the end */ setLoop(status?: boolean): this; /** * Method for setting default buttons * * @example * ``` * builder.setDefaultButtons(['first', { * stop: new ButtonComponent() * .setLabel('Stop') * .setStyle('PRIMARY') * }]); * ``` */ setDefaultButtons(buttons?: Button[]): this; /** * Method for setting the time to listen for updates to switch pages */ setListenTimeout(timeout?: number): this; /** * @description Method for resetting the current listening timer */ resetListenTimeout({ isFirstBuild }?: ResetListenTimeoutOptions): void; /** * Method for setting embed color at the end of listening */ setListenEndColor(color?: ColorResolvable): this; /** * Method for setting the method of working with a message when you finish listening for reactions */ setListenEndMethod(method: EndMethod | EndMethodUnion): this; /** * Method for setting listening to specific users */ setListenUsers(users?: AllowArray<GuildMember['id']>): this; /** * Method for adding listening to specific users */ addListenUsers(users: AllowArray<GuildMember['id']>): this; /** * Method for setting the timer to automatically reset when switching between pages */ setAutoResetTimeout(status?: boolean): this; /** * Method for early stopping listening */ stopListen(): void; /** * Method for setting components rows */ setComponents(components: AllowArray<ActionRowBuilder<MessageActionRowComponentBuilder>>): this; /** * Method for adding components to available row */ addComponents(components: AllowArray<ActionRowBuilder<MessageActionRowComponentBuilder> | MessageActionRowComponentBuilder>): this; /** * Method for update existing components * * @example * ``` * const button = new ButtonComponent() * .setCustomId('test') * .setLabel('Test button') * .setStyle('PRIMARY'); * * builder.addComponents(button); * * button.setLabel('Primary button'); * * builder.updateComponents(button); * * builder.rerender(); * ``` */ updateComponents(rows: AllowArray<ActionRowBuilder<MessageActionRowComponentBuilder>>): this; get appendedComponents(): PagesBuilder['components']; /** * Method for initial setting of triggers */ setTriggers<T extends ButtonComponent | SelectMenuComponent>(triggers?: Trigger<T> | Trigger<T>[]): this; /** * Method for adding triggers */ addTriggers<T extends ButtonComponent | SelectMenuComponent>(triggers: Trigger<T> | Trigger<T>[]): this; /** * Rerender current page */ rerender(): Promise<any>; /** * Build method */ build(options?: Pick<InteractionReplyOptions, 'ephemeral'>): Promise<void | Message | APIMessage>; /** * @hidden */ private simplifyKeyboard; /** * @hidden */ private startCollector; /** * @hidden */ private handleButton; /** * @hidden */ private handleSelectMenuComponent; /** * Method for invoking quick actions */ executeAction(action: Action | ActionUnion | string): void; } export {};