npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

djs-embedpagination

v1.0.2

Published

Allows you to create a simple and fully customizable embed pagination with discord.js v14.

Readme

EmbedPagination

About

Allows you to create a simple and fully customizable embed pagination with discord.js v14.

Help

Need help ? Join my Discord server and send me a private message ! (Cobra//#5239 ; 619838036846575617)

Docs

Create the pagination instance with your discord's client's user's id

new EmbedPagination(clientId: string)

Set the user who own this pagination, and the optional error message for others If no errorMessage provided, everyone can use the pagination

setUserId(userId: Snowflake, errorMessage?: string): this

Set the interaction or the message

.setInteraction(interaction): this
or
.setMessage(message): this

Set the longevity (default to 1_200_000)

.setTime(time: number): this

Set the navigation buttons labels

.setLabels(label0: string, label1: string): this

Set additionnal rows to the message

.setRows(rows: ActionRowBuilder<ButtonBuilder | SelectMenuBuilder>[]): this

Add an embed

addEmbed(embed: EmbedBuilder | ((instance: this) => EmbedBuilder)): this

Set embeds

setEmbeds(embeds: (EmbedBuilder | ((instance: this) => EmbedBuilder))[]): this

Add a button

addButton(button: PaginationButton): this

Set buttons

setButtons(buttons: PaginationButton[]): this

If true and if the pagination only contains 1 page, remove the navigation buttons

autoRemoveUpdateButtons(value: boolean): this

Disable the navigation buttons

disableUpdateButtons(state: boolean): this

Disable all the message components at the end of the collector

disableAtEnd(state: boolean): this

Set a callback executed at each page change

setUpdateCallback(callback: (instance: this, p: number) => void): this

Set a callback for your custom components

setSpecialCallback(callback: (instance: this, i: MessageComponentInteraction | SelectMenuInteraction) => void): this

Update the pagination

update(): void

Start the pagination

start(page?: number): Promise<void>

Change the current page of the pagination (can be use in the callbacks)

changePage(type: string, interaction: MessageComponentInteraction): void

Basic Example (Slash Command)

const { EmbedBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
const { EmbedPagination } = require("djs-embedpagination");

const embed = new EmbedBuilder()
    .setColor("#2a90fe")
    .setTitle("First embed")
    .setDescription("If you see this, the embedpagination works !");

const embed2 = new EmbedBuilder()
    .setColor("#2a90fe")
    .setTitle("Second embed")
    .setDescription("Hello world !");

new EmbedPagination(client.user.id)
    .setUserId(interaction.user.id, "You can't interact with this message !")
    .setInteraction(interaction)
    .setLabels("Previous Page", "Next Page")
    .setEmbeds([embed, embed2])
    .addButton({
        position: "Right",
        button: new ButtonBuilder()
            .setCustomId("custom-button")
            .setLabel("Custom button")
            .setStyle(ButtonStyle.Secondary)
    })
    .setSpecialCallback((instance, i) => i.reply("Clicked !"))
    .start();

Result: