class Message

extends

Base
export class Message<InGuild extends boolean = boolean> extends Base

Represents a message on Discord.

Type Parameters

optional
InGuild? extends boolean = boolean

activity : MessageActivity | null

Group activity

applicationId : Snowflake | null

The id of the application of the interaction that sent this message, if any

A collection of attachments in the message - e.g. Pictures - mapped by their ids. This property requires the GatewayIntentBits.MessageContent privileged intent in a guild for messages that do not mention the client.

author : User

The author of the message

readonly
bulkDeletable : boolean

Whether the message is bulk deletable by the client user

readonly
channel : If<InGuild, GuildTextBasedChannel, TextBasedChannel>

The channel that the message was sent in

channelId : Snowflake

The id of the channel the message was sent in

readonly
cleanContent : string

The message contents with all mentions replaced by the equivalent text. If mentions cannot be resolved to a name, the relevant mention in the message content will not be converted.

readonly
client : Client<true>

The client that instantiated this

Inherited from: Base

An array of action rows in the message. This property requires the GatewayIntentBits.MessageContent privileged intent in a guild for messages that do not mention the client.

content : string

The content of the message. This property requires the GatewayIntentBits.MessageContent privileged intent in a guild for messages that do not mention the client.

readonly
createdAt : Date

The time the message was sent at

createdTimestamp : number

The timestamp the message was sent at

readonly
crosspostable : boolean

Whether the message is crosspostable by the client user

readonly
deletable : boolean

Whether the message is deletable by the client user

readonly
editable : boolean

Whether the message is editable by the client user

readonly
editedAt : Date | null

The time the message was last edited at (if applicable)

editedTimestamp : number | null

The timestamp the message was last edited at (if applicable)

embeds : Embed[]

An array of embeds in the message - e.g. YouTube Player. This property requires the GatewayIntentBits.MessageContent privileged intent in a guild for messages that do not mention the client.

Flags that are applied to the message

groupActivityApplication : ClientApplication | null

Supplemental application information for group activities

readonly
guild : If<InGuild, Guild>

The guild the message was sent in (if in a guild channel)

guildId : If<InGuild, Snowflake>

The id of the guild the message was sent in, if any

readonly
hasThread : boolean

Whether this message has a thread associated with it

The message's id

interaction : MessageInteraction | null

Partial data of the interaction that this message is a reply to

readonly
member : GuildMember | null

Represents the author of the message as a guild member. Only available if the message comes from a guild where the author is still a member

mentions : MessageMentions<InGuild>

All valid mentions that the message contains

nonce : string | number | null

A random number or string used for checking message delivery This is only received after the message was sent successfully, and lost if re-fetched

readonly
partial : false

Whether or not this message is a partial

readonly
pinnable : boolean

Whether the message is pinnable by the client user

pinned : boolean

Whether or not this message is pinned

poll : Poll | null

The poll that was sent with the message

position : number | null

A generally increasing integer (there may be gaps or duplicates) that represents the approximate position of the message in a thread.

reactions : ReactionManager

A manager of the reactions belonging to this message

reference : MessageReference | null

Message reference data

roleSubscriptionData : RoleSubscriptionData | null

The data of the role subscription purchase or renewal. This is present on MessageType.RoleSubscriptionPurchase messages.

A collection of stickers in the message

system : boolean

Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)

readonly
thread : AnyThreadChannel | null

The thread started by this message This property is not suitable for checking whether a message has a thread, use hasThread instead.

tts : boolean

Whether or not the message was Text-To-Speech

The type of the message

readonly
url : string

The URL to jump to this message

webhookId : Snowflake | null

The id of the webhook that sent the message, if applicable

awaitMessageComponent<

ComponentType extends MessageComponentType

>(
options?: AwaitMessageCollectorOptionsParams<ComponentType, InGuild>
) : Promise<MappedInteractionTypes<InGuild>[ComponentType]>

Collects a single component interaction that passes the filter. The Promise will reject if the time expires.

Examples:
// Collect a message component interaction
const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
message.awaitMessageComponent({ filter, time: 15_000 })
  .then(interaction => console.log(`${interaction.customId} was clicked!`))
  .catch(console.error);

Similar to createReactionCollector but in promise form. Resolves with a collection of reactions that pass the specified filter.

Examples:
// Create a reaction collector
const filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId'
message.awaitReactions({ filter, time: 15_000 })
  .then(collected => console.log(`Collected ${collected.size} reactions`))
  .catch(console.error);

createMessageComponentCollector<

ComponentType extends MessageComponentType

>(
options?: MessageCollectorOptionsParams<ComponentType, InGuild>
) : InteractionCollector<MappedInteractionTypes<InGuild>[ComponentType]>

Creates a message component interaction collector.

Examples:
// Create a message component interaction collector
const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
const collector = message.createMessageComponentCollector({ filter, time: 15_000 });
collector.on('collect', i => console.log(`Collected ${i.customId}`));
collector.on('end', collected => console.log(`Collected ${collected.size} items`));

createReactionCollector() : ReactionCollector

Creates a reaction collector.

Examples:
// Create a reaction collector
const filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId';
const collector = message.createReactionCollector({ filter, time: 15_000 });
collector.on('collect', r => console.log(`Collected ${r.emoji.name}`));
collector.on('end', collected => console.log(`Collected ${collected.size} items`));

crosspost() : Promise<Message<InGuild>>

Publishes a message in an announcement channel to all channels following it.

Examples:
// Crosspost a message
if (message.channel.type === ChannelType.GuildAnnouncement) {
  message.crosspost()
    .then(() => console.log('Crossposted message'))
    .catch(console.error);
}

delete() : Promise<Message<InGuild>>

Deletes the message.

Examples:
// Delete a message
message.delete()
  .then(msg => console.log(`Deleted message from ${msg.author.username}`))
  .catch(console.error);

edit() : Promise<Message<InGuild>>

Edits the content of the message.

Examples:
// Update the content of a message
message.edit('This is my new content!')
  .then(msg => console.log(`Updated the content of a message to ${msg.content}`))
  .catch(console.error);

equals(
message: Message
rawData: unknown
) : boolean

Used mainly internally. Whether two messages are identical in properties. If you want to compare messages without checking all the properties, use message.id === message2.id, which is much more efficient. This method allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.

fetch(
force?: boolean
) : Promise<Message<InGuild>>

Fetch this message.

fetchReference() : Promise<Message<InGuild>>

Fetches the Message this crosspost/reply/pin-add references, if available to the client

fetchWebhook() : Promise<Webhook>

Fetches the webhook used to create this message.

inGuild() : this is Message<true>

Whether this message is from a guild.

pin(
reason?: string
) : Promise<Message<InGuild>>

Pins this message to the channel's pinned messages.

Examples:
// Pin a message
message.pin()
  .then(console.log)
  .catch(console.error)

Adds a reaction to the message.

Examples:
// React to a message with a unicode emoji
message.react('🤔')
  .then(console.log)
  .catch(console.error);
// React to a message with a custom emoji
message.react(message.guild.emojis.cache.get('123456789012345678'))
  .then(console.log)
  .catch(console.error);

removeAttachments() : Promise<Message<InGuild>>

Removes the attachments from this message.

reply() : Promise<Message<InGuild>>

Send an inline reply to this message.

Examples:
// Reply to a message
message.reply('This is a reply!')
  .then(() => console.log(`Replied to message "${message.content}"`))
  .catch(console.error);

resolveComponent(
customId: string
) : MessageActionRowComponent | null

Resolves a component by a custom id.

startThread() : Promise<AnyThreadChannel>

Create a new public thread from this message

suppressEmbeds(
suppress?: boolean
) : Promise<Message<InGuild>>

Suppresses or unsuppresses embeds on a message.

toJSON() : unknown

toString() : string

When concatenated with a string, this automatically concatenates the message's content instead of the object.

Examples:
// Logs: Message: This is a message!
console.log(`Message: ${message}`);

unpin(
reason?: string
) : Promise<Message<InGuild>>

Unpins this message from the channel's pinned messages.

Examples:
// Unpin a message
message.unpin()
  .then(console.log)
  .catch(console.error)

valueOf() : string

Inherited from: Base