diff options
| author | Zeyla Hellyer <[email protected]> | 2018-04-26 21:13:53 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-04-26 21:15:17 -0700 |
| commit | 526c366eb355ff2cdfd5769621448d35926fe123 (patch) | |
| tree | 3a819dfa35d3807ab52035554a6f4aab5e130e4a /src | |
| parent | Fix voice hang on `.stop()` (diff) | |
| download | serenity-526c366eb355ff2cdfd5769621448d35926fe123.tar.xz serenity-526c366eb355ff2cdfd5769621448d35926fe123.zip | |
Fix panics on guild member update dispatches
Fixes panics for Guild Member Update dispatches, a retrieval for the
new version of the member sooner and checking that the member exists
prior to dispatching.
Closes #264.
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/dispatch.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 9413701..b91b8d7 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -1,7 +1,8 @@ use gateway::InterMessage; use model::{ + channel::{Channel, Message}, event::Event, - channel::{Channel, Message} + guild::Member, }; use std::sync::Arc; use parking_lot::Mutex; @@ -391,20 +392,21 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>( }, DispatchEvent::Model(Event::GuildMemberUpdate(mut event)) => { let _before = update!(event); + + let _after: Option<Member> = feature_cache! {{ + CACHE.read().member(event.guild_id, event.user.id) + } else { + None + }}; + let context = context(data, runner_tx, shard_id); let event_handler = Arc::clone(event_handler); threadpool.execute(move || { feature_cache! {{ - // This is safe to unwrap, as the update would have created - // the member if it did not exist. So, there is be _no_ way - // that this could fail under any circumstance. - let after = CACHE.read() - .member(event.guild_id, event.user.id) - .unwrap() - .clone(); - - event_handler.guild_member_update(context, _before, after); + if let Some(after) = _after { + event_handler.guild_member_update(context, _before, after); + } } else { event_handler.guild_member_update(context, event); }} |