diff --git a/src/model/channel/message.rs b/src/model/channel/message.rs index 566107b5c5c..978e181cbd8 100644 --- a/src/model/channel/message.rs +++ b/src/model/channel/message.rs @@ -40,6 +40,9 @@ pub struct Message { /// message or a system message. #[serde(rename = "type")] pub kind: MessageType, + /// A partial amount of data about the user's member data, if this message + /// was sent in a guild. + pub member: Option, /// Indicator of whether the message mentions everyone. pub mention_everyone: bool, /// Array of [`Role`]s' Ids mentioned in the message. diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs index 9be2d854ece..cc6bc2aff4b 100644 --- a/src/model/guild/member.rs +++ b/src/model/guild/member.rs @@ -1,8 +1,8 @@ use model::prelude::*; use chrono::{DateTime, FixedOffset}; use std::fmt::{ - Display, - Formatter, + Display, + Formatter, Result as FmtResult }; use super::deserialize_sync_user; @@ -462,3 +462,21 @@ impl Display for Member { Display::fmt(&self.user.read().mention(), f) } } + +/// A partial amount of data for a member. +/// +/// This is used in [`Message`]s from [`Guild`]s. +/// +/// [`Guild`]: struct.Guild.html +/// [`Message`]: ../channel/struct.Message.html +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct PartialMember { + /// Indicator of whether the member can hear in voice channels. + pub deaf: bool, + /// Timestamp representing the date when the member joined. + pub joined_at: Option>, + /// Indicator of whether the member can speak in voice channels. + pub mute: bool, + /// Vector of Ids of [`Role`]s given to the member. + pub roles: Vec, +} diff --git a/tests/resources/message_create_3.json b/tests/resources/message_create_3.json new file mode 100644 index 00000000000..63013558737 --- /dev/null +++ b/tests/resources/message_create_3.json @@ -0,0 +1,29 @@ +{ + "type": 0, + "tts": false, + "timestamp": "2017-01-01T01:01:01.100000+00:00", + "pinned": false, + "nonce": -6000000000000000, + "mentions": [], + "mention_roles": [], + "mention_everyone": false, + "id": "300000000000000000", + "embeds": [], + "edited_timestamp": null, + "content": "fake", + "channel_id": "100000000000000000", + "author": { + "username": "fake", + "id": "300000000000000000", + "discriminator": "1234", + "bot": true, + "avatar": "f133549aac3208319a9fbc3c12345678" + }, + "member": { + "joined_at": "2017-11-19T18:55:33.00000+00:00", + "roles": [381891844067557378, 391753382181863425, 381925348956438528], + "deaf": false, + "mute": false + }, + "attachments": [] + } diff --git a/tests/test_deser.rs b/tests/test_deser.rs index e547e9d5f64..70b6f1f8d9d 100644 --- a/tests/test_deser.rs +++ b/tests/test_deser.rs @@ -126,6 +126,9 @@ fn message_create() { // negative nonce p!(MessageCreateEvent, "message_create_2"); + + // message from guild with partial member data + p!(MessageCreateEvent, "message_create_3"); } #[test]