discord.js-pages
Version:
Dynamic pages pagination module for discord.js
232 lines (231 loc) • 6.74 kB
TypeScript
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 {};