Last active
July 28, 2022 15:58
-
-
Save jacoobes/d574b319de2d54a87375986e24c94e2e to your computer and use it in GitHub Desktop.
discord.js paginator < 50 lines
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export function Paginate() { | |
const __embeds = [] as EmbedBuilder[]; | |
let cur = 0; | |
let traverser: [ButtonBuilder, ButtonBuilder]; | |
let message : Message; | |
return { | |
add(...embeds : EmbedBuilder[]) { | |
__embeds.push(...embeds) | |
return this; | |
}, | |
setTraverser(tr : [ButtonBuilder, ButtonBuilder] ) { | |
traverser = tr; | |
}, | |
setMessage(_message : Message) { | |
message = _message | |
}, | |
async next() { | |
cur++; | |
if(cur >= __embeds.length) { | |
cur = 0; | |
} | |
await message.edit(this.components()); | |
}, | |
async back() { | |
cur--; | |
if(cur <= -__embeds.length) { | |
cur = 0; | |
} | |
await message.edit(this.components()); | |
}, | |
at(num : number) { | |
return __embeds.at(num) | |
}, | |
components() { | |
return { | |
embeds : [__embeds.at(cur)!], | |
components : [ | |
new ActionRowBuilder<ButtonBuilder>() | |
.addComponents( | |
traverser[0], | |
traverser[1] | |
) | |
] | |
} | |
} | |
} | |
} | |
//Usage : | |
const paginator = Paginate(); | |
paginator.add(...embeds); | |
const ids = [`${Date.now()}__left`, `${Date.now()}__right`] | |
paginator.setTraverser([ | |
new ButtonBuilder({ label : '<', custom_id : ids[0], style: ButtonStyle.Secondary}), | |
new ButtonBuilder({ label : '>', custom_id : ids[1], style: ButtonStyle.Secondary}) | |
]); | |
const message = await context.reply(paginator.components()); | |
paginator.setMessage(message) | |
message.channel.createMessageComponentCollector({ | |
componentType: ComponentType.Button | |
}).on('collect',async i => { | |
if (i.customId === ids[0]) { | |
await i.deferUpdate(); | |
await paginator.back(); | |
} else if(i.customId === ids[1]) { | |
await i.deferUpdate(); | |
await paginator.next(); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment