diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/context.rs | 7 | ||||
| -rw-r--r-- | src/client/dispatch.rs | 470 | ||||
| -rw-r--r-- | src/client/mod.rs | 20 | ||||
| -rw-r--r-- | src/framework/mod.rs | 3 | ||||
| -rw-r--r-- | src/framework/standard/mod.rs | 41 | ||||
| -rw-r--r-- | src/lib.rs | 4 |
6 files changed, 154 insertions, 391 deletions
diff --git a/src/client/context.rs b/src/client/context.rs index 614f79a..31eeca5 100644 --- a/src/client/context.rs +++ b/src/client/context.rs @@ -4,7 +4,6 @@ use typemap::ShareMap; use gateway::Shard; use model::*; use parking_lot::Mutex; -use tokio_core::reactor::Handle; #[cfg(all(feature = "builder", feature = "cache"))] use super::CACHE; @@ -42,20 +41,16 @@ pub struct Context { /// Note that if you are sharding, in relevant terms, this is the shard /// which received the event being dispatched. pub shard: Arc<Mutex<Shard>>, - /// A tokio handle for spawning efficient tasks inside commands and events. - pub handle: Handle, } impl Context { /// Create a new Context to be passed to an event handler. pub(crate) fn new(shard: Arc<Mutex<Shard>>, - data: Arc<Mutex<ShareMap>>, - handle: Handle) + data: Arc<Mutex<ShareMap>>) -> Context { Context { data, shard, - handle, } } diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index c07f240..6c2cfc4 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -6,7 +6,6 @@ use typemap::ShareMap; use gateway::Shard; use model::event::Event; use model::{Channel, Message}; -use tokio_core::reactor::Handle; #[cfg(feature = "cache")] use chrono::{Timelike, Utc}; @@ -38,34 +37,30 @@ macro_rules! now { () => (Utc::now().time().second() * 1000) } -fn context(conn: &Arc<Mutex<Shard>>, data: &Arc<Mutex<ShareMap>>, handle: &Handle) -> Context { - Context::new(conn.clone(), data.clone(), handle.clone()) +fn context(conn: &Arc<Mutex<Shard>>, data: &Arc<Mutex<ShareMap>>) -> Context { + Context::new(conn.clone(), data.clone()) } #[cfg(feature = "framework")] pub fn dispatch<H: EventHandler + 'static>(event: Event, conn: &Arc<Mutex<Shard>>, - framework: &Arc< - sync::Mutex<Option<Box<Framework + Send>>>, ->, + framework: &Arc<sync::Mutex<Option<Box<Framework + Send>>>>, data: &Arc<Mutex<ShareMap>>, - event_handler: &Arc<H>, - tokio_handle: &Handle) { + event_handler: &Arc<H>) { match event { Event::MessageCreate(event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); dispatch_message( context.clone(), event.message.clone(), event_handler, - tokio_handle, ); if let Some(ref mut framework) = *framework.lock().unwrap() { - framework.dispatch(context, event.message, tokio_handle); + framework.dispatch(context, event.message); } }, - other => handle_event(other, conn, data, event_handler, tokio_handle), + other => handle_event(other, conn, data, event_handler), } } @@ -73,41 +68,34 @@ pub fn dispatch<H: EventHandler + 'static>(event: Event, pub fn dispatch<H: EventHandler + 'static>(event: Event, conn: &Arc<Mutex<Shard>>, data: &Arc<Mutex<ShareMap>>, - event_handler: &Arc<H>, - tokio_handle: &Handle) { + event_handler: &Arc<H>) { match event { Event::MessageCreate(event) => { - let context = context(conn, data, tokio_handle); - dispatch_message(context, event.message, event_handler, tokio_handle); + let context = context(conn, data); + dispatch_message(context, event.message, event_handler); }, - other => handle_event(other, conn, data, event_handler, tokio_handle), + other => handle_event(other, conn, data, event_handler), } } #[allow(unused_mut)] fn dispatch_message<H: EventHandler + 'static>(context: Context, mut message: Message, - event_handler: &Arc<H>, - tokio_handle: &Handle) { - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - #[cfg(feature = "model")] - { - message.transform_content(); - } + event_handler: &Arc<H>) { - h.on_message(context, message); + #[cfg(feature = "model")] + { + message.transform_content(); + } - Ok(()) - }); + event_handler.on_message(context, message); } #[allow(cyclomatic_complexity, unused_assignments, unused_mut)] fn handle_event<H: EventHandler + 'static>(event: Event, conn: &Arc<Mutex<Shard>>, data: &Arc<Mutex<ShareMap>>, - event_handler: &Arc<H>, - tokio_handle: &Handle) { + event_handler: &Arc<H>) { #[cfg(feature = "cache")] let mut last_guild_create_time = now!(); @@ -126,124 +114,79 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelCreate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); // This different channel_create dispatching is only due to the fact that // each time the bot receives a dm, this event is also fired. // So in short, only exists to reduce unnecessary clutter. - let h = event_handler.clone(); match event.channel { Channel::Private(channel) => { - tokio_handle.spawn_fn(move || { - h.on_private_channel_create(context, channel); - Ok(()) - }); + event_handler.on_private_channel_create(context, channel); }, Channel::Group(_) => {}, Channel::Guild(channel) => { - tokio_handle.spawn_fn(move || { - h.on_channel_create(context, channel); - Ok(()) - }); + event_handler.on_channel_create(context, channel); }, Channel::Category(channel) => { - tokio_handle.spawn_fn(move || { - h.on_category_create(context, channel); - Ok(()) - }); + event_handler.on_category_create(context, channel); }, } }, Event::ChannelDelete(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); match event.channel { Channel::Private(_) | Channel::Group(_) => {}, Channel::Guild(channel) => { - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_channel_delete(context, channel); - Ok(()) - }); + event_handler.on_channel_delete(context, channel); }, Channel::Category(channel) => { - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_category_delete(context, channel); - Ok(()) - }); + event_handler.on_category_delete(context, channel); }, } }, Event::ChannelPinsUpdate(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_channel_pins_update(context, event); - Ok(()) - }); + event_handler.on_channel_pins_update(context, event); }, Event::ChannelRecipientAdd(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_channel_recipient_addition(context, event.channel_id, event.user); - Ok(()) - }); + event_handler.on_channel_recipient_addition(context, event.channel_id, event.user); }, Event::ChannelRecipientRemove(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_channel_recipient_removal(context, event.channel_id, event.user); - Ok(()) - }); + event_handler.on_channel_recipient_removal(context, event.channel_id, event.user); }, Event::ChannelUpdate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ let before = CACHE.read().unwrap().channel(event.channel.id()); - tokio_handle.spawn_fn(move || { - h.on_channel_update(context, before, event.channel); - Ok(()) - }); + event_handler.on_channel_update(context, before, event.channel); } else { - tokio_handle.spawn_fn(move || { - h.on_channel_update(context, event.channel); - Ok(()) - }); + event_handler.on_channel_update(context, event.channel); }} }, Event::GuildBanAdd(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_ban_addition(context, event.guild_id, event.user); - Ok(()) - }); + event_handler.on_guild_ban_addition(context, event.guild_id, event.user); }, Event::GuildBanRemove(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_ban_removal(context, event.guild_id, event.user); - Ok(()) - }); + event_handler.on_guild_ban_removal(context, event.guild_id, event.user); }, Event::GuildCreate(mut event) => { #[cfg(feature = "cache")] @@ -262,9 +205,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, let cache = CACHE.read().unwrap(); if cache.unavailable_guilds.is_empty() { - let h = event_handler.clone(); - - let context = context(conn, data, tokio_handle); + let context = context(conn, data); let guild_amount = cache .guilds @@ -272,289 +213,179 @@ fn handle_event<H: EventHandler + 'static>(event: Event, .map(|(&id, _)| id) .collect::<Vec<GuildId>>(); - tokio_handle.spawn_fn(move || { - h.on_cached(context, guild_amount); - Ok(()) - }); + event_handler.on_cached(context, guild_amount); } } - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_guild_create(context, event.guild, _is_new); - Ok(()) - }); + event_handler.on_guild_create(context, event.guild, _is_new); } else { - tokio_handle.spawn_fn(move || { - h.on_guild_create(context, event.guild); - Ok(()) - }); + event_handler.on_guild_create(context, event.guild); }} }, Event::GuildDelete(mut event) => { let _full = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_guild_delete(context, event.guild, _full); - Ok(()) - }); + event_handler.on_guild_delete(context, event.guild, _full); } else { - tokio_handle.spawn_fn(move || { - h.on_guild_delete(context, event.guild); - Ok(()) - }); + event_handler.on_guild_delete(context, event.guild); }} }, Event::GuildEmojisUpdate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_emojis_update(context, event.guild_id, event.emojis); - Ok(()) - }); + event_handler.on_guild_emojis_update(context, event.guild_id, event.emojis); }, Event::GuildIntegrationsUpdate(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_integrations_update(context, event.guild_id); - Ok(()) - }); + event_handler.on_guild_integrations_update(context, event.guild_id); }, Event::GuildMemberAdd(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_member_addition(context, event.guild_id, event.member); - Ok(()) - }); + event_handler.on_guild_member_addition(context, event.guild_id, event.member); }, Event::GuildMemberRemove(mut event) => { let _member = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_guild_member_removal(context, event.guild_id, event.user, _member); - Ok(()) - }); + event_handler.on_guild_member_removal(context, event.guild_id, event.user, _member); } else { - tokio_handle.spawn_fn(move || { - h.on_guild_member_removal(context, event.guild_id, event.user); - Ok(()) - }); + event_handler.on_guild_member_removal(context, event.guild_id, event.user); }} }, Event::GuildMemberUpdate(mut event) => { let _before = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - 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() - .unwrap() - .member(event.guild_id, event.user.id) - .unwrap() - .clone(); - - tokio_handle.spawn_fn(move || { - h.on_guild_member_update(context, _before, after); - Ok(()) - }); - } else { - tokio_handle.spawn_fn(move || { - h.on_guild_member_update(context, event); - Ok(()) - }); - } - } + 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() + .unwrap() + .member(event.guild_id, event.user.id) + .unwrap() + .clone(); + + event_handler.on_guild_member_update(context, _before, after); + } else { + event_handler.on_guild_member_update(context, event); + }} }, Event::GuildMembersChunk(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_members_chunk(context, event.guild_id, event.members); - Ok(()) - }); + event_handler.on_guild_members_chunk(context, event.guild_id, event.members); }, Event::GuildRoleCreate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_role_create(context, event.guild_id, event.role); - Ok(()) - }); + event_handler.on_guild_role_create(context, event.guild_id, event.role); }, Event::GuildRoleDelete(mut event) => { let _role = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_guild_role_delete(context, event.guild_id, event.role_id, _role); - Ok(()) - }); + event_handler.on_guild_role_delete(context, event.guild_id, event.role_id, _role); } else { - tokio_handle.spawn_fn(move || { - h.on_guild_role_delete(context, event.guild_id, event.role_id); - Ok(()) - }); + event_handler.on_guild_role_delete(context, event.guild_id, event.role_id); }} }, Event::GuildRoleUpdate(mut event) => { let _before = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_guild_role_update(context, event.guild_id, _before, event.role); - Ok(()) - }); + event_handler.on_guild_role_update(context, event.guild_id, _before, event.role); } else { - tokio_handle.spawn_fn(move || { - h.on_guild_role_update(context, event.guild_id, event.role); - Ok(()) - }); + event_handler.on_guild_role_update(context, event.guild_id, event.role); }} }, Event::GuildUnavailable(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_guild_unavailable(context, event.guild_id); - Ok(()) - }); + event_handler.on_guild_unavailable(context, event.guild_id); }, Event::GuildUpdate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - feature_cache! { - { - let before = CACHE.read() - .unwrap() - .guilds - .get(&event.guild.id) - .cloned(); + feature_cache! {{ + let before = CACHE.read() + .unwrap() + .guilds + .get(&event.guild.id) + .cloned(); - tokio_handle.spawn_fn(move || { - h.on_guild_update(context, before, event.guild); - Ok(()) - }); - } else { - tokio_handle.spawn_fn(move || { - h.on_guild_update(context, event.guild); - Ok(()) - }); - } - } + event_handler.on_guild_update(context, before, event.guild); + } else { + event_handler.on_guild_update(context, event.guild); + }} }, // Already handled by the framework check macro Event::MessageCreate(_) => {}, Event::MessageDeleteBulk(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_message_delete_bulk(context, event.channel_id, event.ids); - Ok(()) - }); + event_handler.on_message_delete_bulk(context, event.channel_id, event.ids); }, Event::MessageDelete(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_message_delete(context, event.channel_id, event.message_id); - Ok(()) - }); + event_handler.on_message_delete(context, event.channel_id, event.message_id); }, Event::MessageUpdate(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_message_update(context, event); - Ok(()) - }); + event_handler.on_message_update(context, event); }, Event::PresencesReplace(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_presence_replace(context, event.presences); - Ok(()) - }); + event_handler.on_presence_replace(context, event.presences); }, Event::PresenceUpdate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_presence_update(context, event); - Ok(()) - }); + event_handler.on_presence_update(context, event); }, Event::ReactionAdd(mut event) => { - let h = event_handler.clone(); - let context = context(conn, data, tokio_handle); - tokio_handle.spawn_fn(move || { - h.on_reaction_add(context, event.reaction); - Ok(()) - }); + let context = context(conn, data); + + event_handler.on_reaction_add(context, event.reaction); }, Event::ReactionRemove(mut event) => { - let h = event_handler.clone(); - let context = context(conn, data, tokio_handle); - tokio_handle.spawn_fn(move || { - h.on_reaction_remove(context, event.reaction); - Ok(()) - }); + let context = context(conn, data); + + event_handler.on_reaction_remove(context, event.reaction); }, Event::ReactionRemoveAll(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_reaction_remove_all(context, event.channel_id, event.message_id); - Ok(()) - }); + event_handler.on_reaction_remove_all(context, event.channel_id, event.message_id); }, Event::Ready(mut event) => { update!(event); @@ -564,98 +395,59 @@ fn handle_event<H: EventHandler + 'static>(event: Event, last_guild_create_time = now!(); let _ = wait_for_guilds() - .map(|_| { - let context = context(conn, data, tokio_handle); + .map(move |_| { + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_ready(context, event.ready); - Ok(()) + event_handler.on_ready(context, event.ready); }); - }); } else { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_ready(context, event.ready); - Ok(()) - }); + event_handler.on_ready(context, event.ready); } } }, Event::Resumed(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_resume(context, event); - Ok(()) - }); + event_handler.on_resume(context, event); }, Event::TypingStart(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_typing_start(context, event); - Ok(()) - }); + event_handler.on_typing_start(context, event); }, Event::Unknown(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_unknown(context, event.kind, event.value); - Ok(()) - }); + event_handler.on_unknown(context, event.kind, event.value); }, Event::UserUpdate(mut event) => { let _before = update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); feature_cache! {{ - tokio_handle.spawn_fn(move || { - h.on_user_update(context, _before.unwrap(), event.current_user); - Ok(()) - }); + event_handler.on_user_update(context, _before.unwrap(), event.current_user); } else { - tokio_handle.spawn_fn(move || { - h.on_user_update(context, event.current_user); - Ok(()) - }); + event_handler.on_user_update(context, event.current_user); }} }, Event::VoiceServerUpdate(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_voice_server_update(context, event); - Ok(()) - }); + event_handler.on_voice_server_update(context, event); }, Event::VoiceStateUpdate(mut event) => { update!(event); - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_voice_state_update(context, event.guild_id, event.voice_state); - Ok(()) - }); + event_handler.on_voice_state_update(context, event.guild_id, event.voice_state); }, Event::WebhookUpdate(mut event) => { - let context = context(conn, data, tokio_handle); + let context = context(conn, data); - let h = event_handler.clone(); - tokio_handle.spawn_fn(move || { - h.on_webhook_update(context, event.guild_id, event.channel_id); - Ok(()) - }); + event_handler.on_webhook_update(context, event.guild_id, event.channel_id); }, } } diff --git a/src/client/mod.rs b/src/client/mod.rs index 5eec673..20c2bd6 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -39,8 +39,6 @@ use self::dispatch::dispatch; use std::sync::{self, Arc}; use std::sync::atomic::{AtomicBool, Ordering, ATOMIC_BOOL_INIT}; use parking_lot::Mutex; -use tokio_core::reactor::Core; -use futures; use std::collections::HashMap; use std::time::Duration; use std::{mem, thread}; @@ -798,13 +796,7 @@ impl<H: EventHandler + Send + Sync + 'static> Client<H> { }}; threads.push(thread::spawn(move || { - let mut core = Core::new().unwrap(); - - core.run(futures::future::lazy(move || { - monitor_shard(monitor_info); - - futures::future::ok::<(), ()>(()) - })).unwrap(); + monitor_shard(monitor_info); })); }, Err(why) => warn!("Error starting shard {:?}: {:?}", shard_info, why), @@ -954,8 +946,6 @@ fn monitor_shard<H: EventHandler + Send + Sync + 'static>(mut info: MonitorInfo< } fn handle_shard<H: EventHandler + Send + Sync + 'static>(info: &mut MonitorInfo<H>) { - let mut core = Core::new().unwrap(); - let handle = core.handle(); // This is currently all ducktape. Redo this. while HANDLE_STILL.load(Ordering::Relaxed) { @@ -1029,17 +1019,13 @@ fn handle_shard<H: EventHandler + Send + Sync + 'static>(info: &mut MonitorInfo< &info.shard, &info.framework, &info.data, - &info.event_handler, - &handle); + &info.event_handler); } else { dispatch(event, &info.shard, &info.data, - &info.event_handler, - &handle); + &info.event_handler); }} - - core.turn(None); } } diff --git a/src/framework/mod.rs b/src/framework/mod.rs index 678b5dc..0641ab6 100644 --- a/src/framework/mod.rs +++ b/src/framework/mod.rs @@ -62,7 +62,6 @@ pub use self::standard::StandardFramework; use client::Context; use model::Message; -use tokio_core::reactor::Handle; #[cfg(feature = "standard_framework")] use model::UserId; @@ -75,7 +74,7 @@ use model::UserId; /// Note that you may see some other methods in here as well, but they're meant to be internal only /// for the builtin framework. pub trait Framework { - fn dispatch(&mut self, Context, Message, &Handle); + fn dispatch(&mut self, Context, Message); #[cfg(feature = "standard_framework")] fn update_current_user(&mut self, UserId, bool) {} diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs index 913a1c5..17e2fdd 100644 --- a/src/framework/standard/mod.rs +++ b/src/framework/standard/mod.rs @@ -24,7 +24,6 @@ use client::Context; use super::Framework; use model::{ChannelId, GuildId, Message, UserId}; use model::permissions::Permissions; -use tokio_core::reactor::Handle; use internal::RwLockExt; #[cfg(feature = "cache")] @@ -831,7 +830,7 @@ impl StandardFramework { } impl Framework for StandardFramework { - fn dispatch(&mut self, mut context: Context, message: Message, tokio_handle: &Handle) { + fn dispatch(&mut self, mut context: Context, message: Message) { let res = command::positions(&mut context, &message, &self.configuration); let positions = match res { @@ -927,31 +926,27 @@ impl Framework for StandardFramework { return; } - tokio_handle.spawn_fn(move || { - if let Some(before) = before { - if !(before)(&mut context, &message, &built) { - return Ok(()); - } + if let Some(before) = before { + if !(before)(&mut context, &message, &built) { + return; } + } - let result = match command.exec { - CommandType::StringResponse(ref x) => { - let _ = message.channel_id.say(x); - - Ok(()) - }, - CommandType::Basic(ref x) => (x)(&mut context, &message, args), - CommandType::WithCommands(ref x) => { - (x)(&mut context, &message, groups, args) - }, - }; + let result = match command.exec { + CommandType::StringResponse(ref x) => { + let _ = message.channel_id.say(x); - if let Some(after) = after { - (after)(&mut context, &message, &built, result); - } + Ok(()) + }, + CommandType::Basic(ref x) => (x)(&mut context, &message, args), + CommandType::WithCommands(ref x) => { + (x)(&mut context, &message, groups, args) + }, + }; - Ok(()) - }); + if let Some(after) = after { + (after)(&mut context, &message, &built, result); + } return; } @@ -114,8 +114,6 @@ extern crate base64; extern crate byteorder; #[cfg(feature = "gateway")] extern crate flate2; -#[cfg(feature = "futures")] -extern crate futures; #[cfg(feature = "hyper")] extern crate hyper; #[cfg(feature = "hyper-native-tls")] @@ -130,8 +128,6 @@ extern crate opus; extern crate parking_lot; #[cfg(feature = "voice")] extern crate sodiumoxide; -#[cfg(feature = "tokio-core")] -extern crate tokio_core; #[cfg(feature = "client")] extern crate typemap; #[cfg(feature = "standard_framework")] |