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

call : MessageCall | null

The call associated with the message

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

id : Snowflake

The message's id

deprecated
interaction : MessageInteraction | null

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

interactionMetadata : MessageInteractionMetadata | null

Partial data of the interaction that this message is a result of

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

All valid mentions that the message contains

messageSnapshots : Collection<Snowflake, MessageSnapshot>

The message associated with the message reference

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

type : MessageType

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`));

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);
}

Deletes the message.

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

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 this message.

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.

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);

Removes the attachments from this message.

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<PublicThreadChannel<false>>

Create a new public thread from this message

suppressEmbeds(
suppress?: boolean = true
) : Promise<OmitPartialGroupDMChannel<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}`);

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