UNPKG

discord-embeds-pages-buttons

Version:
112 lines (111 loc) 4.04 kB
exports.pages = async function(message, pages, settings){ const Discord = require("discord.js"); const disbut = require("discord-buttons"); const client = message.client if(!settings){ settings = { timeout: 60*1000, buttons: { delete: { style: "red", emoji: "❌", text: "Delete" }, forward: { style: "green", emoji: "⏩", text: "Forward" }, backward: { style: "green", emoji: "⏪", text: "Backward" } }, extraRows: [], extraPos: "below", message: "", ephemeral: "You do not own this embed!" } } var timeForStart = Date.now(); var timeout = settings.timeout; const pageMovingButtons1 = new disbut.MessageButton() .setID(`forward_button_embed`) .setLabel((settings.buttons.forward.text) ? settings.buttons.forward.text : "") .setEmoji(settings.buttons.forward.emoji) .setStyle(settings.buttons.forward.style) const pageMovingButtons2 = new disbut.MessageButton() .setID(`back_button_embed`) .setLabel((settings.buttons.backward.text) ? settings.buttons.backward.text: "") .setEmoji(settings.buttons.backward.emoji) .setStyle(settings.buttons.backward.style) var pageMovingButtons = new disbut.MessageActionRow() .addComponent(pageMovingButtons2) if(settings.buttons.delete){ const deleteEmbedButton = new disbut.MessageButton() .setID("delete_button_embed") .setLabel((settings.buttons.delete.text) ? settings.buttons.delete.text: "") .setEmoji(settings.buttons.delete.emoji) .setStyle(settings.buttons.delete.style) pageMovingButtons.addComponent(deleteEmbedButton) } pageMovingButtons.addComponent(pageMovingButtons1) var currentPage = 0; var ar = settings.extraRows; if(settings.extraPos == "above"){ ar.push(pageMovingButtons) } else{ ar.splice(0,0,pageMovingButtons) } var m; if(settings.message){ m = await message.channel.send(settings.message, {components: ar, embed: await pages[0]}); } else{ m = await message.channel.send({components: ar, embed: await pages[0]}) } client.on("clickButton", async b=>{ if(Date.now() - timeForStart >= timeout)return; if(b.message.id == m.id && b.clicker.user.id == message.author.id){ if(b.id == "back_button_embed"){ if(currentPage - 1 < 0){ currentPage = pages.length - 1 } else{ currentPage -= 1; } } else if(b.id == "forward_button_embed"){ if(currentPage + 1 == pages.length){ currentPage = 0; } else{ currentPage += 1; } } else if(b.id == "delete_button_embed"){ try{ m.delete(); } catch (err){ console.log(err) } } if(b.id == "back_button_embed" || b.id == "forward_button_embed"){ if(settings.message){ m.edit(settings.message, {components: ar, embed: await pages[currentPage]}); } else{ m.edit({components: ar, embed: await pages[currentPage]}) } try{ b.reply.defer(true); } catch{ try{ b.defer(true); } catch (err){ console.log("Cannot defer button!\nFull error:\n" + err) } } } } else{ if(settings.ephemeral){ await b.reply.send(settings.ephemeral, {ephemeral: true}) } } }) }