Skip to main content

Class: PaginatedMessage

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:138

This is a PaginatedMessage, a utility to paginate messages (usually embeds). You must either use this class directly or extend it.

Remark

Please note that for PaginatedMessage to work in DMs to your client, you need to add the 'CHANNEL' partial to your client.options.partials. Message based commands can always be used in DMs, whereas Chat Input interactions can only be used in DMs when they are registered globally.

PaginatedMessage uses MessageComponent buttons that perform the specified action when clicked. You can either use your own actions or the PaginatedMessage.defaultActions. PaginatedMessage.defaultActions is also static so you can modify these directly.

PaginatedMessage also uses pages via Messages.

Examples

const myPaginatedMessage = new PaginatedMessage();
// Once you have an instance of PaginatedMessage you can call various methods on it to add pages to it.
// For more details see each method's documentation.

myPaginatedMessage.addPageEmbed((embed) => {
embed
.setColor('#FF0000')
.setDescription('example description');

return embed;
});

myPaginatedMessage.addPageBuilder((builder) => {
const embed = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description');

return builder
.setContent('example content')
.setEmbeds([embed]);
});

myPaginatedMessage.addPageContent('Example');

myPaginatedMessage.run(message)
const myPaginatedMessage = new PaginatedMessage({
template: new EmbedBuilder().setColor('#FF0000').setFooter('- Powered by Sapphire framework')
});
class ForwardAction implements IPaginatedMessageAction {
public id = '▶️';

public run({ handler }) {
if (handler.index !== handler.pages.length - 1) ++handler.index;
}
}

// You can also give the object directly.

const StopAction: IPaginatedMessageAction = {
customId: 'CustomStopAction',
run: ({ collector }) => {
collector.stop();
}
}

Remark

You can also provide a EmbedBuilder template. This will be applied to every page. If a page itself has an embed then the two will be merged, with the content of the page's embed taking priority over the template.

Furthermore, if the template has a footer then it will be applied after the page index part of the footer with a space preceding the template. For example, when setting - Powered by Sapphire Framework the resulting footer will be 1/2 - Powered by Sapphire Framework

Remark

To utilize actions you can implement IPaginatedMessageAction into a class.

Extended by

Constructors

new PaginatedMessage()

new PaginatedMessage(__namedParameters: PaginatedMessageOptions): PaginatedMessage

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:517

Constructor for the PaginatedMessage class

Parameters

ParameterTypeDescription
__namedParametersPaginatedMessageOptionsThe PaginatedMessageOptions for this instance of the PaginatedMessage class

Returns

PaginatedMessage

Properties

#thisMazeWasNotMeantForYouContent

private readonly #thisMazeWasNotMeantForYouContent: object

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:510

The response we send when someone gets into an invalid flow

content

content: string = "This maze wasn't meant for you...what did you do."


actions

actions: Map<string, PaginatedMessageAction>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:402

The actions which are to be used.


collector

collector: null | InteractionCollector<PaginatedMessageInteractionUnion> = null

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:392

The collector used for handling component interactions.


constructor

constructor: typeof PaginatedMessage

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1844

The constructor field represents the constructor of the PaginatedMessage interface. It is of type typeof PaginatedMessage, which means it refers to the type of the PaginatedMessage interface itself.


embedFooterSeparator

embedFooterSeparator: string = PaginatedMessage.embedFooterSeparator

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:439

Custom separator to show after the page index in the embed footer. PaginatedMessage will automatically add a space ( ) after the given text. You do not have to add it yourself.

Default

PaginatedMessage.embedFooterSeparator (static property)


emitPartialDMChannelWarning

emitPartialDMChannelWarning: boolean = PaginatedMessage.emitPartialDMChannelWarning

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:453

Whether to emit the warning about running a PaginatedMessage in a DM channel without the client having the 'CHANNEL' partial.

Remark

When using message based commands (as opposed to Application Commands) then you will also need to specify the DIRECT_MESSAGE intent for PaginatedMessage to work.

Default

PaginatedMessage.emitPartialDMChannelWarning (static property)


hasEmittedMaxPageWarning

protected hasEmittedMaxPageWarning: boolean = false

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:473

Tracks whether a warning was already emitted for this PaginatedMessage concerning the maximum amount of pages in the SelectMenu.

Default

false

hasEmittedPartialDMChannelWarning

protected hasEmittedPartialDMChannelWarning: boolean = false

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:483

Tracks whether a warning was already emitted for this PaginatedMessage concerning the PaginatedMessage being called in a DMChannel without the client having the 'Channel' partial.

Remark

When using message based commands (as opposed to Application Commands) then you will also need to specify the DIRECT_MESSAGE intent for PaginatedMessage to work.

Default

false

idle

idle: number

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:419

The amount of milliseconds to idle before the paginator is closed.

Default

14.5 minutes

Remark

This is to ensure it is a bit before interactions expire.


index

index: number = 0

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:412

The handler's current page/message index.


messages

messages: (null | PaginatedMessageResolvedPage)[] = []

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:397

The pages which were converted from PaginatedMessage.pages


pageActions

pageActions: (null | Map<string, PaginatedMessageAction>)[] = []

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:407

The page-specific actions which are to be used.


pageIndexPrefix

pageIndexPrefix: string = PaginatedMessage.pageIndexPrefix

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:432

Custom text to show in front of the page index in the embed footer. PaginatedMessage will automatically add a space ( ) after the given text. You do not have to add it yourself.

Default

PaginatedMessage.pageIndexPrefix (static property)


pages

pages: PaginatedMessagePage[] = []

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:382

The pages to be converted to PaginatedMessage.messages


paginatedMessageData

protected paginatedMessageData: null | Omit<PaginatedMessageMessageOptionsUnion, "components"> = null

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:460

Data for the paginated message.


response

response: null | Message | AnyInteractableInteraction = null

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:387

The response message used to edit on page changes.


selectMenuOptions

protected selectMenuOptions: PaginatedMessageSelectMenuOptionsFunction = PaginatedMessage.selectMenuOptions

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:500

Function that returns the select menu options for the paginated message.

Param

The paginated message.

Returns

The select menu options.


selectMenuPlaceholder

protected selectMenuPlaceholder: undefined | string = undefined

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:465

The placeholder for the select menu.


shouldAddFooterToEmbeds

protected shouldAddFooterToEmbeds: boolean = true

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:493

Determines whether the default footer that shows the current page number should be added to the embeds.

Note

If this is set to false, i.e.e through setShouldAddFooterToEmbeds, then embedFooterSeparator is never applied.

Default

true

stopPaginatedMessageCustomIds

stopPaginatedMessageCustomIds: string[] = PaginatedMessage.stopPaginatedMessageCustomIds

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:445

A list of customId that are bound to actions that will stop the PaginatedMessage

Default

PaginatedMessage.stopPaginatedMessageCustomIds (static property)


template

template: PaginatedMessageMessageOptionsUnion

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:425

The template for this PaginatedMessage. You can use templates to set defaults that will apply to each and every page in the PaginatedMessage


wrongUserInteractionReply

protected wrongUserInteractionReply: PaginatedMessageWrongUserInteractionReplyFunction = PaginatedMessage.wrongUserInteractionReply

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:505

Function that handles the reply when a user interacts with the paginated message incorrectly.


defaultActions

static defaultActions: PaginatedMessageAction[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:143

The default actions of this handler.


deletionStopReasons

static deletionStopReasons: string[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:229

The reasons sent by InteractionCollector#end event when the message (or its owner) has been deleted.


embedFooterSeparator

static embedFooterSeparator: string = '•'

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:259

Custom separator for the page index in the embed footer.

Default

"•"

Remark

To overwrite this property change it somewhere in a "setup" file, i.e. where you also call client.login() for your client. Alternatively, you can also customize it on a per-PaginatedMessage basis by passing embedFooterSeparator in the options of the constructor.

Example

import { PaginatedMessage } from '@sapphire/discord.js-utilities';

PaginatedMessage.embedFooterSeparator = '|';
// This will make the separator of the embed footer something like "Page 1/2 | Today at 4:20"

emitPartialDMChannelWarning

static emitPartialDMChannelWarning: boolean = true

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:209

Whether to emit the warning about running a PaginatedMessage in a DM channel without the client the 'CHANNEL' partial.

Remark

When using message based commands (as opposed to Application Commands) then you will also need to specify the DIRECT_MESSAGE intent for PaginatedMessage to work.

Remark

To overwrite this property change it somewhere in a "setup" file, i.e. where you also call client.login() for your client. Alternatively, you can also customize it on a per-PaginatedMessage basis by using paginatedMessageInstance.setEmitPartialDMChannelWarning(newBoolean)

Default

true

handlers

readonly static handlers: Map<string, PaginatedMessage>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:277

The current InteractionCollector handlers that are active. The key is the ID of of the author who sent the message that triggered this PaginatedMessage

This is to ensure that any given author can only trigger 1 PaginatedMessage. This is important for performance reasons, and users should not have more than 1 PaginatedMessage open at once.


messages

readonly static messages: Map<string, PaginatedMessage>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:268

The messages that are currently being handled by a PaginatedMessage The key is the ID of the message that triggered this PaginatedMessage

This is to ensure that only 1 PaginatedMessage can run on a specified message at once. This is important when having an editable commands solution.


pageIndexPrefix

static pageIndexPrefix: string = ''

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:244

Custom text to show in front of the page index in the embed footer. PaginatedMessage will automatically add a space ( ) after the given text. You do not have to add it yourself.

Default

""

Remark

To overwrite this property change it somewhere in a "setup" file, i.e. where you also call client.login() for your client.

Example

import { PaginatedMessage } from '@sapphire/discord.js-utilities';

PaginatedMessage.pageIndexPrefix = 'Page';
// This will make the footer of the embed something like "Page 1/2"

selectMenuOptions

static selectMenuOptions: PaginatedMessageSelectMenuOptionsFunction

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:304

A generator for MessageSelectOption that will be used to generate the options for the StringSelectMenuBuilder. We do not allow overwriting the MessageSelectOption#value property with this, as it is vital to how we handle select menu interactions.

Param

The index of the page to add to the StringSelectMenuBuilder. We will add 1 to this number because our pages are 0 based, so this will represent the pages as seen by the user.

Default

{
label: `Page ${pageIndex}`
}

Remark

To overwrite this property change it in a "setup" file prior to calling client.login() for your client.

Example

import { PaginatedMessage } from '@sapphire/discord.js-utilities';

PaginatedMessage.selectMenuOptions = (pageIndex) => ({
label: `Go to page: ${pageIndex}`,
description: 'This is a description'
});

stopPaginatedMessageCustomIds

static stopPaginatedMessageCustomIds: string[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:223

A list of customId that are bound to actions that will stop the PaginatedMessage

Default

['@sapphire/paginated-messages.stop']

Remark

To overwrite this property change it somewhere in a "setup" file, i.e. where you also call client.login() for your client. Alternatively, you can also customize it on a per-PaginatedMessage basis by using paginatedMessageInstance.setStopPaginatedMessageCustomIds(customIds)

Example

import { PaginatedMessage } from '@sapphire/discord.js-utilities';

PaginatedMessage.stopPaginatedMessageCustomIds = ['my-custom-stop-custom-id'];

wrongUserInteractionReply

static wrongUserInteractionReply: PaginatedMessageWrongUserInteractionReplyFunction

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:351

A generator for MessageComponentInteraction#reply that will be called and sent whenever an untargeted user interacts with one of the buttons. When modifying this it is recommended that the message is set to be ephemeral so only the user that is pressing the buttons can see them. Furthermore, we also recommend setting allowedMentions: { users: [], roles: [] }, so you don't have to worry about accidentally pinging anyone.

When setting just a string, we will add { ephemeral: true, allowedMentions: { users: [], roles: [] } } for you.

Param

The User this PaginatedMessage was intended for.

Param

The User that actually clicked the button.

Default

import { userMention } from 'discord.js';

{
content: `Please stop interacting with the components on this message. They are only for ${userMention(targetUser.id)}.`,
ephemeral: true,
allowedMentions: { users: [], roles: [] }
}

Remark

To overwrite this property change it in a "setup" file prior to calling client.login() for your client.

Examples

import { PaginatedMessage } from '@sapphire/discord.js-utilities';
import { userMention } from 'discord.js';

// We will add ephemeral and no allowed mention for string only overwrites
PaginatedMessage.wrongUserInteractionReply = (targetUser) =>
`These buttons are only for ${userMention(targetUser.id)}. Press them as much as you want, but I won't do anything with your clicks.`;
import { PaginatedMessage } from '@sapphire/discord.js-utilities';
import { userMention } from 'discord.js';

PaginatedMessage.wrongUserInteractionReply = (targetUser) => ({
content: `These buttons are only for ${userMention(
targetUser.id
)}. Press them as much as you want, but I won't do anything with your clicks.`,
ephemeral: true,
allowedMentions: { users: [], roles: [] }
});

Methods

addAction()

addAction(action: PaginatedMessageAction): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:708

Adds an action to the existing ones. This will be added as the last action.

Parameters

ParameterTypeDescription
actionPaginatedMessageActionThe action to add.

Returns

this

See

PaginatedMessage.setActions for examples on how to structure the action.


addActions()

addActions(actions: PaginatedMessageAction[]): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:698

Adds actions to the existing ones. The order given is the order they will be used.

Parameters

ParameterTypeDescription
actionsPaginatedMessageAction[]The actions to add.

Returns

this

See

PaginatedMessage.setActions for examples on how to structure the actions.


addAsyncPageBuilder()

addAsyncPageBuilder(builder: MessageBuilder | (builder: MessageBuilder) => Promise<MessageBuilder>): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:858

Adds a page to the existing ones asynchronously using a MessageBuilder. This wil be added as the last page.

Parameters

ParameterTypeDescription
builderMessageBuilder | (builder: MessageBuilder) => Promise<MessageBuilder>Either a callback whose first parameter is new MessageBuilder(), or an already constructed MessageBuilder

Returns

this

Example

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');
const { EmbedBuilder } = require('discord.js');

const paginatedMessage = new PaginatedMessage()
.addAsyncPageBuilder(async (builder) => {
const someRemoteData = await fetch('https://contoso.com/api/users');

const embed = new EmbedBuilder()
.setColor('#FF0000')
.setDescription(someRemoteData.data);

return builder
.setContent('example content')
.setEmbeds([embed]);
});

addAsyncPageEmbed()

addAsyncPageEmbed(embed: EmbedResolvable | (builder: EmbedBuilder) => Awaitable<EmbedResolvable>): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:928

Adds a page to the existing ones asynchronously using a EmbedBuilder. This wil be added as the last page.

Parameters

ParameterTypeDescription
embedEmbedResolvable | (builder: EmbedBuilder) => Awaitable<EmbedResolvable>Either a callback whose first parameter is new EmbedBuilder(), or an already constructed EmbedBuilder

Returns

this

Example

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const paginatedMessage = new PaginatedMessage()
.addAsyncPageEmbed(async (embed) => {
const someRemoteData = await fetch('https://contoso.com/api/users');

embed
.setColor('#FF0000')
.setDescription(someRemoteData.data);

return embed;
});

addAsyncPageEmbeds()

addAsyncPageEmbeds(embeds: EmbedResolvable[] | (embed1: EmbedBuilder, embed2: EmbedBuilder, embed3: EmbedBuilder, embed4: EmbedBuilder, embed5: EmbedBuilder, embed6: EmbedBuilder, embed7: EmbedBuilder, embed8: EmbedBuilder, embed9: EmbedBuilder, embed10: EmbedBuilder) => Awaitable<EmbedResolvable[]>): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1070

Adds a page to the existing ones using multiple EmbedBuilder's. This wil be added as the last page.

Parameters

ParameterTypeDescription
embedsEmbedResolvable[] | (embed1: EmbedBuilder, embed2: EmbedBuilder, embed3: EmbedBuilder, embed4: EmbedBuilder, embed5: EmbedBuilder, embed6: EmbedBuilder, embed7: EmbedBuilder, embed8: EmbedBuilder, embed9: EmbedBuilder, embed10: EmbedBuilder) => Awaitable<EmbedResolvable[]>Either a callback which receives 10 parameters of new EmbedBuilder(), or an array of already constructed EmbedBuilder's

Returns

this

Remark

When using this with a callback this will construct 10 EmbedBuilder's in the callback parameters, regardless of how many are actually used. If this a performance impact you do not want to cope with then it is recommended to use PaginatedMessage.addPageBuilder instead, which will let you add as many embeds as you want, albeit manually

Examples

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const paginatedMessage = new PaginatedMessage().addAsyncPageEmbeds(async (embed0, embed1, embed2) => {
const someRemoteData = (await fetch('https://contoso.com/api/users')) as any;

for (const [index, user] of Object.entries(someRemoteData.users.slice(0, 10)) as [`${0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10}`, any][]) {
switch (index) {
case '0': {
embed0.setColor('#FF0000').setDescription('example description 1').setAuthor(user.name);
break;
}
case '1': {
embed1.setColor('#00FF00').setDescription('example description 2').setAuthor(user.name);
break;
}
case '2': {
embed2.setColor('#0000FF').setDescription('example description 3').setAuthor(user.name);
break;
}
}
}

return [embed0, embed1, embed2];
});
const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const embed1 = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description 1');

const embed2 = new EmbedBuilder()
.setColor('#00FF00')
.setDescription('example description 2');

const embed3 = new EmbedBuilder()
.setColor('#0000FF')
.setDescription('example description 3');

const paginatedMessage = new PaginatedMessage()
.addAsyncPageEmbeds([embed1, embed2, embed3]); // You can add up to 10 embeds

addPage()

addPage(page: PaginatedMessagePage): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:749

Adds a page to the existing ones. This will be added as the last page.

Parameters

ParameterTypeDescription
pagePaginatedMessagePageThe page to add.

Returns

this

Remark

While you can use this method you should first check out PaginatedMessage.addPageBuilder, PaginatedMessage.addPageContent and PaginatedMessage.addPageEmbed as these are easier functional methods of adding pages and will likely already suffice for your needs.


addPageAction()

addPageAction(action: PaginatedMessageAction, index: number): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1202

Add the provided action to a page.

Parameters

ParameterTypeDescription
actionPaginatedMessageActionThe action to add.
indexnumberThe index of the page to add the action to.

Returns

this

See

PaginatedMessage.setActions for examples on how to structure the action.

Remark

Internally we check if the provided index exists. This means that calling this function before calling any of the methods below this will not work as the amount of pages will always be 0, thus the index will always be out of bounds. That said, make sure you first define your pages and then define your actions for those pages.


addPageActions()

addPageActions(actions: PaginatedMessageAction[], index: number): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1175

Add the provided actions to a page.

Parameters

ParameterTypeDescription
actionsPaginatedMessageAction[]The actions to add.
indexnumberThe index of the page to add the actions to.

Returns

this

See

PaginatedMessage.setActions for examples on how to structure the actions.

Remark

Internally we check if the provided index exists. This means that calling this function before calling any of the methods below this will not work as the amount of pages will always be 0, thus the index will always be out of bounds. That said, make sure you first define your pages and then define your actions for those pages.


addPageBuilder()

addPageBuilder(builder: MessageBuilder | (builder: MessageBuilder) => MessageBuilder): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:832

Adds a page to the existing ones using a MessageBuilder. This will be added as the last page.

Parameters

ParameterTypeDescription
builderMessageBuilder | (builder: MessageBuilder) => MessageBuilderEither a callback whose first parameter is new MessageBuilder(), or an already constructed MessageBuilder

Returns

this

Examples

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');
const { EmbedBuilder } = require('discord.js');

const paginatedMessage = new PaginatedMessage()
.addPageBuilder((builder) => {
const embed = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description');

return builder
.setContent('example content')
.setEmbeds([embed]);
});
const { EmbedBuilder } = require('discord.js');
const { MessageBuilder, PaginatedMessage } = require('@sapphire/discord.js-utilities');

const embed = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description');

const builder = new MessageBuilder()
.setContent('example content')
.setEmbeds([embed]);

const paginatedMessage = new PaginatedMessage()
.addPageBuilder(builder);

addPageContent()

addPageContent(content: string): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:873

Adds a page to the existing ones using simple message content. This will be added as the last page.

Parameters

ParameterTypeDescription
contentstringThe content to set.

Returns

this

Example

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const paginatedMessage = new PaginatedMessage()
.addPageContent('example content');

addPageEmbed()

addPageEmbed(embed: EmbedResolvable | (embed: EmbedBuilder) => EmbedResolvable): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:905

Adds a page to the existing ones using a EmbedBuilder. This wil be added as the last page.

Parameters

ParameterTypeDescription
embedEmbedResolvable | (embed: EmbedBuilder) => EmbedResolvableEither a callback whose first parameter is new EmbedBuilder(), or an already constructed EmbedBuilder

Returns

this

Examples

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const paginatedMessage = new PaginatedMessage()
.addPageEmbed((embed) => {
embed
.setColor('#FF0000')
.setDescription('example description');

return embed;
});
const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const embed = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description');

const paginatedMessage = new PaginatedMessage()
.addPageEmbed(embed);

addPageEmbeds()

addPageEmbeds(embeds: EmbedResolvable[] | (embed1: EmbedBuilder, embed2: EmbedBuilder, embed3: EmbedBuilder, embed4: EmbedBuilder, embed5: EmbedBuilder, embed6: EmbedBuilder, embed7: EmbedBuilder, embed8: EmbedBuilder, embed9: EmbedBuilder, embed10: EmbedBuilder) => EmbedResolvable[]): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:979

Adds a page to the existing ones asynchronously using multiple EmbedBuilder's. This wil be added as the last page.

Parameters

ParameterTypeDescription
embedsEmbedResolvable[] | (embed1: EmbedBuilder, embed2: EmbedBuilder, embed3: EmbedBuilder, embed4: EmbedBuilder, embed5: EmbedBuilder, embed6: EmbedBuilder, embed7: EmbedBuilder, embed8: EmbedBuilder, embed9: EmbedBuilder, embed10: EmbedBuilder) => EmbedResolvable[]Either a callback which receives 10 parameters of new EmbedBuilder(), or an array of already constructed EmbedBuilder's

Returns

this

Remark

When using this with a callback this will construct 10 EmbedBuilder's in the callback parameters, regardless of how many are actually used. If this a performance impact you do not want to cope with then it is recommended to use PaginatedMessage.addPageBuilder instead, which will let you add as many embeds as you want, albeit manually

Examples

const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const paginatedMessage = new PaginatedMessage()
.addPageEmbeds((embed1, embed2, embed3) => { // You can add up to 10 embeds
embed1
.setColor('#FF0000')
.setDescription('example description 1');

embed2
.setColor('#00FF00')
.setDescription('example description 2');

embed3
.setColor('#0000FF')
.setDescription('example description 3');

return [embed1, embed2, embed3];
});
const { PaginatedMessage } = require('@sapphire/discord.js-utilities');

const embed1 = new EmbedBuilder()
.setColor('#FF0000')
.setDescription('example description 1');

const embed2 = new EmbedBuilder()
.setColor('#00FF00')
.setDescription('example description 2');

const embed3 = new EmbedBuilder()
.setColor('#0000FF')
.setDescription('example description 3');

const paginatedMessage = new PaginatedMessage()
.addPageEmbeds([embed1, embed2, embed3]); // You can add up to 10 embeds

addPages()

addPages(pages: PaginatedMessagePage[]): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1114

Add pages to the existing ones. The order given is the order they will be used.

Parameters

ParameterTypeDescription
pagesPaginatedMessagePage[]The pages to add.

Returns

this


applyFooter()

protected applyFooter(message: PaginatedMessageMessageOptionsUnion, index: number): PaginatedMessageMessageOptionsUnion

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1672

Applies footer to the last embed of the page

Parameters

ParameterTypeDescription
messagePaginatedMessageMessageOptionsUnionThe message options
indexnumberThe current index

Returns

PaginatedMessageMessageOptionsUnion

The message options with the footer applied


applyTemplate()

private applyTemplate(template: PaginatedMessageMessageOptionsUnion, options: PaginatedMessageMessageOptionsUnion): PaginatedMessageMessageOptionsUnion

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1730

Applies a template to the provided options, merging them together and applying the template's embeds.

Parameters

ParameterTypeDescription
templatePaginatedMessageMessageOptionsUnionThe template to apply.
optionsPaginatedMessageMessageOptionsUnionThe options to merge with the template.

Returns

PaginatedMessageMessageOptionsUnion

The merged options with the template's embeds applied.


applyTemplateEmbed()

private applyTemplateEmbed(templateEmbed: undefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[], pageEmbeds: undefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[]): undefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1749

Applies a template embed to the page embeds. If the page embeds are nullish, it returns the template embed as an array. If the template embed is nullish, it returns the page embeds. Otherwise, it merges the template embed with the first page embed.

Parameters

ParameterTypeDescription
templateEmbedundefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[]The template embed to apply.
pageEmbedsundefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[]The page embeds to apply the template to.

Returns

undefined | readonly (APIEmbed | JSONEncodable<APIEmbed>)[]

The resulting embeds after applying the template.


clone()

clone(): PaginatedMessage

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1399

Clones the current handler into a new instance.

Returns

PaginatedMessage


getAction()

private getAction(customId: string, index: number): undefined | PaginatedMessageAction

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1829

Retrieves the PaginatedMessageAction associated with the provided customId and index.

Parameters

ParameterTypeDescription
customIdstringThe customId of the action.
indexnumberThe index of the action in the pageActions array.

Returns

undefined | PaginatedMessageAction

The PaginatedMessageAction associated with the customId and index, or undefined if not found.


getPageOptions()

getPageOptions(index: number): Promise<undefined | PaginatedMessageMessageOptionsUnion>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1412

Get the options of a page.

Parameters

ParameterTypeDescription
indexnumberThe index of the page.

Returns

Promise<undefined | PaginatedMessageMessageOptionsUnion>


handleActionLoad()

protected handleActionLoad(actions: PaginatedMessageAction[], messageOrInteraction: Message | AnyInteractableInteraction, targetUser: User): Promise<MessageActionRowComponentBuilder[]>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1526

Handles the loading of actions.

Parameters

ParameterTypeDescription
actionsPaginatedMessageAction[]The actions to be loaded.
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction that triggered this PaginatedMessage.
targetUserUserThe user the handler is for.

Returns

Promise<MessageActionRowComponentBuilder[]>


handleCollect()

protected handleCollect(targetUser: User, channel: DMChannel | PartialDMChannel | PartialGroupDMChannel | NewsChannel | StageChannel | TextChannel | PublicThreadChannel | PrivateThreadChannel | VoiceChannel, interaction: PaginatedMessageInteractionUnion): Promise<void>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1586

Handles the collect event from the collector.

Parameters

ParameterTypeDescription
targetUserUserThe user the handler is for.
channelDMChannel | PartialDMChannel | PartialGroupDMChannel | NewsChannel | StageChannel | TextChannel | PublicThreadChannel | PrivateThreadChannel | VoiceChannelThe channel the handler is running at.
interactionPaginatedMessageInteractionUnionThe button interaction that was received.

Returns

Promise<void>


handleEnd()

protected handleEnd(_: Collection<string, PaginatedMessageInteractionUnion>, reason: PaginatedMessageStopReasons): Promise<void>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1639

Handles the end event from the collector.

Parameters

ParameterTypeDescription
_Collection<string, PaginatedMessageInteractionUnion>-
reasonPaginatedMessageStopReasonsThe reason for which the collector was ended.

Returns

Promise<void>


handlePageLoad()

protected handlePageLoad(page: PaginatedMessagePage, index: number): Promise<PaginatedMessageMessageOptionsUnion>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1506

Handles the load of a page.

Parameters

ParameterTypeDescription
pagePaginatedMessagePageThe page to be loaded.
indexnumberThe index of the current page.

Returns

Promise<PaginatedMessageMessageOptionsUnion>


hasPage()

hasPage(index: number): boolean

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:724

Checks whether or not the handler has a specific page.

Parameters

ParameterTypeDescription
indexnumberThe index to check.

Returns

boolean


mergeArrays()

private mergeArrays<T>(template?: T[], array?: T[]): undefined | T[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1810

Merges two arrays together.

Type Parameters

Type ParameterDescription
TThe type of elements in the arrays.

Parameters

ParameterTypeDescription
template?T[]The first array to merge.
array?T[]The second array to merge.

Returns

undefined | T[]

  • The merged array or undefined if both arrays are nullish.

mergeEmbeds()

private mergeEmbeds(templateEmbed: APIEmbed | JSONEncodable<APIEmbed>, pageEmbeds: readonly (APIEmbed | JSONEncodable<APIEmbed>)[]): readonly (APIEmbed | JSONEncodable<APIEmbed>)[]

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1771

Merges the template embed with an array of page embeds.

Parameters

ParameterTypeDescription
templateEmbedAPIEmbed | JSONEncodable<APIEmbed>The template embed to merge.
pageEmbedsreadonly (APIEmbed | JSONEncodable<APIEmbed>)[]The array of page embeds to merge.

Returns

readonly (APIEmbed | JSONEncodable<APIEmbed>)[]

The merged embeds.


resolvePage()

resolvePage(messageOrInteraction: Message | AnyInteractableInteraction, target: User, index: number): Promise<PaginatedMessageResolvedPage>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1356

Executed whenever an action is triggered and resolved.

Parameters

ParameterTypeDescription
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction that triggered this PaginatedMessage.
targetUserThe user who will be able to interact with the buttons of this PaginatedMessage.
indexnumberThe index to resolve.

Returns

Promise<PaginatedMessageResolvedPage>


resolvePagesOnRun()

resolvePagesOnRun(messageOrInteraction: Message | AnyInteractableInteraction, target: User): Promise<void>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1344

Executed whenever PaginatedMessage.run is called.

Parameters

ParameterType
messageOrInteractionMessage | AnyInteractableInteraction
targetUser

Returns

Promise<void>


resolvePaginatedMessageInternationalizationContext()

protected resolvePaginatedMessageInternationalizationContext(messageOrInteraction: Message | AnyInteractableInteraction, targetUser: User): PaginatedMessageInternationalizationContext

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1708

Constructs a PaginatedMessageInternationalizationContext

Parameters

ParameterTypeDescription
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction for which the PaginatedMessageInternationalizationContext should be resolved.
targetUserUserThe target user for whom this interaction is

Returns

PaginatedMessageInternationalizationContext

A constructed PaginatedMessageInternationalizationContext


run()

run(messageOrInteraction: Message | AnyInteractableInteraction, target?: User): Promise<PaginatedMessage>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1235

Executes the PaginatedMessage and sends the pages corresponding with PaginatedMessage.index. The handler will start collecting message component interactions.

Parameters

ParameterTypeDescription
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction that triggered this PaginatedMessage. Generally this will be the command message or an interaction (either a CommandInteraction, ContextMenuInteraction, or an interaction from PaginatedMessageInteractionUnion), but it can also be another message from your client, i.e. to indicate a loading state.
target?UserThe user who will be able to interact with the buttons of this PaginatedMessage. If messageOrInteraction is an instance of Message then this defaults to Message.author messageOrInteraction.author, and if it is an instance of CommandInteraction then it defaults to CommandInteraction.user messageOrInteraction.user.

Returns

Promise<PaginatedMessage>

Remark

Please note that for PaginatedMessage to work in DMs to your client, you need to add the 'CHANNEL' partial to your client.options.partials. Message based commands can always be used in DMs, whereas Chat Input interactions can only be used in DMs when they are registered globally.


setActions()

setActions(actions: PaginatedMessageAction[], includeDefaultActions: boolean): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:688

Clears all current actions and sets them. The order given is the order they will be used.

Parameters

ParameterTypeDefault valueDescription
actionsPaginatedMessageAction[]undefinedThe actions to set. This can be either a Button, Link Button, or Select Menu.
includeDefaultActionsbooleanfalseWhether to merge in the PaginatedMessage.defaultActions when setting the actions. If you set this to true then you do not need to manually add ...PaginatedMessage.defaultActions as seen in the first example. The default value is false for backwards compatibility within the current major version.

Returns

this

Remark

You can retrieve the default actions for the regular pagination

Examples

const display = new PaginatedMessage();

display.setActions([
...PaginatedMessage.defaultActions,
])
const display = new PaginatedMessage();

display.setActions([
{
style: 'PRIMARY',
label: 'My Button',
customId: 'custom_button',
type: ComponentType.Button,
run: (context) => console.log(context)
}
], true);
const display = new PaginatedMessage();

display.setActions([
{
style: 'LINK',
label: 'Sapphire Website',
emoji: '🔷',
url: 'https://sapphirejs.dev',
type: ComponentType.Button
}
], true);
const display = new PaginatedMessage();

display.setActions([
{
customId: 'custom_menu',
type: ComponentType.StringSelect,
run: (context) => console.log(context) // Do something here
}
], true);

Remark

You can add custom Message Buttons by providing style, customId, type, run and at least one of label or emoji.

Remark

You can add custom Message Link Buttons by providing style, url, type, and at least one of label or emoji.

Remark

You can add custom Select Menus by providing customId, type, and run.


setEmitPartialDMChannelWarning()

setEmitPartialDMChannelWarning(emitPartialDMChannelWarning: boolean): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:590

Sets the PaginatedMessage.emitPartialDMChannelWarning for this instance of PaginatedMessage. This will only apply to this one instance and no others.

Parameters

ParameterTypeDescription
emitPartialDMChannelWarningbooleanThe new emitPartialDMChannelWarning to set

Returns

this

The current instance of PaginatedMessage


setIdle()

setIdle(idle: number): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:608

Sets the amount of time to idle before the paginator is closed.

Parameters

ParameterTypeDescription
idlenumberThe number to set the idle to.

Returns

this


setIndex()

setIndex(index: number): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:599

Sets the handler's current page/message index.

Parameters

ParameterTypeDescription
indexnumberThe number to set the index to.

Returns

this


setPageActions()

setPageActions(actions: PaginatedMessageAction[], index: number): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1150

Clear all actions for a page and set the new ones.

Parameters

ParameterTypeDescription
actionsPaginatedMessageAction[]The actions to set.
indexnumberThe index of the page to set the actions to. This is 0-based.

Returns

this

Remark

Internally we check if the provided index exists. This means that calling this function before calling any of the methods below this will not work as the amount of pages will always be 0, thus the index will always be out of bounds. That said, make sure you first define your pages and then define your actions for those pages.

Remark

Add a select menu to the first page, while preserving all default actions:

Example

const display = new PaginatedMessage();

display.setPageActions([
{
customId: 'custom_menu',
type: ComponentType.StringSelect,
run: (context) => console.log(context) // Do something here
}
], 0);

See

PaginatedMessage.setActions for more examples on how to structure the action.


setPages()

setPages(pages: PaginatedMessagePage[]): PaginatedMessage

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:732

Clears all current pages and messages and sets them. The order given is the order they will be used.

Parameters

ParameterTypeDescription
pagesPaginatedMessagePage[]The pages to set.

Returns

PaginatedMessage


setSelectMenuOptions()

setSelectMenuOptions(newOptions: PaginatedMessageSelectMenuOptionsFunction): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:542

Sets the PaginatedMessage.selectMenuOptions for this instance of PaginatedMessage. This will only apply to this one instance and no others.

Parameters

ParameterTypeDescription
newOptionsPaginatedMessageSelectMenuOptionsFunctionThe new options generator to set

Returns

this

The current instance of PaginatedMessage


setSelectMenuPlaceholder()

setSelectMenuPlaceholder(placeholder: undefined | string): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:557

Sets the PaginatedMessage.selectMenuPlaceholder for this instance of PaginatedMessage.

This applies only to the string select menu from the PaginatedMessage.defaultActions that offers "go to page" (we internally check the customId for this)

This will only apply to this one instance and no others.

Parameters

ParameterTypeDescription
placeholderundefined | stringThe new placeholder to set

Returns

this

The current instance of PaginatedMessage


setShouldAddFooterToEmbeds()

setShouldAddFooterToEmbeds(newValue: boolean): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:618

Sets the value of shouldAddFooterToEmbeds property and returns the instance of the class.

Parameters

ParameterTypeDescription
newValuebooleanThe new value for shouldAddFooterToEmbeds.

Returns

this

The instance of the class with the updated shouldAddFooterToEmbeds value.


setStopPaginatedMessageCustomIds()

setStopPaginatedMessageCustomIds(stopPaginatedMessageCustomIds: string[]): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:579

Sets the PaginatedMessage.stopPaginatedMessageCustomIds for this instance of PaginatedMessage. This will only apply to this one instance and no others.

Parameters

ParameterTypeDescription
stopPaginatedMessageCustomIdsstring[]The new stopPaginatedMessageCustomIds to set

Returns

this

The current instance of PaginatedMessage


setUpCollector()

protected setUpCollector(messageOrInteraction: Message | AnyInteractableInteraction, targetUser: User): void

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1464

Sets up the message's collector.

Parameters

ParameterTypeDescription
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction that triggered this PaginatedMessage.
targetUserUserThe user the handler is for.

Returns

void


setUpMessage()

protected setUpMessage(messageOrInteraction: Message | AnyInteractableInteraction): Promise<void>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:1425

Sets up the message.

Parameters

ParameterTypeDescription
messageOrInteractionMessage | AnyInteractableInteractionThe message or interaction that triggered this PaginatedMessage. Generally this will be the command message or an interaction (either a CommandInteraction, ContextMenuInteraction, or an interaction from PaginatedMessageInteractionUnion), but it can also be another message from your client, i.e. to indicate a loading state.

Returns

Promise<void>


setWrongUserInteractionReply()

setWrongUserInteractionReply(wrongUserInteractionReply: PaginatedMessageWrongUserInteractionReplyFunction): this

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:568

Sets the PaginatedMessage.wrongUserInteractionReply for this instance of PaginatedMessage. This will only apply to this one instance and no others.

Parameters

ParameterTypeDescription
wrongUserInteractionReplyPaginatedMessageWrongUserInteractionReplyFunctionThe new wrongUserInteractionReply to set

Returns

this

The current instance of PaginatedMessage


updateCurrentPage()

updateCurrentPage(page: PaginatedMessagePage): Promise<PaginatedMessage>

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:778

Update the current page.

Parameters

ParameterTypeDescription
pagePaginatedMessagePageThe content to update the page with.

Returns

Promise<PaginatedMessage>

Remark

This method can only be used after PaginatedMessage.run has been used.


resolveTemplate()

private static resolveTemplate(template?: BaseMessageOptions | JSONEncodable<APIEmbed>): BaseMessageOptions

Defined in: projects/utilities/packages/discord.js-utilities/src/lib/PaginatedMessages/PaginatedMessage.ts:365

Resolves the template for the PaginatedMessage.

Parameters

ParameterTypeDescription
template?BaseMessageOptions | JSONEncodable<APIEmbed>The template to resolve.

Returns

BaseMessageOptions

The resolved template as a BaseMessageOptions object.