
Product
Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
@discordx/pagination
Advanced tools
Add pagination to discord bot using buttons or menu.
Version 16.6.0 or newer of Node.js is required
npm install @discordx/pagination
yarn add @discordx/pagination
embeds: (string | MessageEmbed | MessageOptions)[] | Pagination
)import {
Pagination,
PaginationResolver,
PaginationType,
} from "@discordx/pagination";
import type { CommandInteraction, MessageOptions } from "discord.js";
import { ActionRowBuilder, ButtonBuilder, EmbedBuilder } from "discord.js";
import type { ArgsOf } from "discordx";
import { Discord, On, Slash } from "discordx";
export function GeneratePages(limit?: number): MessageOptions[] {
const pages = Array.from(Array(limit ?? 20).keys()).map((i) => {
return { content: `I am ${i + 1}`, embed: `Demo ${i + 1}` };
});
return pages.map((page) => {
return {
content: page.content,
embeds: [new MessageEmbed().setTitle(page.embed)],
};
});
}
@Discord()
export abstract class Example {
// example: message
@On("messageCreate")
onMessage([message]: ArgsOf<"messageCreate">): void {
if (message.content === "paginated demo") {
new Pagination(message, GeneratePages(), {
type: PaginationType.Button,
}).send();
}
}
// example: any text channel
@On("messageCreate")
onMessageChannel([message]: ArgsOf<"messageCreate">): void {
if (message.content === "paginated channel demo") {
new Pagination(message.channel, GeneratePages(), {
type: PaginationType.Button,
}).send();
}
}
// example: simple slash with button pagination
@Slash("demo-a", { description: "Simple slash with button pagination" })
async demoA(interaction: CommandInteraction): Promise<void> {
const embedX = new PaginationResolver((page, pagination) => {
if (page === 3) {
// example to replace pagination with another pagination data
pagination.currentPage = 0; // reset current page, because this is gonna be first page
pagination.maxLength = 5; // new max length for new pagination
pagination.embeds = ["1", "2", "3", "4", "5"]; // page reference can be resolver as well
return pagination.embeds[pagination.currentPage] ?? "unknown"; // the first page, must select ourselves
}
return `page v2 ${page}`;
}, 25);
const pagination = new Pagination(interaction, embedX, {
ephemeral: true,
onTimeout: () => {
interaction.deleteReply();
},
start: {
emoji: "🙂",
},
time: 5 * 1000,
type: PaginationType.Button,
});
await pagination.send();
}
// example: simple slash with menu pagination
@Slash("demo-b", { description: "Simple slash with menu pagination" })
demoB(interaction: CommandInteraction): void {
new Pagination(interaction, GeneratePages(), {
type: PaginationType.SelectMenu,
}).send();
}
// example: simple string array
@Slash("demo-c", { description: "Simple string array" })
demoC(interaction: CommandInteraction): void {
new Pagination(
interaction,
Array.from(Array(20).keys()).map((i) => i.toString())
).send();
}
// example: array of custom message options
@Slash("demo-d", { description: "Array of custom message options" })
demoD(interaction: CommandInteraction): void {
new Pagination(interaction, [
{
content: "Page 1",
},
{
content: "Page 2",
embeds: [new EmbedBuilder({ title: "It's me embed 2" })],
},
{
components: [
new ActionRowBuilder<MessageActionRowComponentBuilder>().addComponents(
[
new ButtonBuilder({
customId: "myCustomId",
label: "My Custom Button",
style: "PRIMARY",
}),
]
),
],
content: "Page 3",
embeds: [new EmbedBuilder({ title: "It's me embed 3" })],
},
]).send();
}
}
Name | Type | Default | Description |
---|---|---|---|
enableExit | boolean | false | Enable early exit pagination |
ephemeral | boolean | undefined | Enable ephemeral |
initialPage | number | 0 | Initial page |
onTimeout | Function | undefined | Timeout callback |
showStartEnd | boolean | true | Show start/end |
time | number | 18e5 | Timeout for pagination in ms |
type | PaginationType | BUTTON | Pagination type |
When pagination options are not defined, SELECT_MENU will be used if there are more than 20 pages.
The following options are only available, if you have set type to BUTTON
Name | Type | Description |
---|---|---|
end | ButtonOptions | End Button options |
exit | ButtonOptions | Exit Button options |
next | ButtonOptions | Next Button options |
previous | ButtonOptions | Previous Button options |
start | ButtonOptions | Start Button options |
Name | Type | Description |
---|---|---|
emoji | EmojiIdentifierResolvable | Button Emoji |
id | string | Button Id |
label | string | Button Label |
style | PRIMARY| SECONDARY |SUCCESS | DANGER | Button Style |
The following options are only available, if you have set type to SELECT_MENU
Name | Type | Default | Description |
---|---|---|---|
labels.end | string | End | label |
labels.exit | string | Exit Pagination | label |
labels.start | string | Start | label |
menuId | string | discordx@pagination@menu | Menu custom id |
pageText | string | string[] | Page {page} | Menu page text |
placeholder | string | Select page | Menu placeholder |
Ask in discord server or open a issue
Show your support for discordx by giving us a star on github.
FAQs
Library for creating pagination messages in Discord bots
The npm package @discordx/pagination receives a total of 231 weekly downloads. As such, @discordx/pagination popularity was classified as not popular.
We found that @discordx/pagination demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.