Struct serenity::model::channel::Message

source ·
#[non_exhaustive]
pub struct Message {
Show 32 fields pub id: MessageId, pub channel_id: ChannelId, pub author: User, pub content: String, pub timestamp: Timestamp, pub edited_timestamp: Option<Timestamp>, pub tts: bool, pub mention_everyone: bool, pub mentions: Vec<User>, pub mention_roles: Vec<RoleId>, pub mention_channels: Vec<ChannelMention>, pub attachments: Vec<Attachment>, pub embeds: Vec<Embed>, pub reactions: Vec<MessageReaction>, pub nonce: Option<Nonce>, pub pinned: bool, pub webhook_id: Option<WebhookId>, pub kind: MessageType, pub activity: Option<MessageActivity>, pub application: Option<MessageApplication>, pub application_id: Option<ApplicationId>, pub message_reference: Option<MessageReference>, pub flags: Option<MessageFlags>, pub referenced_message: Option<Box<Message>>, pub interaction: Option<Box<MessageInteraction>>, pub thread: Option<GuildChannel>, pub components: Vec<ActionRow>, pub sticker_items: Vec<StickerItem>, pub position: Option<u64>, pub role_subscription_data: Option<RoleSubscriptionData>, pub guild_id: Option<GuildId>, pub member: Option<Box<PartialMember>>,
}
Expand description

A representation of a message over a guild’s text channel, a group, or a private channel.

Discord docs with some extra fields.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§id: MessageId

The unique Id of the message. Can be used to calculate the creation date of the message.

§channel_id: ChannelId

The Id of the Channel that the message was sent to.

§author: User

The user that sent the message.

§content: String

The content of the message.

§timestamp: Timestamp

Initial message creation timestamp, calculated from its Id.

§edited_timestamp: Option<Timestamp>

The timestamp of the last time the message was updated, if it was.

§tts: bool

Indicator of whether the command is to be played back via text-to-speech.

In the client, this is done via the /tts slash command.

§mention_everyone: bool

Indicator of whether the message mentions everyone.

§mentions: Vec<User>

Array of users mentioned in the message.

§mention_roles: Vec<RoleId>

Array of Roles’ Ids mentioned in the message.

§mention_channels: Vec<ChannelMention>

Channels specifically mentioned in this message.

Note: Not all channel mentions in a message will appear in Self::mention_channels. Only textual channels that are visible to everyone in a lurkable guild will ever be included.

A lurkable guild is one that allows users to read public channels in a server without actually joining the server. It also allows users to look at these channels without being logged in to Discord.

Only crossposted messages (via Channel Following) currently include Self::mention_channels at all. If no mentions in the message meet these requirements, this field will not be sent.

Refer to Discord’s documentation for more information.

§attachments: Vec<Attachment>

An vector of the files attached to a message.

§embeds: Vec<Embed>

Array of embeds sent with the message.

§reactions: Vec<MessageReaction>

Array of reactions performed on the message.

§nonce: Option<Nonce>

Non-repeating number used for ensuring message order.

§pinned: bool

Indicator of whether the message is pinned.

§webhook_id: Option<WebhookId>

The Id of the webhook that sent this message, if one did.

§kind: MessageType

Indicator of the type of message this is, i.e. whether it is a regular message or a system message.

§activity: Option<MessageActivity>

Sent with Rich Presence-related chat embeds.

§application: Option<MessageApplication>

Sent with Rich Presence-related chat embeds.

§application_id: Option<ApplicationId>

If the message is an Interaction or application-owned webhook, this is the id of the application.

§message_reference: Option<MessageReference>

Reference data sent with crossposted messages.

§flags: Option<MessageFlags>

Bit flags describing extra features of the message.

§referenced_message: Option<Box<Message>>

The message that was replied to using this message.

§interaction: Option<Box<MessageInteraction>>

Sent if the message is a response to an Interaction.

§thread: Option<GuildChannel>

The thread that was started from this message, includes thread member object.

§components: Vec<ActionRow>

The components of this message

§sticker_items: Vec<StickerItem>

Array of message sticker item objects.

§position: Option<u64>

A generally increasing integer (there may be gaps or duplicates) that represents the approximate position of the message in a thread, it can be used to estimate the relative position of the message in a thread in company with total_message_sent on parent thread.

§role_subscription_data: Option<RoleSubscriptionData>

Data of the role subscription purchase or renewal that prompted this MessageType::RoleSubscriptionPurchase message.

§guild_id: Option<GuildId>

The Id of the Guild that the message was sent in. This value will only be present if this message was received over the gateway, therefore do not use this to check if message is in DMs, it is not a reliable method.

§member: Option<Box<PartialMember>>

A partial amount of data about the user’s member data

Only present in MessageCreateEvent.

Implementations§

source§

impl Message

source

pub async fn crosspost(&self, cache_http: impl CacheHttp) -> Result<Message>

Available on crate feature model only.

Crossposts this message.

Requires either to be the message author or to have manage Manage Messages permissions on this channel.

Note: Only available on news channels.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

Returns a ModelError::MessageAlreadyCrossposted if the message has already been crossposted.

Returns a ModelError::CannotCrosspostMessage if the message cannot be crossposted.

source

pub async fn channel(&self, cache_http: impl CacheHttp) -> Result<Channel>

Available on crate feature model only.

First attempts to find a Channel by its Id in the cache, upon failure requests it via the REST API.

Note: If the cache-feature is enabled permissions will be checked and upon owning the required permissions the HTTP-request will be issued.

§Errors

Can return an error if the HTTP request fails.

source

pub fn is_own(&self, cache: impl AsRef<Cache>) -> bool

Available on crate features model and cache only.

A util function for determining whether this message was sent by someone else, or the bot.

source

pub async fn delete(&self, cache_http: impl CacheHttp) -> Result<()>

Available on crate feature model only.

Deletes the message.

Note: The logged in user must either be the author of the message or have the Manage Messages permission.

§Errors

If the cache feature is enabled, then returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn delete_reactions(&self, cache_http: impl CacheHttp) -> Result<()>

Available on crate feature model only.

Deletes all of the Reactions associated with the message.

Note: Requires the Manage Messages permission.

§Errors

If the cache feature is enabled, then returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn delete_reaction( &self, http: impl AsRef<Http>, user_id: Option<UserId>, reaction_type: impl Into<ReactionType> ) -> Result<()>

Available on crate feature model only.

Deletes the given Reaction from the message.

Note: Requires the Manage Messages permission, if the current user did not perform the reaction.

§Errors

Returns Error::Http if the current user did not perform the reaction, or lacks permission.

source

pub async fn delete_reaction_emoji( &self, cache_http: impl CacheHttp, reaction_type: impl Into<ReactionType> ) -> Result<()>

Available on crate feature model only.

Deletes all of the Reactions of a given emoji associated with the message.

Note: Requires the Manage Messages permission.

§Errors

If the cache feature is enabled, then returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn edit( &mut self, cache_http: impl CacheHttp, builder: EditMessage ) -> Result<()>

Available on crate feature model only.

Edits this message, replacing the original content with new content.

Message editing preserves all unchanged message data, with some exceptions for embeds and attachments.

Note: In most cases requires that the current user be the author of the message.

Refer to the documentation for EditMessage for information regarding content restrictions and requirements.

§Examples

Edit a message with new content:

// assuming a `message` has already been bound
let builder = EditMessage::new().content("new content");
message.edit(&http, builder).await?;
§Errors

If the cache is enabled, returns a ModelError::InvalidUser if the current user is not the author. Otherwise returns Error::Http if the user lacks permission, as well as if invalid data is given.

Returns a ModelError::MessageTooLong if the message contents are too long.

source

pub fn content_safe(&self, cache: impl AsRef<Cache>) -> String

Available on crate features model and cache only.

Returns message content, but with user and role mentions replaced with names and everyone/here mentions cancelled.

source

pub async fn reaction_users( &self, http: impl AsRef<Http>, reaction_type: impl Into<ReactionType>, limit: Option<u8>, after: impl Into<Option<UserId>> ) -> Result<Vec<User>>

Available on crate feature model only.

Gets the list of Users who have reacted to a Message with a certain Emoji.

The default limit is 50 - specify otherwise to receive a different maximum number of users. The maximum that may be retrieve at a time is 100, if a greater number is provided then it is automatically reduced.

The optional after attribute is to retrieve the users after a certain user. This is useful for pagination.

Note: Requires the Read Message History permission.

Note: If the passed reaction_type is a custom guild emoji, it must contain the name. So, Emoji or EmojiIdentifier will always work, ReactionType only if ReactionType::Custom::name is Some, and EmojiId will never work.

§Errors

Returns Error::Http if the current user lacks permission.

source

pub fn guild<'a>(&self, cache: &'a Cache) -> Option<GuildRef<'a>>

Available on crate features model and cache only.

Returns the associated Guild for the message if one is in the cache.

Returns None if the guild’s Id could not be found via Self::guild_id or if the Guild itself is not cached.

Requires the cache feature be enabled.

source

pub fn is_private(&self) -> bool

Available on crate feature model only.

True if message was sent using direct messages.

Only use this for messages from the gateway (event handler)! Not for returned Message objects from HTTP requests, like ChannelId::send_message, because Self::guild_id is never set for those, which this method relies on.

source

pub async fn member(&self, cache_http: impl CacheHttp) -> Result<Member>

Available on crate feature model only.

Retrieves a clone of the author’s Member instance, if this message was sent in a guild.

If the instance cannot be found in the cache, or the cache feature is disabled, a HTTP request is performed to retrieve it from Discord’s API.

§Errors

ModelError::ItemMissing is returned if Self::guild_id is None.

source

pub fn overflow_length(content: &str) -> Option<usize>

Available on crate feature model only.

Checks the length of a message to ensure that it is within Discord’s maximum length limit.

Returns None if the message is within the limit, otherwise returns Some with an inner value of how many unicode code points the message is over.

source

pub async fn pin(&self, cache_http: impl CacheHttp) -> Result<()>

Available on crate feature model only.

Pins this message to its channel.

Note: Requires the Manage Messages permission.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn react( &self, cache_http: impl CacheHttp, reaction_type: impl Into<ReactionType> ) -> Result<Reaction>

Available on crate feature model only.

React to the message with a custom Emoji or unicode character.

Note: Requires the Add Reactions permission.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn reply( &self, cache_http: impl CacheHttp, content: impl Into<String> ) -> Result<Message>

Available on crate feature model only.

Uses Discord’s inline reply to a user without pinging them.

User mentions are generally around 20 or 21 characters long.

Note: Requires the Send Messages permission.

Note: Message contents must be under 2000 unicode code points.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

Returns a ModelError::MessageTooLong if the content of the message is over the above limit, containing the number of unicode code points over the limit.

source

pub async fn reply_ping( &self, cache_http: impl CacheHttp, content: impl Into<String> ) -> Result<Message>

Available on crate feature model only.

Uses Discord’s inline reply to a user with a ping.

Note: Requires the Send Messages permission.

Note: Message contents must be under 2000 unicode code points.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

Returns a ModelError::MessageTooLong if the content of the message is over the above limit, containing the number of unicode code points over the limit.

source

pub async fn reply_mention( &self, cache_http: impl CacheHttp, content: impl Display ) -> Result<Message>

Available on crate feature model only.

Replies to the user, mentioning them prior to the content in the form of: @<USER_ID> YOUR_CONTENT.

User mentions are generally around 20 or 21 characters long.

Note: Requires the Send Messages permission.

Note: Message contents must be under 2000 unicode code points.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

Returns a ModelError::MessageTooLong if the content of the message is over the above limit, containing the number of unicode code points over the limit.

source

pub fn mentions_user_id(&self, id: impl Into<UserId>) -> bool

Available on crate feature model only.

Checks whether the message mentions passed UserId.

source

pub fn mentions_user(&self, user: &User) -> bool

Available on crate feature model only.

Checks whether the message mentions passed User.

source

pub async fn mentions_me(&self, cache_http: impl CacheHttp) -> Result<bool>

Available on crate feature model only.

Checks whether the message mentions the current user.

§Errors

May return Error::Http if the cache feature is not enabled, or if the cache is otherwise unavailable.

source

pub async fn unpin(&self, cache_http: impl CacheHttp) -> Result<()>

Available on crate feature model only.

Unpins the message from its channel.

Note: Requires the Manage Messages permission.

§Errors

If the cache is enabled, returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

source

pub async fn author_nick(&self, cache_http: impl CacheHttp) -> Option<String>

Available on crate feature model only.

Tries to return author’s nickname in the current channel’s guild.

Refer to User::nick_in() inside and None outside of a guild.

Available on crate feature model only.

Returns a link referencing this message. When clicked, users will jump to the message. The link will be valid for messages in either private channels or guilds.

Available on crate feature model only.

Same as Self::link but tries to find the GuildId if Discord does not provide it.

source

pub fn await_reaction( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ReactionCollector

Available on crate features model and collector only.

Returns a builder which can be awaited to obtain a reaction or stream of reactions on this message.

source

pub fn await_reactions( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ReactionCollector

Available on crate features model and collector only.
source

pub fn await_component_interaction( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ComponentInteractionCollector

Available on crate features model and collector only.

Returns a builder which can be awaited to obtain a single component interactions or a stream of component interactions on this message.

source

pub fn await_component_interactions( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ComponentInteractionCollector

Available on crate features model and collector only.
source

pub fn await_modal_interaction( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ModalInteractionCollector

Available on crate features model and collector only.

Returns a builder which can be awaited to obtain a model submit interaction or stream of modal submit interactions on this message.

source

pub fn await_modal_interactions( &self, shard_messenger: impl AsRef<ShardMessenger> ) -> ModalInteractionCollector

Available on crate features model and collector only.
source

pub async fn category_id(&self, cache_http: impl CacheHttp) -> Option<ChannelId>

Available on crate feature model only.

Retrieves the message channel’s category ID if the channel has one.

Trait Implementations§

source§

impl ArgumentConvert for Message

Available on crate features client and utils only.

Look up a message by a string.

The lookup strategy is as follows (in order):

  1. Lookup by “{channel ID}-{message ID}” (retrieved by shift-clicking on “Copy ID”)
  2. Lookup by message ID (the message must be in the context channel)
  3. Lookup by message URL
§

type Err = MessageParseError

The associated error which can be returned from parsing.
source§

fn convert<'life0, 'async_trait>( ctx: impl 'async_trait + CacheHttp, _guild_id: Option<GuildId>, channel_id: Option<ChannelId>, s: &'life0 str ) -> Pin<Box<dyn Future<Output = Result<Self, Self::Err>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Parses a string s as a command parameter of this type.
source§

impl AsRef<MessageId> for Message

source§

fn as_ref(&self) -> &MessageId

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Clone for Message

source§

fn clone(&self) -> Message

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Message

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Message

source§

fn default() -> Message

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Message

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<'a> From<&'a Message> for MessageId

source§

fn from(message: &Message) -> MessageId

Gets the Id of a Message.

source§

impl From<&Message> for MessageReference

source§

fn from(m: &Message) -> Self

Converts to this type from the input type.
source§

impl From<Message> for MessageId

source§

fn from(message: Message) -> MessageId

Gets the Id of a Message.

source§

impl Serialize for Message

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneDebuggableStorage for T

source§

impl<T> CloneableStorage for T
where T: Any + Send + Sync + Clone,

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> DebuggableStorage for T
where T: Any + Send + Sync + Debug,

source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,