Skip to content

Instantly share code, notes, and snippets.

@jacoobes
Last active July 28, 2022 15:58
Show Gist options
  • Save jacoobes/d574b319de2d54a87375986e24c94e2e to your computer and use it in GitHub Desktop.
Save jacoobes/d574b319de2d54a87375986e24c94e2e to your computer and use it in GitHub Desktop.
discord.js paginator < 50 lines
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