aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorLakelezz <[email protected]>2018-11-11 17:38:12 +0100
committerGitHub <[email protected]>2018-11-11 17:38:12 +0100
commited17114c3d5052eb88b95217bd248bba9a294e6a (patch)
treed7031776fa64a87b07ebcb234335fb653f23542b /src/model
parentUpdate `base64` and `sodiumoxide` (#431) (diff)
downloadserenity-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.rs9
-rw-r--r--src/model/user.rs23
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 {