# discord-pager

> A simple way of creating embed page menus for use with discord.js.

Latest version **1.0.2** (published 2022-02-21) · ISC license · 0 weekly downloads

## Install

```sh
npm install discord-pager
pnpm add discord-pager
yarn add discord-pager
bun add discord-pager
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2022-02-21 |
| First published | 2022-02-21 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 5.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | M1nx |
| Maintainers | m1nx |
| Keywords | discord.js, discordembeds, discordpages, embedpages, discordpages |

## Links

- npm: https://www.npmjs.com/package/discord-pager
- npm.io page: https://npm.io/package/discord-pager

## Dependencies (1)

- [discord.js](https://npm.io/package/discord.js.md) ^13.6.0

## Recent versions

- 1.0.2 (latest) — 2022-02-21
- 1.0.1 — 2022-02-21
- 1.0.0 — 2022-02-21

## README

## Create multi-page discord embeds with ease. Compatible with discord.js.
Example Code:

```js
let {Client, Intents, MessageEmbed} = require('discord.js')
let Pager = require('discord-pager')
require('dotenv').config()

const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS] });


// Emote name and ID for example: :next:123456789012345678 - Bot has to be a member of the guild containing the emotes
let pager = new Pager({
    next: ':name:id',
    prev: ':name:id'
})

// basic embeds
const exampleEmbed = new MessageEmbed().setTitle('page 1').setFooter({text: ''})
const exampleEmbed2 = new MessageEmbed().setTitle('page 2').setFooter({text: ''})

// basic embeds into array
let testArray = [exampleEmbed, exampleEmbed2]


client.on('messageCreate', (message) =>{
    if(message.content !== 'test!test') return
    let menu = new pager.menu(testArray, message.author.id, false) // create menu
    message.reply({embeds: [menu.embeds[menu.currentEmbed]]}).then((msg)=>{
        pager.save(msg, menu) // save page into pages map
    })
})

client.on('messageReactionAdd', async (reaction,clicker) => {
    if(!reaction.message) return; // Error checking nonsense
    let menu = pager.fetch(reaction.message.id) // Try to fetch the menu for the message
    if(!menu) return; // If no menu found then the bot just idles
    if(clicker.id !== client.user.id) await reaction.users.remove(clicker.id); // Removes all reactions not by the bot regardless of if any code runs
    if(clicker.bot) return; // Bots are not allowed to run any code XD
    if(menu.authorOnly && menu.author !== clicker.id) return; // If menu is locked to author then the menu will not update for random presses

    let emote = `:${reaction.emoji.name}:${reaction.emoji.id}` // formatting the emoji to check against the config versions
    if(emote === pager.emotes.next){
        let updatedEmbed = await menu.nextEmbed() // fetches the next embed in the menu and updates the currentEmbed index
        if(updatedEmbed){
            await reaction.message.edit({embeds: [updatedEmbed]}) // update the message to the new embed
        }
    }
    else if (emote === pager.emotes.prev){
        let updatedEmbed = await menu.prevEmbed() // fetches the previous embed in the menu and updates the currentEmbed index
        if(updatedEmbed){
            await reaction.message.edit({embeds: [updatedEmbed]}) // update the message to the new embed
        }
    }


})


client.on('ready', () =>{
    console.log(`Ready as ${client.user.tag}!`) // sign in woo
})

client.login(process.env.TOKEN)

```

M1nx 2022 <3 for reading.

---
_Source: https://npm.io/package/discord-pager · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
