diff options
| author | Lakelezz <[email protected]> | 2018-11-11 17:38:12 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-11-11 17:38:12 +0100 |
| commit | ed17114c3d5052eb88b95217bd248bba9a294e6a (patch) | |
| tree | d7031776fa64a87b07ebcb234335fb653f23542b /src/model | |
| parent | Update `base64` and `sodiumoxide` (#431) (diff) | |
| download | serenity-ed17114c3d5052eb88b95217bd248bba9a294e6a.tar.xz serenity-ed17114c3d5052eb88b95217bd248bba9a294e6a.zip | |
Add Nick Methods for `Message` and `UserId` (#432)
Diffstat (limited to 'src/model')
| -rw-r--r-- | src/model/channel/message.rs | 9 | ||||
| -rw-r--r-- | src/model/user.rs | 23 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/model/channel/message.rs b/src/model/channel/message.rs index 5589ad0..e568a28 100644 --- a/src/model/channel/message.rs +++ b/src/model/channel/message.rs @@ -546,6 +546,15 @@ impl Message { http::unpin_message(self.channel_id.0, self.id.0) } + /// Tries to return author's nickname in the current channel's guild. + /// + /// **Note**: + /// If message was sent in a private channel, then the function will return + /// `None`. + pub fn author_nick(&self) -> Option<String> { + self.guild_id.as_ref().and_then(|guild_id| self.author.nick_in(*guild_id)) + } + pub(crate) fn check_content_length(map: &JsonMap) -> Result<()> { if let Some(content) = map.get("content") { if let Value::String(ref content) = *content { diff --git a/src/model/user.rs b/src/model/user.rs index 1e90cb4..2c4ad00 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -712,6 +712,29 @@ impl User { /// ``` #[inline] pub fn tag(&self) -> String { tag(&self.name, self.discriminator) } + + /// Returns the user's nickname in the given `guild_id`. + /// + /// If none is used, it returns `None`. + #[inline] + pub fn nick_in<G>(&self, guild_id: G) -> Option<String> + where G: Into<GuildId> { + self._nick_in(guild_id.into()) + } + + fn _nick_in(&self, guild_id: GuildId) -> Option<String> { + #[cfg(feature = "cache")] + { + guild_id.to_guild_cached().and_then(|guild| { + guild.read().members.get(&self.id).and_then(|member| member.nick.clone()) + }) + } + + #[cfg(not(feature = "cache"))] + { + guild_id.member(&self.id).and_then(|member| member.nick.clone()) + } + } } impl fmt::Display for User { |