class Message
extends
Baseexport class Message<InGuild extends boolean = boolean> extends Base
Represents a message on Discord.
MessageActivity | null activity :
Group activity
The id of the application of the interaction that sent this message, if any
Collection<Snowflake, Attachment> attachments :
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.
User author :
The author of the message
readonlyboolean bulkDeletable :
Whether the message is bulk deletable by the client user
MessageCall | null call :
The call associated with the message
readonlyIf<InGuild, GuildTextBasedChannel, TextBasedChannel> channel :
The channel that the message was sent in
Snowflake channelId :
The id of the channel the message was sent in
readonlystring cleanContent :
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.
ActionRow<MessageActionRowComponent>[] components :
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.
string content :
The content of the message. This property requires the GatewayIntentBits.MessageContent privileged intent in a guild for messages that do not mention the client.
readonlyDate createdAt :
The time the message was sent at
number createdTimestamp :
The timestamp the message was sent at
readonlyboolean crosspostable :
Whether the message is crosspostable by the client user
readonlyboolean deletable :
Whether the message is deletable by the client user
readonlyboolean editable :
Whether the message is editable by the client user
Embed[] embeds :
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.
Readonly<MessageFlagsBitField> flags :
Flags that are applied to the message
ClientApplication | null groupActivityApplication :
Supplemental application information for group activities
readonlyboolean hasThread :
Whether this message has a thread associated with it
Snowflake id :
The message's id
deprecatedMessageInteraction | null interaction :
Use interactionMetadata instead.
Partial data of the interaction that this message is a reply to
MessageInteractionMetadata | null interactionMetadata :
Partial data of the interaction that this message is a result of
readonlyGuildMember | null member :
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
MessageMentions<InGuild> mentions :
All valid mentions that the message contains
Collection<Snowflake, MessageSnapshot> messageSnapshots :
The message associated with the message reference
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
readonlyboolean pinnable :
Whether the message is pinnable by the client user
boolean pinned :
Whether or not this message is pinned
A generally increasing integer (there may be gaps or duplicates) that represents the approximate position of the message in a thread.
ReactionManager reactions :
A manager of the reactions belonging to this message
MessageReference | null reference :
Message reference data
CommandInteractionResolvedData | null resolved :
RoleSubscriptionData | null roleSubscriptionData :
The data of the role subscription purchase or renewal. This is present on MessageType.RoleSubscriptionPurchase messages.
Collection<Snowflake, Sticker> stickers :
A collection of stickers in the message
boolean system :
Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)
readonlyAnyThreadChannel | null thread :
The thread started by this message This property is not suitable for checking whether a message has a thread, use hasThread instead.
boolean tts :
Whether or not the message was Text-To-Speech
MessageType type :
The type of the message
readonlystring url :
The URL to jump to this message
awaitMessageComponentComponentType extends MessageComponentType
>(options?: AwaitMessageCollectorOptionsParams<ComponentType, InGuild> = {}) : Promise<MappedInteractionTypes<InGuild>[ComponentType]> <
ComponentType extends MessageComponentType
Collects a single component interaction that passes the filter. The Promise will reject if the time expires.
// 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);
awaitReactionsoptions?: AwaitReactionsOptions = {}) : Promise<Collection<Snowflake | string, MessageReaction>> (
Similar to createReactionCollector but in promise form. Resolves with a collection of reactions that pass the specified filter.
// 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);
createMessageComponentCollectorComponentType extends MessageComponentType
>(options?: MessageCollectorOptionsParams<ComponentType, InGuild> = {}) : InteractionCollector<MappedInteractionTypes<InGuild>[ComponentType]> <
ComponentType extends MessageComponentType
Creates a message component interaction collector.
// 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`));
createReactionCollectoroptions?: ReactionCollectorOptions = {}) : ReactionCollector (
Creates a reaction collector.
// 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`));
crosspostPromise<OmitPartialGroupDMChannel<Message<InGuild>>> () :
Publishes a message in an announcement channel to all channels following it.
// Crosspost a message
if (message.channel.type === ChannelType.GuildAnnouncement) {
message.crosspost()
.then(() => console.log('Crossposted message'))
.catch(console.error);
}
deletePromise<OmitPartialGroupDMChannel<Message<InGuild>>> () :
Deletes the message.
// Delete a message
message.delete()
.then(msg => console.log(`Deleted message from ${msg.author.username}`))
.catch(console.error);
editoptions: string | MessageEditOptions | MessagePayload) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Edits the content of the message.
// 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);
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.
fetchforce?: boolean = true) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Fetch this message.
fetchReferencePromise<OmitPartialGroupDMChannel<Message<InGuild>>> () :
Fetches the Message this crosspost/reply/pin-add references, if available to the client
inGuildthis is Message<true> () :
Whether this message is from a guild.
pinreason?: string) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Pins this message to the channel's pinned messages.
// Pin a message
message.pin()
.then(console.log)
.catch(console.error)
reactemoji: EmojiIdentifierResolvable) : Promise<MessageReaction> (
Adds a reaction to the message.
// 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);
removeAttachmentsPromise<OmitPartialGroupDMChannel<Message<InGuild>>> () :
Removes the attachments from this message.
replyoptions: string | MessagePayload | MessageReplyOptions) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Send an inline reply to this message.
// Reply to a message
message.reply('This is a reply!')
.then(() => console.log(`Replied to message "${message.content}"`))
.catch(console.error);
resolveComponentcustomId: string) : MessageActionRowComponent | null (
Resolves a component by a custom id.
startThreadoptions: StartThreadOptions) : Promise<PublicThreadChannel<false>> (
Create a new public thread from this message
suppressEmbedssuppress?: boolean = true) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Suppresses or unsuppresses embeds on a message.
toJSONunknown () :
toStringstring () :
When concatenated with a string, this automatically concatenates the message's content instead of the object.
// Logs: Message: This is a message!
console.log(`Message: ${message}`);
unpinreason?: string) : Promise<OmitPartialGroupDMChannel<Message<InGuild>>> (
Unpins this message from the channel's pinned messages.
// Unpin a message
message.unpin()
.then(console.log)
.catch(console.error)