discord-embeds-pages-buttons
Version:
Embed pages with buttons for swapping pages
112 lines (111 loc) • 4.04 kB
JavaScript
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})
}
}
})
}