From dea160c73bcb65d99cedc7e50bf269029a2df39f Mon Sep 17 00:00:00 2001 From: Essem Date: Fri, 6 Aug 2021 12:12:59 -0500 Subject: [PATCH] Make pagination only apply when there's more than a single page --- utils/pagination/pagination.js | 128 +++++++++++++++++---------------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/utils/pagination/pagination.js b/utils/pagination/pagination.js index 49e1437..20e0b97 100644 --- a/utils/pagination/pagination.js +++ b/utils/pagination/pagination.js @@ -16,69 +16,71 @@ module.exports = async (client, message, pages, timeout = 120000) => { }; let page = 0; let currentPage = await client.createMessage(message.channel.id, Object.assign(pages[page], options)); - const emojiList = ["◀", "🔢", "▶", "🗑"]; - for (const emoji of emojiList) { - await currentPage.addReaction(emoji); + if (pages.length > 1) { + const emojiList = ["◀", "🔢", "▶", "🗑"]; + for (const emoji of emojiList) { + await currentPage.addReaction(emoji); + } + const reactionCollector = new ReactionCollector(client, currentPage, (message, reaction, member) => emojiList.includes(reaction.name) && !member.bot, { time: timeout }); + reactionCollector.on("reaction", async (msg, reaction, member) => { + if (member.id === message.author.id) { + switch (reaction.name) { + case "◀": + page = page > 0 ? --page : pages.length - 1; + currentPage = await currentPage.edit(Object.assign(pages[page], options)); + if (manageMessages) msg.removeReaction("◀", member.id); + break; + case "🔢": + client.createMessage(message.channel.id, Object.assign({ content: "What page do you want to jump to?" }, { + messageReference: { + channelID: currentPage.channel.id, + messageID: currentPage.id, + guildID: currentPage.channel.guild ? currentPage.channel.guild.id : undefined, + failIfNotExists: false + }, + allowedMentions: { + repliedUser: false + } + })).then(askMessage => { + const messageCollector = new MessageCollector(client, askMessage.channel, (response) => response.author.id === message.author.id && !isNaN(response.content) && Number(response.content) <= pages.length && Number(response.content) > 0, { + time: timeout, + maxMatches: 1 + }); + return messageCollector.on("message", async (response) => { + if (await client.getMessage(askMessage.channel.id, askMessage.id).catch(() => undefined)) askMessage.delete(); + if (manageMessages) await response.delete(); + page = Number(response.content) - 1; + currentPage = await currentPage.edit(Object.assign(pages[page], options)); + if (manageMessages) msg.removeReaction("🔢", member.id); + }); + }).catch(error => { + throw error; + }); + break; + case "▶": + page = page + 1 < pages.length ? ++page : 0; + currentPage = await currentPage.edit(Object.assign(pages[page], options)); + if (manageMessages) msg.removeReaction("▶", member.id); + break; + case "🗑": + reactionCollector.emit("end"); + if (await client.getMessage(currentPage.channel.id, currentPage.id).catch(() => undefined)) await currentPage.delete(); + return; + default: + break; + } + } + }); + reactionCollector.once("end", async () => { + try { + await client.getMessage(currentPage.channel.id, currentPage.id); + if (manageMessages) { + await currentPage.removeReactions(); + } + } catch { + return; + } + }); } - const reactionCollector = new ReactionCollector(client, currentPage, (message, reaction, member) => emojiList.includes(reaction.name) && !member.bot, { time: timeout }); - reactionCollector.on("reaction", async (msg, reaction, member) => { - if (member.id === message.author.id) { - switch (reaction.name) { - case "◀": - page = page > 0 ? --page : pages.length - 1; - currentPage = await currentPage.edit(Object.assign(pages[page], options)); - if (manageMessages) msg.removeReaction("◀", member.id); - break; - case "🔢": - client.createMessage(message.channel.id, Object.assign({ content: "What page do you want to jump to?" }, { - messageReference: { - channelID: currentPage.channel.id, - messageID: currentPage.id, - guildID: currentPage.channel.guild ? currentPage.channel.guild.id : undefined, - failIfNotExists: false - }, - allowedMentions: { - repliedUser: false - } - })).then(askMessage => { - const messageCollector = new MessageCollector(client, askMessage.channel, (response) => response.author.id === message.author.id && !isNaN(response.content) && Number(response.content) <= pages.length && Number(response.content) > 0, { - time: timeout, - maxMatches: 1 - }); - return messageCollector.on("message", async (response) => { - if (await client.getMessage(askMessage.channel.id, askMessage.id).catch(() => undefined)) askMessage.delete(); - if (manageMessages) await response.delete(); - page = Number(response.content) - 1; - currentPage = await currentPage.edit(Object.assign(pages[page], options)); - if (manageMessages) msg.removeReaction("🔢", member.id); - }); - }).catch(error => { - throw error; - }); - break; - case "▶": - page = page + 1 < pages.length ? ++page : 0; - currentPage = await currentPage.edit(Object.assign(pages[page], options)); - if (manageMessages) msg.removeReaction("▶", member.id); - break; - case "🗑": - reactionCollector.emit("end"); - if (await client.getMessage(currentPage.channel.id, currentPage.id).catch(() => undefined)) await currentPage.delete(); - return; - default: - break; - } - } - }); - reactionCollector.once("end", async () => { - try { - await client.getMessage(currentPage.channel.id, currentPage.id); - if (manageMessages) { - await currentPage.removeReactions(); - } - } catch { - return; - } - }); return currentPage; };