aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/model/channel/message.rs3
-rw-r--r--src/model/guild/member.rs22
-rw-r--r--tests/resources/message_create_3.json29
-rw-r--r--tests/test_deser.rs3
4 files changed, 55 insertions, 2 deletions
diff --git a/src/model/channel/message.rs b/src/model/channel/message.rs
index 566107b..978e181 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<PartialMember>,
/// 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 9be2d85..cc6bc2a 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<DateTime<FixedOffset>>,
+ /// 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<RoleId>,
+}
diff --git a/tests/resources/message_create_3.json b/tests/resources/message_create_3.json
new file mode 100644
index 0000000..6301355
--- /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 e547e9d..70b6f1f 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]