pagination.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. module.exports = async (
  2. msg,
  3. pages,
  4. client,
  5. emojiList = ["◀️", "⏹️", "▶️"],
  6. timeout = 120000
  7. ) => {
  8. if (!msg && !msg.channel) throw new Error("Channel is inaccessible.");
  9. if (!pages) throw new Error("Pages are not given.");
  10. let page = 0;
  11. const curPage = await msg.channel.send(
  12. pages[page].setFooter(
  13. `Page ${page + 1}/${pages.length} `,
  14. msg.author.displayAvatarURL({ dynamic: true })
  15. )
  16. );
  17. for (const emoji of emojiList) await curPage.react(emoji);
  18. const reactionCollector = curPage.createReactionCollector(
  19. (reaction, user) => emojiList.includes(reaction.emoji.name) && !user.bot,
  20. { time: timeout }
  21. );
  22. reactionCollector.on("collect", (reaction) => {
  23. reaction.users.remove(msg.author);
  24. switch (reaction.emoji.name) {
  25. case emojiList[0]:
  26. page = page > 0 ? --page : pages.length - 1;
  27. break;
  28. case emojiList[1]:
  29. curPage.reactions.removeAll();
  30. break;
  31. case emojiList[2]:
  32. page = page + 1 < pages.length ? ++page : 0;
  33. break;
  34. }
  35. curPage.edit(
  36. pages[page].setFooter(
  37. `Page ${page + 1}/${pages.length} `,
  38. msg.author.displayAvatarURL({ dynamic: true })
  39. )
  40. );
  41. });
  42. reactionCollector.on("end", () => {
  43. if (!curPage.deleted) {
  44. curPage.reactions.removeAll();
  45. }
  46. });
  47. return curPage;
  48. };