Struct serenity::model::channel::Message[][src]

#[non_exhaustive]
pub struct Message {
Show fields pub id: MessageId, pub attachments: Vec<Attachment>, pub author: User, pub channel_id: ChannelId, pub content: String, pub edited_timestamp: Option<DateTime<Utc>>, pub embeds: Vec<Embed>, pub guild_id: Option<GuildId>, pub kind: MessageType, pub member: Option<PartialMember>, pub mention_everyone: bool, pub mention_roles: Vec<RoleId>, pub mention_channels: Vec<ChannelMention>, pub mentions: Vec<User>, pub nonce: Value, pub pinned: bool, pub reactions: Vec<MessageReaction>, pub timestamp: DateTime<Utc>, pub tts: bool, pub webhook_id: Option<WebhookId>, pub activity: Option<MessageActivity>, pub application: Option<MessageApplication>, pub message_reference: Option<MessageReference>, pub flags: Option<MessageFlags>, pub stickers: Vec<Sticker>, pub referenced_message: Option<Box<Message>>, pub interaction: Option<MessageInteraction>,
}
Expand description

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

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
Expand description

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

attachments: Vec<Attachment>
Expand description

An vector of the files attached to a message.

author: User
Expand description

The user that sent the message.

channel_id: ChannelId
Expand description

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

content: String
Expand description

The content of the message.

edited_timestamp: Option<DateTime<Utc>>
Expand description

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

embeds: Vec<Embed>
Expand description

Array of embeds sent with the message.

guild_id: Option<GuildId>
Expand description

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.

kind: MessageType
Expand description

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

member: Option<PartialMember>
Expand description

A partial amount of data about the user’s member data, if this message was sent in a guild.

mention_everyone: bool
Expand description

Indicator of whether the message mentions everyone.

mention_roles: Vec<RoleId>
Expand description

Array of Roles’ Ids mentioned in the message.

mention_channels: Vec<ChannelMention>
Expand description

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.

mentions: Vec<User>
Expand description

Array of users mentioned in the message.

nonce: Value
Expand description

Non-repeating number used for ensuring message order.

pinned: bool
Expand description

Indicator of whether the message is pinned.

reactions: Vec<MessageReaction>
Expand description

Array of reactions performed on the message.

timestamp: DateTime<Utc>
Expand description

Initial message creation timestamp, calculated from its Id.

tts: bool
Expand description

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.

webhook_id: Option<WebhookId>
Expand description

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

activity: Option<MessageActivity>
Expand description

Sent with Rich Presence-related chat embeds.

application: Option<MessageApplication>
Expand description

Sent with Rich Presence-related chat embeds.

message_reference: Option<MessageReference>
Expand description

Reference data sent with crossposted messages.

flags: Option<MessageFlags>
Expand description

Bit flags describing extra features of the message.

stickers: Vec<Sticker>
Expand description

Array of stickers sent with the message.

referenced_message: Option<Box<Message>>
Expand description

The message that was replied to using this message.

interaction: Option<MessageInteraction>
This is supported on crate feature unstable_discord_api only.
Expand description

Sent if the message is a response to an Interaction.

Implementations

impl Message[src]

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

Crossposts this message.

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

Note: Only available on announcements 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.

pub async fn channel(&self, cache: impl AsRef<Cache>) -> Option<Channel>[src]

Retrieves the related channel located in the cache.

Returns None if the channel is not in the cache.

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

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

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

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.

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

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.

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

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.

pub async fn edit<F>(&mut self, cache_http: impl CacheHttp, f: F) -> Result<()> where
    F: FnOnce(&mut EditMessage) -> &mut EditMessage
[src]

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

Message editing preserves all unchanged message data.

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

Note: Requires that the current user be the author of the message.

Examples

Edit a message with new content:

// assuming a `message` has already been bound

message.edit(&context, |m| m.content("new content"));

Errors

If the cache is enabled, returns a ModelError::InvalidUser if the current user is not the author.

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

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

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

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>>
[src]

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.

Errors

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

pub async fn guild(&self, cache: impl AsRef<Cache>) -> Option<Guild>[src]

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.

pub async fn guild_field<Ret, Fun>(
    &self,
    cache: impl AsRef<Cache>,
    field_accessor: Fun
) -> Option<Ret> where
    Ret: Clone,
    Fun: FnOnce(&Guild) -> Ret, 
[src]

Returns a field to the Guild for the message if one is in the cache. The field can be selected via the field_accessor.

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.

pub fn is_private(&self) -> bool[src]

True if message was sent using direct messages.

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

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.

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

Checks the length of a string to ensure that it is within Discord’s maximum message 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.

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

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.

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

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.

pub async fn reply(
    &self,
    cache_http: impl CacheHttp,
    content: impl Display
) -> Result<Message>
[src]

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.

pub async fn reply_ping(
    &self,
    cache_http: impl CacheHttp,
    content: impl Display
) -> Result<Message>
[src]

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.

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

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.

pub async fn suppress_embeds(
    &mut self,
    cache_http: impl CacheHttp
) -> Result<()>
[src]

Delete all embeds in this 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.

Otherwise returns Error::Http if the current user lacks permission.

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

Checks whether the message mentions passed UserId.

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

Checks whether the message mentions passed User.

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

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.

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

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.

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

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

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

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.

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

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

Notable traits for CollectReaction<'a>

impl<'a> Future for CollectReaction<'a> type Output = Option<Arc<ReactionAction>>;
[src]

This is supported on crate feature collector only.

Await a single reaction on this message.

pub fn await_reactions<'a>(
    &self,
    shard_messenger: &'a impl AsRef<ShardMessenger>
) -> ReactionCollectorBuilder<'a>
[src]

This is supported on crate feature collector only.

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

pub async fn category_id(&self, cache: impl AsRef<Cache>) -> Option<ChannelId>[src]

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

Trait Implementations

impl AsRef<MessageId> for Message[src]

fn as_ref(&self) -> &MessageId[src]

Performs the conversion.

impl Clone for Message[src]

fn clone(&self) -> Message[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for Message[src]

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

Formats the value using the given formatter. Read more

impl<'de> Deserialize<'de> for Message[src]

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

Deserialize this value from the given Serde deserializer. Read more

impl From<&'_ Message> for MessageReference[src]

fn from(m: &Message) -> Self[src]

Performs the conversion.

impl<'a> From<&'a Message> for MessageId[src]

fn from(message: &Message) -> MessageId[src]

Gets the Id of a Message.

impl From<Message> for MessageId[src]

fn from(message: Message) -> MessageId[src]

Gets the Id of a Message.

impl Parse for Message[src]

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.

fn parse<'life0, 'life1, 'life2, 'async_trait>(
    ctx: &'life0 Context,
    msg: &'life1 Message,
    s: &'life2 str
) -> Pin<Box<dyn Future<Output = Result<Self, Self::Err>> + Send + 'async_trait>> where
    'life0: 'async_trait,
    'life1: 'async_trait,
    'life2: 'async_trait,
    Self: 'async_trait, 
[src]

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

impl Serialize for Message[src]

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

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

impl RefUnwindSafe for Message

impl Send for Message

impl Sync for Message

impl Unpin for Message

impl UnwindSafe for Message

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T> Instrument for T[src]

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

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

fn in_current_span(self) -> Instrumented<Self>[src]

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

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.

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

pub fn vzip(self) -> V

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