UNPKG

discord-listing-embed-pages

Version:

Create a discord embed pages using this package

123 lines (116 loc) 6.08 kB
async function embedPages(client, message, array, options) { if (!typeof options === 'object') return console.log("Options must be an array") const { MessageEmbed } = require('discord.js') let footer = options.footer || '' title = options.title || '' footerImage = options.footerImage || null color = options.color || null perPage = options.perPage || 4 thumbnail = options.thumbnail || null header = options.header || '' fields = options.fields || [] joinBy = options.joinBy || '\n' image = options.image || null author = options.author || '' authorImage = options.authorImage || null timestamp = options.timestamp || false user = options.user || message.author emojis = options.emojis || { first_track: '⏮️', previous_track: '◀', next_track: '▶', last_track: '⏭️', delete: '🗑', jump_to: '↗️' } let page = 1; let first = 0; let second = perPage; let embed = new MessageEmbed() .setTitle(title) .setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage) .setColor(color) .setThumbnail(thumbnail) .addFields(fields) .setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`) .setAuthor(author, authorImage) if (timestamp) embed.setTimestamp() let msg = await message.channel.send(embed) if (array.length > perPage) { await msg.react(emojis.first_track) await msg.react(emojis.previous_track) if (Math.ceil(array.length / perPage) > 3) await msg.react(emojis.jump_to) await msg.react(emojis.next_track) await msg.react(emojis.last_track) await msg.react(emojis.delete) const collector = msg.createReactionCollector((reaction, member) => member.id === user.id, { time: 120000 }); collector.on('collect', async r => { collector.resetTimer() const reactionadd = array.slice(first + perPage, second + perPage).length; const reactionremove = array.slice(first - perPage, second - perPage).length; if (r.emoji.toString() === emojis.next_track && reactionadd !== 0) { page++ r.users.remove(message.author.id); first += perPage; second += perPage; embed.setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`); embed.setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage); msg.edit(embed) } else if (r.emoji.toString() === emojis.previous_track && reactionremove !== 0) { r.users.remove(message.author.id); page-- first -= perPage; second -= perPage; embed.setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`); embed.setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage); msg.edit(embed) } else if (r.emoji.toString() === emojis.first_track) { r.users.remove(message.author.id); page = 1; first = 0; second = perPage; embed.setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`); embed.setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage); msg.edit(embed) } else if (r.emoji.toString() === emojis.last_track) { r.users.remove(message.author.id); page = Math.ceil(array.length / perPage); first = (page * perPage) - perPage; second = page * perPage; embed.setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`); embed.setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage); msg.edit(embed) } else if (r.emoji.toString() === emojis.delete) { msg.reactions.removeAll(); } else if (r.emoji.toString() === emojis.jump_to) { if (Math.ceil(array.length / perPage) > 3) { r.users.remove(message.author.id) let mesg = await message.channel.send(`${message.author.toString()} Enter a page number`) let coll = await message.channel.awaitMessages(x => x.author.id === message.author.id, { time: 10000, max: 1 }) if (!coll.size) mesg.delete() if (Number(coll.first().content) && !coll.first().content.includes('.') && Math.ceil(array.length / perPage) >= Number(coll.first().content)) { mesg.delete() page = Number(coll.first().content) first = perPage * (parseInt(page) - 1) second = perPage * parseInt(page) embed.setDescription(`${header ? `${header}\n` : ""}${array.slice(first, second).join(joinBy)}`); embed.setFooter(`${footer.length ? `${footer} |` : ''} Page: ${page}/${Math.ceil(array.length / perPage)}`, footerImage); msg.edit(embed) coll.first().delete() } else { mesg.delete() coll.first().delete() } } } }) collector.on('end', (_, reason) => { if (reason === "time") msg.reactions.removeAll(); }) } } module.exports = { embedPages }