A simple yet powerful discord.js embed pagination package.

Overview

npm npm GitHub Lint Status Build Status

Pagination.djs

A discord.js compatible pagination module. It's a simple and lightweight module to paginate discord embeds.

Read docs here: pagination.djs

Installation

Using npm

npm install pagination.djs

Using yarn

yarn add pagination.djs

Using pnpm

pnpm add pagination.djs

This package needs discord.js version 13.5.0 or above.

Uses

Example shows how to use it with any application command but it's valid for message commands as well. You just need to pass the message in place of interaction.

Basic examples

Paginate through descriptions

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction);

const descriptions = [
  "This is a description.",
  "This is a second description.",
];
pagination.setDescriptions(descriptions);
pagination.render();

Paginate through images

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction);

const images = ["1st image link", "2nd image link"];
pagination.setImages(images);
pagination.render();

Paginate through Fields

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction);

pagination.setFields([
  {
    name: "First",
    value: "First",
  },
  {
    name: "Second",
    value: "Second",
  },
  {
    name: "Third",
    value: "Third",
  },
]);
pagination.paginateFields(true);
pagination.render();

Note: You need to add paginateFields(true) in order to paginate through fields

Paginate through all

You can paginate through descriptions, images, fields all at the same time

const { Pagination } = require("pagination.djs");

const descriptions = [
  "This is a description.",
  "This is a second description.",
];
const images = ["1st image link", "2nd image link"];
const pagination = new Pagination(interaction)
  .setDescriptions(descriptions)
  .setImages(images)
  .setFields([
    {
      name: "First",
      value: "First",
    },
    {
      name: "Second",
      value: "Second",
    },
    {
      name: "Third",
      value: "Third",
    },
  ])
  .paginateFields(true);
pagination.render();

Paginate through multiple embeds

Note: If you use this then all the embed methods (setTitle(), ...) and other pagination methods (setImages(), ...) will be ignored

Paginate through multiple embeds

const { Pagination } = require("pagination.djs");
const { MessageEmbed } = require("discord.js");
const pagination = new Pagination(interaction);

const embeds = [];

for (let i = 0; i <= 5; i++) {
  const newEmbed = new MessageEmbed().setTitle(`Embed ${i + 1}`);
  embeds.push(newEmbed);
}

pagination.setEmbeds(embeds);
pagination.render();

Customize embed

The pagination class extends the discord.js MessageEmbed class. So you can directly use the embed methods.

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction);

pagination.setTitle("Pagination");
pagination.setDescription("This is a description.");

pagination.setColor("#00ff00");
pagination.setFooter("Pagination");
pagination.setTimestamp();

pagination.addFields([
  {
    name: "First",
    value: "First",
  },
  {
    name: "Second",
    value: "Second",
  },
  {
    name: "Third",
    value: "Third",
  },
]);
pagination.paginateFields(true);
pagination.render();

Customization

You can customize the behavior of the pagination by passing the following options:

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction, {
  firstEmoji: "⏮", // First button emoji
  prevEmoji: "◀️", // Previous button emoji
  nextEmoji: "▶️", // Next button emoji
  lastEmoji: "⏭", // Last button emoji
  limit: 5, // number of entries per page
  idle: 30000, // idle time in ms before the pagination closes
  ephemeral: false, // ephemeral reply
  prevDescription: "",
  postDescription: "",
  attachments: [new MessageAttachment()], // attachments you want to pass with the embed
  buttonStyle: "SECONDARY",
  loop: false, // loop through the pages
});

Note: All the options are optional

You can set the options with setOptions() method also

pagination.setOptions(option);

By default embed will show page number and total pages in footer as

Pages: pageNumber/totalPages

You can change it by setting pagination.setFooter("my footer") and you can pass {pageNumber} and {totalPages} which will be replaced with the respective value.

Set emojis

set button emojis with setEmojis() method. You can set any custom or default emojis.

pagination.setEmojis({
  firstEmoji: "⏮",
  prevEmoji: "◀️",
  nextEmoji: "▶️",
  lastEmoji: "⏭",
});

Customize button

Customize label, emoji or style of button using setButtonAppearance() method

pagination.setButtonAppearance({
  first: {
    label: "First",
    emoji: "⏮",
    style: "PRIMARY",
  },
  prev: {
    label: "Prev",
    emoji: "◀️",
    style: "SECONDARY",
  },
  next: {
    label: "Next",
    emoji: "▶️",
    style: "SUCCESS",
  },
  last: {
    label: "Last",
    emoji: "⏭",
    style: "DANGER",
  },
});

Change button styles

Change all the button style

pagination.setButtonStyle("SECONDARY");

Add Action row

Add some action rows above or below the pagination button row

pagination.addActionRow(new MessageActionRow(), "above");

prevDescription and postDescription

Add a fixed prev descriptions or a post descriptions This can only be used when pagination through descriptions else it'll be ignored

const { Pagination } = require("pagination.djs");
const pagination = new Pagination(interaction)
  .setPrevDescription("Previous")
  .setPostDescription("Post")
  .descriptions(["Array of descriptions"]);

pagination.render();

Add multiple authorized users

pagination.setAuthorizedUsers(["user1", "user2"]);
pagination.addAuthorizedUser("user1");
pagination.addAuthorizedUsers(["user3", "user4"]);

Send attachments

Send attachments along with the message You can pass attachments in the setOptions or using setAttachments(), addAttachment() or addAttachments()

pagination.setAttachments([new MessageAttachment()]);

Other send options

By default render() will reply() to the interaction. But if the interaction is already replied or deferred then it'll editReply() instead. You can change the behavior farther more with the other send methods available. Available built-in methods are:

If you want to send it by yourself or send in a different channel then you can follow these steps:

const payloads = pagination.ready();
const message = await interaction.reply(payloads);
pagination.paginate(message);

Preview

image1 image2 image3

Migration guide

If you are migrating from other lib where you use to set multiple embeds at the same time, then we also have a similar method called Pagination#setEmbeds, where you can pass your embeds and use render() method and pagination will take care of the rest.

Note

  • If you have a global Button Interaction handler then you can ignore the interactions with customId starting with paginate-.
  • When adding an additional action row or button, don't set the custom id to any of the following: paginate-first, paginate-prev, paginate-next, paginate-last.

License

MIT

Author

@imranbarbhuiya

Comments
  • Interaction not working

    Interaction not working

    Issue description

    When running, it gives me the error The interaction must be an instance of Interaction or Message. I console logged interaction, which returrned:

    CommandInteraction {
      type: 'APPLICATION_COMMAND',
      id: '1039703993796018296',
      applicationId: '1038820551185141870',
      channelId: '1008934814784688230',    
      guildId: '1008065292355764234',      
      user: User {
        id: '853094730820354079',
        bot: false,
        system: false,
        flags: UserFlags { bitfield: 64 },
        username: '𝗦𝘂𝗿𝗻𝗶𝗸𝗼.'       ,
        discriminator: '8676',
        avatar: '739103d837a0bc55043ed9d7d954e6b2',
        banner: undefined,
        accentColor: undefined
      },
      member: GuildMember {
        guild: Guild {
          id: '1008065292355764234',
          name: 'henrism hub',
          icon: '6efa74d88d75627b3438b8e92828cdb8',
          features: [Array],
          commands: [GuildApplicationCommandManager],
          members: [GuildMemberManager],
          channels: [GuildChannelManager],
          bans: [GuildBanManager],
          roles: [RoleManager],
          presences: PresenceManager {},
          voiceStates: [VoiceStateManager],
          stageInstances: [StageInstanceManager],
          invites: [GuildInviteManager],
          scheduledEvents: [GuildScheduledEventManager],
          available: true,
          shardId: 0,
          splash: null,
          banner: null,
          description: null,
          verificationLevel: 'LOW',
          vanityURLCode: null,
          nsfwLevel: 'DEFAULT',
          premiumSubscriptionCount: 0,
          discoverySplash: null,
          memberCount: 9,
          large: false,
          premiumProgressBarEnabled: false,
          applicationId: null,
          afkTimeout: 300,
          afkChannelId: null,
          systemChannelId: null,
          premiumTier: 'NONE',
          explicitContentFilter: 'ALL_MEMBERS',
          mfaLevel: 'NONE',
          joinedTimestamp: 1667744612490,
          defaultMessageNotifications: 'ONLY_MENTIONS',
          systemChannelFlags: [SystemChannelFlags],
          maximumMembers: 500000,
          maximumPresences: null,
          maxVideoChannelUsers: 25,
          approximateMemberCount: null,
          approximatePresenceCount: null,
          vanityURLUses: null,
          rulesChannelId: '1008934672719429692',
          publicUpdatesChannelId: '1009180226498088980',
          preferredLocale: 'en-US',
          ownerId: '602958162793988246',
          emojis: [GuildEmojiManager],
          stickers: [GuildStickerManager]
        },
        joinedTimestamp: 1660433348494,
        premiumSinceTimestamp: null,
        nickname: null,
        pending: false,
        communicationDisabledUntilTimestamp: null,
        _roles: [ '1008205840228024441' ],
        user: User {
          id: '853094730820354079',
          bot: false,
          system: false,
          flags: [UserFlags],
          username: '𝗦𝘂𝗿𝗻𝗶𝗸𝗼.'       ,
          discriminator: '8676',
          avatar: '739103d837a0bc55043ed9d7d954e6b2',
          banner: undefined,
          accentColor: undefined
        },
        avatar: null
      },
      version: 1,
      appPermissions: Permissions { bitfield: 4398046511103n },
      memberPermissions: Permissions { bitfield: 4398046511103n },
      locale: 'en-US',
      guildLocale: 'en-US',
      commandId: '1039684434015817738',
      commandName: 'cards',
      deferred: false,
      replied: false,
      ephemeral: null,
      webhook: InteractionWebhook { id: '1038820551185141870' },
      options: CommandInteractionOptionResolver {
        _group: null,
        _subcommand: null,
        _hoistedOptions: []
      }
    }
    

    Code sample

    const { EmbedBuilder } = require("discord.js");
    const { Pagination } = require("pagination.djs");
    const sdv = require("sportsdataverse");
    const User = require("../schemas/User.js");
    
    module.exports = {
      name: "cards",
      description: "Displays your current cards",
      options: [],
      run: async (client, interaction) => {
        console.warn(interaction);
        const persons = await User.where("userid").equals(interaction.user.id);
        var user;
        if (persons.length === 0) {
          user = new User({
            userId: interaction.user.id,
            username: `${interaction.user.username}#${interaction.user.discriminator}`,
            cards: [],
          }).save();
        } else {
          user = persons[0];
        }
    
        var cards = user.cards;
        var embeds = [];
        for (const card of cards) {
          var player = card;
          var g = await sdv.nba.getTeamInfo(player.teamId);
          var ga = g.team;
          var embed = new EmbedBuilder()
            .setTitle(`${player.name} | ${player.team}`)
            .addFields(
              { name: "__`Name`__", value: player.name, inline: true },
              { name: "__`Position`__", value: player.position, inline: true },
              { name: "__`Team`__", value: player.team, inline: true },
              { name: "__`Weight`__", value: player.weight, inline: true },
              { name: "__`Height`__", value: player.height, inline: true },
              {
                name: "__`Birthplace`__",
                value: `${player.birthplace.city}, ${player.birthplace.country}`,
                inline: true,
              }
            )
            .setTimestamp()
            .setThumbnail(ga.logos[0].href)
            .setColor(`#${ga.color}`)
            .setFooter({ text: `${player.id} | Steps` });
    
          if (player.headshot !== null) embed.setImage(player.headshot);
          embeds.push(embed);
        }
    
        const pagination = new Pagination(interaction);
        pagination.setEmbeds(embeds);
    
        //await pagination.render();
      },
    };
    

    Package version

    ├── @voiddevs.org/[email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] └── [email protected]

    Node.js version

    v18.8.0

    Operating system

    WIndows

    I have tested this issue on a next release

    [email protected]

    opened by Barnac1ed 10
  • Discord.js v14 problem.

    Discord.js v14 problem.

    Here error:

    /Users/admin/Documents/AnBot/node_modules/@discordjs/rest/dist/index.js:744
            throw new DiscordAPIError(data, "code" in data ? data.code : data.error, status, method, url, requestData);
                  ^
    
    DiscordAPIError[50035]: Invalid Form Body
    data.embeds[0][LIST_ITEM_VALUE_REQUIRED]: List item values of ModelType are required
        at SequentialHandler.runRequest (/Users/admin/Documents/AnBot/node_modules/@discordjs/rest/dist/index.js:744:15)
        at processTicksAndRejections (node:internal/process/task_queues:96:5)
        at async SequentialHandler.queueRequest (/Users/admin/Documents/AnBot/node_modules/@discordjs/rest/dist/index.js:556:14)
        at async REST.request (/Users/admin/Documents/AnBot/node_modules/@discordjs/rest/dist/index.js:990:22)
        at async ChatInputCommandInteraction.reply (/Users/admin/Documents/AnBot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:110:5)
        at async Pagination.reply (/Users/admin/Documents/AnBot/node_modules/pagination.djs/dist/index.js:497:21) {
      rawError: {
        code: 50035,
        errors: {
          data: { embeds: { '0': { _errors: [Array] } } }
        },
        message: 'Invalid Form Body'
      },
      code: 50035,
      status: 400,
      method: 'POST',
      url: 'https://discord.com/api/v10/interactions/998100034346307694/aW50ZXJhY3Rpb246OTk4MTAwMDM0MzQ2MzA3Njk0OmJIVDgzVU1ubFpMeXhRRTJ5ZkRzZkRuVzAwTkRWbnY2V3FzUXl3TXhQT2g2SDVDcTZHZkRMeWE2TnV1VHpBTzNUaFVka29CT05vdlFNNjNTZHhjNXV5ZzFwVFFOdVdWYXZMQjd2RU9QSEROSkJxdWtNTjU3OHFLYzRkd1RxVjdj/callback',
      requestBody: {
        files: [],
        json: {
          type: 4,
          data: {
            content: '',
            tts: false,
            nonce: undefined,
            embeds: [ {} ],
            components: [ { type: 1, components: [Array] } ],
            username: undefined,
            avatar_url: undefined,
            allowed_mentions: undefined,
            flags: undefined,
            message_reference: undefined,
            attachments: [],
            sticker_ids: undefined
          }
        }
      }
    }
    

    When i use:

            const pagination = new Pagination(interaction);
            pagination.setDescriptions(servers) // servers is a array
            pagination.render();
    
    opened by hocsinhgioitoan 8
  • Refactoring for cleaner library

    Refactoring for cleaner library

    Hey there!

    Thank you for this library. As mentioned in an earlier communication with you on Discord, I think it is necessary to have a cleaner structure in order for you and other possible contributors to maintain this package.

    As such, I have decided to start some work on a fork of your project. Here below may you find a non-exhaustive list of the changes.

    I would also highly suggest to add unit tests to this project so that any future changes are covered against regressions and bugs. This would also help you structure your modules more correctly and avoid files that have more than a thousand lines. I have opened the issue #6 to talk about this addition.

    Cheers :beers:


    Added

    Changed

    • [x] Moved types to their own files in "types" folder
    • [x] Divided "Pagination" class in different services to apply SOLID principles
    • [x] Set the goFirst, goLast, goNext and goPrev methods as protected ⚠️ BREAKING CHANGE
    • [x] Set _readyActionRows and _readyPayloads methods as private ⚠️ BREAKING CHANGE

    Closes #5

    opened by HunteRoi 5
  • Add the ability to defer the reply first

    Add the ability to defer the reply first

    At the moment, the library appears to only support .reply()-ing to the interaction. This pulls up an error when you first have to defer your reply, perhaps to fetch content that may take a while to return. I think it would be a good idea to add support for the people who have already replied to their interaction by deferring it.

    opened by newtykins 4
  • Upgrade to support discord v14

    Upgrade to support discord v14

    Hello, when using this package my bot no longer launches because of the class MessageEmbed no longer being in discord.js v14.

     Class extends value undefined is not a constructor or null
    
    opened by ThatGuyJamal 3
  • chore(deps): update dependency discord.js to >=13.7.0

    chore(deps): update dependency discord.js to >=13.7.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | discord.js (source) | >=13.5.0 -> >=13.7.0 | age | adoption | passing | confidence |


    Release Notes

    discordjs/discord.js

    v13.7.0

    Compare Source

    Bug Fixes

    Documentation

    Features

    Refactor

    Typings

    v13.6.0

    Compare Source

    Documentation

    Features

    v13.5.1

    Compare Source

    Bug Fixes

    Documentation


    Configuration

    📅 Schedule: "before 12pm on Sunday" (UTC).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Configure Renovate

    Configure Renovate

    WhiteSource Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • .github/workflows/build.yml (github-actions)
    • .github/workflows/codeql-analysis.yml (github-actions)
    • .github/workflows/deploy.yml (github-actions)
    • .github/workflows/lint.yml (github-actions)
    • .github/workflows/release.yml (github-actions)
    • package.json (npm)

    Configuration Summary

    Based on the default config's presets, Renovate will:

    • Start dependency updates only once this onboarding PR is merged
    • Enable Renovate Dependency Dashboard creation
    • If semantic commits detected, use semantic commit type fix for dependencies and chore for all others
    • Ignore node_modules, bower_components, vendor and various test/tests directories
    • Autodetect whether to pin dependencies or maintain ranges
    • Rate limit PR creation to a maximum of two per hour
    • Limit to maximum 10 open PRs at any time
    • Group known monorepo packages together
    • Use curated list of recommended non-monorepo package groupings
    • Fix some problems with very old Maven commons versions
    • Ignore spring cloud 1.x releases
    • Ignore web3j 5.0.0 release
    • Ignore http4s digest-based 1.x milestones
    • Use node versioning for @types/node
    • Limit concurrent requests to reduce load on Repology servers until we can fix this properly, see issue 10133
    • Do not upgrade from Alpine stable to edge

    🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the renovate.json in this branch with your custom config and the list of Pull Requests in the "What to Expect" section below will be updated the next time Renovate runs.


    What to Expect

    With your current configuration, Renovate will create 2 Pull Requests:

    chore(deps): pin dependencies
    chore(deps): update actions/checkout action to v3
    • Schedule: ["at any time"]
    • Branch name: renovate/actions-checkout-3.x
    • Merge into: main
    • Upgrade actions/checkout to v3

    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update dependency eslint to ^8.31.0

    chore(deps): update dependency eslint to ^8.31.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | eslint (source) | ^8.30.0 -> ^8.31.0 | age | adoption | passing | confidence |


    Release Notes

    eslint/eslint

    v8.31.0

    Compare Source

    Features

    • 52c7c73 feat: check assignment patterns in no-underscore-dangle (#​16693) (Milos Djermanovic)
    • b401cde feat: add options to check destructuring in no-underscore-dangle (#​16006) (Morten Kaltoft)
    • 30d0daf feat: group properties with values in parentheses in key-spacing (#​16677) (Francesco Trotta)

    Bug Fixes

    • 35439f1 fix: correct syntax error in prefer-arrow-callback autofix (#​16722) (Francesco Trotta)
    • 87b2470 fix: new instance of FlatESLint should load latest config file version (#​16608) (Milos Djermanovic)

    Documentation

    Chores


    Configuration

    📅 Schedule: Branch creation - "before 12pm on Sunday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • chore(deps): update yarn to v3.3.1

    chore(deps): update yarn to v3.3.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | yarn | 3.3.0 -> 3.3.1 | age | adoption | passing | confidence |


    Release Notes

    yarnpkg/berry

    v3.3.1

    Compare Source


    Configuration

    📅 Schedule: Branch creation - "before 12pm on Sunday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • chore(deps): update all non-major dependencies

    chore(deps): update all non-major dependencies

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | actions/checkout | action | minor | v3.1.0 -> v3.2.0 | age | adoption | passing | confidence | | eslint (source) | devDependencies | minor | ^8.29.0 -> ^8.30.0 | age | adoption | passing | confidence | | typedoc (source) | devDependencies | patch | ^0.23.21 -> ^0.23.23 | age | adoption | passing | confidence |


    Release Notes

    actions/checkout

    v3.2.0

    Compare Source

    What's Changed
    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3...v3.2.0

    eslint/eslint

    v8.30.0

    Compare Source

    Features

    Bug Fixes

    • 1a327aa fix: Ensure flat config unignores work consistently like eslintrc (#​16579) (Nicholas C. Zakas)
    • 9b8bb72 fix: autofix recursive functions in no-var (#​16611) (Milos Djermanovic)

    Documentation

    Chores

    TypeStrong/TypeDoc

    v0.23.23

    Compare Source

    Features
    • Added ts.Signature to emitted EVENT_CREATE_SIGNATURE event, #​2002.
    Bug Fixes
    • Links to members hidden by filter settings now temporarily override the filter, #​2092.
    • If src/ and src/x are specified as entry points, src/ will no longer be ignored, #​2121.

    v0.23.22

    Compare Source

    Features
    • Add support for defining the kind sort order, #​2109.
    Bug Fixes
    • Normalize all file paths on Windows, #​2113.
    • Fix @link tags within lists, #​2103.

    Configuration

    📅 Schedule: Branch creation - "before 12pm on Sunday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • chore(deps): update github/codeql-action digest to 959cbb7

    chore(deps): update github/codeql-action digest to 959cbb7

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github/codeql-action | action | digest | a669cc5 -> 959cbb7 |


    Configuration

    📅 Schedule: Branch creation - "before 12pm on Sunday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Awaiting Schedule

    These updates are awaiting their schedule. Click on a checkbox to get an update now.

    • [ ] chore(deps): update dependency husky to ^8.0.3

    Detected dependencies

    github-actions
    .github/workflows/auto-deprecate.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    .github/workflows/codeql-analysis.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • github/codeql-action v2@959cbb7472c4d4ad70cdfe6f4976053fe48ab394
    • github/codeql-action v2@959cbb7472c4d4ad70cdfe6f4976053fe48ab394
    • github/codeql-action v2@959cbb7472c4d4ad70cdfe6f4976053fe48ab394
    .github/workflows/continuius-delivery.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    .github/workflows/continuous-integration.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    .github/workflows/deploy-docs.yml
    • actions/checkout v3.2.0@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    • JamesIves/github-pages-deploy-action v4.4.1@ba1486788b0490a235422264426c45848eac35c6
    .github/workflows/deprecate-on-merge.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • actions/setup-node v3@8c91899e586c5b171469028077307d293428b516
    .github/workflows/labelsync.yml
    • actions/checkout v3@755da8c3cf115ac066823e79a1e1788f8940201b
    • crazy-max/ghaction-github-labeler v4@3de87da19416edc45c90cd89e7a4ea922a3aae5a
    npm
    package.json
    • @commitlint/cli ^17.3.0
    • @commitlint/config-conventional ^17.3.0
    • @favware/cliff-jumper ^1.9.0
    • @favware/npm-deprecate ^1.0.7
    • cz-conventional-changelog ^3.3.0
    • discord.js ^14.7.1
    • eslint ^8.31.0
    • eslint-config-mahir ^0.0.18
    • husky ^8.0.2
    • lint-staged ^13.1.0
    • pinst ^3.0.0
    • prettier ^2.8.1
    • tsup ^6.5.0
    • typedoc ^0.23.23
    • typescript ^4.9.4
    • ansi-regex ^5.0.1
    • minimist ^1.2.7
    • yarn 3.3.1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
  • Feature Request: add unit tests

    Feature Request: add unit tests

    Unit testing this library would be a great addition for both you, your maintainers and people using the Npm package.

    I recommend looking into Jest as it is well documented and also open-source.

    help wanted tests 
    opened by HunteRoi 1
Releases(v4.0.4)
  • v4.0.4(Oct 12, 2022)

  • v4.0.3(Sep 23, 2022)

  • v4.0.2(Sep 11, 2022)

  • v4.0.1(Jul 19, 2022)

  • v4.0.0(Jul 18, 2022)

    4.0.0 - (2022-07-18)

    🚀 Features

    • Djs/v14 support (#23) (9d4ade4)
      • 💥 BREAKING CHANGE: dropped support for discord.js v13, v14 is required.
      • 💥 BREAKING CHANGE: Button style is changed from string to discord.js ButtonStyle enum.
      • 💥 BREAKING CHANGE: When passing interaction to Pagination, It won't return Message in render, reply methods but it'll return InteractionResponse<true> | Message<true>
      • 💥 BREAKING CHANGE: Removed singular methods add*.
    - pagination.addImage(imageLink)
    + pagination.addImages(imageLink)
    
    • applies to other add* methods too.
    • all the add*s and set*s methods accepts both rest and array.
      • 💥 BREAKING CHANGE: ExtraRowPosition is an enum now.
    - pagination.addActionRow(new MessageActionRow(), 'above');
    + pagination.addActionRows([new ActionRowBuilder()], ExtraRowPosition.Above);
    
    Source code(tar.gz)
    Source code(zip)
  • v3.6.0(Jun 23, 2022)

    [3.6.0]

    (https://github.com/imranbarbhuiya/pagination.djs/tree/v3.6.0) - (2022-06-23)

    🏠 Refactor

    • Use filter instead (99c396f)
    • Pagination: Split into 2 classes (f1e8542)
    • Move types and classes to their own files (e9213ca)

    🐛 Bug Fixes

    📝 Documentation

    🚀 Features

    • Send index and array in setEmbeds (5424e42)
    • Allow setting buttons (908aa44)
    • Add embed template (cf2c944)
    • Allow embed templating (4cd469e)
    • Add content in pagination (6202890)
    • Sets a few methods as private or protected (f372d87)
    Source code(tar.gz)
    Source code(zip)
  • v3.5.3(May 24, 2022)

    What's Changed

    • chore: setup repo again by @imranbarbhuiya in https://github.com/imranbarbhuiya/pagination.djs/pull/11
    • chore(deps): pin dependencies by @renovate in https://github.com/imranbarbhuiya/pagination.djs/pull/13
    • chore(deps): update all non-major dependencies by @renovate in https://github.com/imranbarbhuiya/pagination.djs/pull/14
    • chore: setup all contributor by @imranbarbhuiya in https://github.com/imranbarbhuiya/pagination.djs/pull/15
    • fix: bump djs and fix typings by @imranbarbhuiya in https://github.com/imranbarbhuiya/pagination.djs/pull/16
    • chore: add label sync by @imranbarbhuiya in https://github.com/imranbarbhuiya/pagination.djs/pull/17

    New Contributors

    • @imranbarbhuiya made their first contribution in https://github.com/imranbarbhuiya/pagination.djs/pull/11
    • @renovate made their first contribution in https://github.com/imranbarbhuiya/pagination.djs/pull/13

    Full Changelog: https://github.com/imranbarbhuiya/pagination.djs/compare/v3.5.2...v3.5.3

    Source code(tar.gz)
    Source code(zip)
  • v3.5.2(Mar 17, 2022)

  • v3.5.1(Mar 16, 2022)

  • v3.5.0(Mar 16, 2022)

    Full Changelog: https://github.com/imranbarbhuiya/pagination.djs/compare/v3.4.5...v3.5.0 Now pagination.djs uses tsup to build. provide both cjs and esm build

    Source code(tar.gz)
    Source code(zip)
  • v3.4.5(Feb 28, 2022)

  • v3.4.4(Feb 20, 2022)

  • v3.4.3(Feb 19, 2022)

  • v3.4.2(Feb 19, 2022)

  • v3.4.1(Feb 19, 2022)

  • v3.4.0(Feb 19, 2022)

  • v3.3.0(Feb 3, 2022)

  • v3.2.2(Jan 26, 2022)

  • v3.2.1(Jan 26, 2022)

  • v3.2.0(Jan 26, 2022)

  • v3.1.1(Jan 23, 2022)

    What's Changed

    • Add support for custom Embeds by @newtykins in https://github.com/imranbarbhuiya/pagination.djs/pull/9

    New Contributors

    • @newtykins made their first contribution in https://github.com/imranbarbhuiya/pagination.djs/pull/9

    Full Changelog: https://github.com/imranbarbhuiya/pagination.djs/compare/v3.1.0...v3.1.1

    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Jan 19, 2022)

  • v3.0.1(Jan 7, 2022)

  • v3.0.0(Jan 5, 2022)

    What's Changed

    • Refactoring for cleaner library by @HunteRoi in https://github.com/imranbarbhuiya/pagination.djs/pull/4

    New Contributors

    • @HunteRoi made their first contribution in https://github.com/imranbarbhuiya/pagination.djs/pull/4

    Full Changelog: https://github.com/imranbarbhuiya/pagination.djs/compare/v2.2.5...v3.0.0

    Source code(tar.gz)
    Source code(zip)
  • v2.2.5(Jan 3, 2022)

  • v2.2.4(Jan 3, 2022)

  • v2.2.3(Jan 3, 2022)

  • v2.2.2(Jan 3, 2022)

  • v2.2.1(Jan 3, 2022)

  • v2.1.0(Jan 2, 2022)

    Full Changelog: https://github.com/imranbarbhuiya/pagination.djs/compare/v2.0.2...v2.1.0

    You can now add multiple authorizedUsers using setAuthorisedUsers method

    Source code(tar.gz)
    Source code(zip)
Owner
Parbez
Full-Stack Web developer | App developer | Ethical hacker
Parbez
🍉 Reactive & asynchronous database for powerful React and React Native apps ⚡️

A reactive database framework Build powerful React and React Native apps that scale from hundreds to tens of thousands of records and remain fast ⚡️ W

Nozbe 8.8k Jan 5, 2023
🔥 Dreamy-db - A Powerful database for storing, accessing, and managing multiple database.

Dreamy-db About Dreamy-db - A Powerful database for storing, accessing, and managing multiple databases. A powerful node.js module that allows you to

Dreamy Developer 24 Dec 22, 2022
Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express.

Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express.

Jared Hanson 5 Oct 11, 2022
Microsoft-store - Microsoft Store package for LTSC.

Microsoft Store Microsoft Store package for Windows LTSC. Usage Just download the release and double click the exe file. Can be used in Windows LTSC 2

fernvenue 7 Jan 2, 2023
⛰ "core" is the core component package of vodyani, providing easy-to-use methods and AOP implementations.

Vodyani core ⛰ "core" is the core component package of vodyani, providing easy-to-use methods and AOP implementations. Installation npm install @vodya

Vodyani 25 Oct 18, 2022
StashQL is a light-weight, open-source npm package that improves the speed of your GraphQL queries in your application.

Table of Contents What is StashQL? Install Getting Started Queries Mutations refillCache clearRelatedFields Logging The Team What is StashQL? StashQL

OSLabs Beta 67 Sep 30, 2022
A fast, synchronized and dynamic query builder package.

@ssibrahimbas/query A fast, synchronized and dynamic query builder package. What is? In short, the query builder. You can write complex and parameteri

Sami Salih İbrahimbaş 7 Jun 13, 2022
It is a Discord bot whose goal is to make it easier for server owners to create a so-called Staff/Mode Application

Application Bot MeCodes Application Bot It is a Discord bot whose goal is to make it easier for server owners to create a so-called administration sub

null 26 Dec 12, 2022
An easy-to-use discord bot including database, slash commands and context menus !

Discord Bot Template An easy-to-use discord bot using Discord.JS V13. Wiki Includes: Slash commands Database User commands and more in future Requirem

Gonz 108 Dec 28, 2022
open source ffxiv community discord bot that's incredibly easy to self-host

Venat Venat is an open-source Discord bot for the Final Fantasy XIV community that is incredibly easy to self-host. Description We aim to offer the fo

The Convocation 16 Jun 9, 2022
A simple Node.js ORM for PostgreSQL, MySQL and SQLite3 built on top of Knex.js

bookshelf.js Bookshelf is a JavaScript ORM for Node.js, built on the Knex SQL query builder. It features both Promise-based and traditional callback i

Bookshelf.js 6.3k Jan 2, 2023
Simple key-value storage with support for multiple backends

Simple key-value storage with support for multiple backends Keyv provides a consistent interface for key-value storage across multiple backends via st

Luke Childs 2k Jan 7, 2023
A simple url shorter API built with nodejs running on Kubernetes in Google Cloud, using PostgreSQL for storage and cloud sql proxy.

Simple URL Shorter - Google Cloud - Kubernetes A simple url shorter API built with nodejs running on Kubernetes in Google Cloud, using PostgreSQL for

null 3 Nov 25, 2021
This is very simple game catch word with JavaScript and Jquery

Catch-Word-js This is very simple game catch word with JavaScript and Jquery install and run guide! download project zip! extract zip file on any dire

Jortsoft 14 Nov 26, 2022
This is a repository that contains an simple NestJS API about Movies developed at Blue EdTech.

NestJS Movies Technologies and requirements NestJS JavaScript TypeScript Prisma MySQL Project This is a repository that contains an simple NestJS API

Isabella Nunes 2 Sep 28, 2021
curl for GraphQL with autocomplete, subscriptions and GraphiQL. Also a dead-simple universal javascript GraphQL client.

graphqurl graphqurl is a curl like CLI for GraphQL. It's features include: CLI for making GraphQL queries. It also provisions queries with autocomplet

Hasura 3.2k Jan 3, 2023
Use Pinata (IPFS) as a simple datastore

?? Pinatastore A simple module to store and retrieve simple JSON data from a decentralized databse. (Pinata IPFS) Pinatastore uses a structure similar

Navindu Amarakoon 3 Jan 10, 2022
Simple, buffered, line-by-line file reader with customizable buffer size.

simple-line-reader Simple, buffered, line-by-line file reader with customizable buffer size. Install npm install simple-line-reader yarn add simple-li

null 3 Jan 15, 2022
Dead Simple Postgres Data Viewer and Query Runner

Dead Simple Postgres Data Viewer and Query Runner Environment Variables GITHUB_CLIENT_ID Github Client ID of the Oauth Application for protecting your

Mahesh C. Regmi 7 Aug 22, 2022