diff options
| author | Zeyla Hellyer <[email protected]> | 2017-03-20 22:05:12 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-03-20 22:10:15 -0700 |
| commit | cd914f503c8f0ada7473b5b56e4ad7830370ea45 (patch) | |
| tree | 3f72ca3f878efe2d96a1e64479e6e23dc7c95113 /src/model/event.rs | |
| parent | Fix deadlock/panic on channel create event for private messages (diff) | |
| download | serenity-cd914f503c8f0ada7473b5b56e4ad7830370ea45.tar.xz serenity-cd914f503c8f0ada7473b5b56e4ad7830370ea45.zip | |
Fix Member methods due to variant joined_at values
Fix an issue where the library would check the Id of the guild that a
member is in by checking the Member's ID and joined_at value with those
of the members of guilds present in the cache.
Performing this check would have the issue of where a joined_at
for a member received over websocket would potentially have a varying
value than that of the same member retrieved over REST.
To fix this, attach the relevant guild's Id to the member on creation,
where the Id is available.
Fixes #68.
Diffstat (limited to 'src/model/event.rs')
| -rw-r--r-- | src/model/event.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/model/event.rs b/src/model/event.rs index b9801dc..5ae6629 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -312,9 +312,11 @@ impl GuildMemberAddEvent { #[doc(hidden)] #[inline] pub fn decode(mut map: Map) -> Result<Self> { + let guild_id = remove(&mut map, "guild_id").and_then(GuildId::decode)?; + Ok(GuildMemberAddEvent { - guild_id: remove(&mut map, "guild_id").and_then(GuildId::decode)?, - member: Member::decode(Value::Object(map))?, + guild_id: guild_id, + member: Member::decode_guild(guild_id, Value::Object(map))?, }) } } @@ -367,9 +369,11 @@ impl GuildMembersChunkEvent { #[doc(hidden)] #[inline] pub fn decode(mut map: Map) -> Result<Self> { + let guild_id = remove(&mut map, "guild_id").and_then(GuildId::decode)?; + Ok(GuildMembersChunkEvent { - guild_id: remove(&mut map, "guild_id").and_then(GuildId::decode)?, - members: remove(&mut map, "members").and_then(decode_members)?, + guild_id: guild_id, + members: remove(&mut map, "members").and_then(|x| decode_guild_members(guild_id, x))?, }) } } |