1.0.2 • Published 2 years ago

discord-pager v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

Create multi-page discord embeds with ease. Compatible with discord.js.

Example Code:

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.