aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/model/event.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/model/event.rs b/src/model/event.rs
index 9cab339..6a58ce4 100644
--- a/src/model/event.rs
+++ b/src/model/event.rs
@@ -823,6 +823,25 @@ impl CacheUpdate for PresenceUpdateEvent {
.presences
.insert(self.presence.user_id, self.presence.clone());
}
+
+ // Create a partial member instance out of the presence update
+ // data. This includes everything but `deaf`, `mute`, and
+ // `joined_at`.
+ if !guild.members.contains_key(&self.presence.user_id) {
+ if let Some(user) = self.presence.user.as_ref() {
+ let roles = self.roles.clone().unwrap_or_default();
+
+ guild.members.insert(self.presence.user_id, Member {
+ deaf: false,
+ guild_id: guild_id,
+ joined_at: None,
+ mute: false,
+ nick: self.presence.nick.clone(),
+ user: Arc::clone(&user),
+ roles,
+ });
+ }
+ }
}
} else if self.presence.status == OnlineStatus::Offline {
cache.presences.remove(&self.presence.user_id);