diff options
| author | Zeyla Hellyer <[email protected]> | 2018-01-17 09:56:35 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-01-17 09:56:35 -0800 |
| commit | d1113c07f061149b5d090c1f15c3c03806f8b0cf (patch) | |
| tree | 5a654b81bef56dd03c4d4b3e51a2afb5641065d3 /src | |
| parent | Define `A` only once (diff) | |
| download | serenity-d1113c07f061149b5d090c1f15c3c03806f8b0cf.tar.xz serenity-d1113c07f061149b5d090c1f15c3c03806f8b0cf.zip | |
Create unset member instances on presence updates
If a presence update for a guild comes in and their associated member
instance is not present (e.g. in a large guild that wasn't member
chunked), then create one with the infomation known out of the presence
update. This includes their user information, guild ID, nickname, and
roles, but not their `deaf`, `joined_at`, and `mute` state.
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/event.rs | 19 |
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); |