diff options
| author | Mishio595 <[email protected]> | 2018-08-01 15:38:12 -0600 |
|---|---|---|
| committer | Mishio595 <[email protected]> | 2018-08-01 15:38:12 -0600 |
| commit | c5fb7b4b331ef5a66179539b065913078e55b668 (patch) | |
| tree | 99bc28270eaad9acf3da3871e72ba67dac5b87eb /src/client | |
| parent | Merge branch 'asref_messageid_for_message' (diff) | |
| parent | Don't delay Ready with cache enabled (diff) | |
| download | serenity-c5fb7b4b331ef5a66179539b065913078e55b668.tar.xz serenity-c5fb7b4b331ef5a66179539b065913078e55b668.zip | |
Merge branch 'upstream'
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/bridge/gateway/shard_messenger.rs | 16 | ||||
| -rw-r--r-- | src/client/context.rs | 21 | ||||
| -rw-r--r-- | src/client/dispatch.rs | 57 |
3 files changed, 33 insertions, 61 deletions
diff --git a/src/client/bridge/gateway/shard_messenger.rs b/src/client/bridge/gateway/shard_messenger.rs index 2331d4a..6d625b6 100644 --- a/src/client/bridge/gateway/shard_messenger.rs +++ b/src/client/bridge/gateway/shard_messenger.rs @@ -157,7 +157,11 @@ impl ShardMessenger { /// # try_main().unwrap(); /// # } /// ``` - pub fn set_game(&self, game: Option<Game>) { + pub fn set_game<T: Into<Game>>(&self, game: Option<T>) { + self._set_game(game.map(Into::into)) + } + + fn _set_game(&self, game: Option<Game>) { let _ = self.send(ShardRunnerMessage::SetGame(game)); } @@ -195,7 +199,15 @@ impl ShardMessenger { /// # try_main().unwrap(); /// # } /// ``` - pub fn set_presence(&self, game: Option<Game>, mut status: OnlineStatus) { + pub fn set_presence<T: Into<Game>>( + &self, + game: Option<T>, + status: OnlineStatus, + ) { + self._set_presence(game.map(Into::into), status) + } + + fn _set_presence(&self, game: Option<Game>, mut status: OnlineStatus) { if status == OnlineStatus::Offline { status = OnlineStatus::Invisible; } diff --git a/src/client/context.rs b/src/client/context.rs index d581ffb..61a1925 100644 --- a/src/client/context.rs +++ b/src/client/context.rs @@ -87,6 +87,7 @@ impl Context { /// client.start().unwrap(); /// ``` #[cfg(feature = "builder")] + #[deprecated(since = "0.5.6", note = "Use the http module instead.")] pub fn edit_profile<F: FnOnce(EditProfile) -> EditProfile>(&self, f: F) -> Result<CurrentUser> { let mut map = VecMap::with_capacity(2); @@ -273,7 +274,7 @@ impl Context { /// [`set_presence`]: #method.set_presence #[inline] pub fn reset_presence(&self) { - self.shard.set_presence(None, OnlineStatus::Online); + self.shard.set_presence(None::<Game>, OnlineStatus::Online); } /// Sets the current game, defaulting to an online status of [`Online`]. @@ -316,7 +317,11 @@ impl Context { /// /// [`Online`]: ../model/user/enum.OnlineStatus.html#variant.Online #[inline] - pub fn set_game(&self, game: Game) { + pub fn set_game<T: Into<Game>>(&self, game: T) { + self._set_game(game.into()) + } + + fn _set_game(&self, game: Game) { self.shard.set_presence(Some(game), OnlineStatus::Online); } @@ -356,14 +361,10 @@ impl Context { /// [`Playing`]: ../model/gateway/enum.GameType.html#variant.Playing /// [`reset_presence`]: #method.reset_presence /// [`set_presence`]: #method.set_presence - pub fn set_game_name(&self, game_name: &str) { - let game = Game { - kind: GameType::Playing, - name: game_name.to_string(), - url: None, - }; - - self.shard.set_presence(Some(game), OnlineStatus::Online); + #[deprecated(since = "0.5.5", note = "Use Context::set_game")] + #[inline] + pub fn set_game_name<T: Into<String>>(&self, game_name: T) { + self.set_game(game_name.into()) } /// Sets the current user's presence, providing all fields to be passed. diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index dd5b4fe..663a283 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -15,14 +15,10 @@ use std::sync::mpsc::Sender; use threadpool::ThreadPool; use typemap::ShareMap; -#[cfg(feature = "cache")] -use chrono::{Timelike, Utc}; #[cfg(feature = "framework")] use framework::Framework; #[cfg(feature = "cache")] use model::id::GuildId; -#[cfg(feature = "cache")] -use std::{thread, time}; #[cfg(feature = "cache")] use super::CACHE; @@ -38,11 +34,6 @@ macro_rules! update { }; } -#[cfg(feature = "cache")] -macro_rules! now { - () => (Utc::now().time().second() * 1000) -} - fn context( data: &Arc<Mutex<ShareMap>>, runner_tx: &Sender<InterMessage>, @@ -149,20 +140,6 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>( threadpool: &ThreadPool, shard_id: u64, ) { - #[cfg(feature = "cache")] - let mut last_guild_create_time = now!(); - - #[cfg(feature = "cache")] - let wait_for_guilds = move || -> ::Result<()> { - let unavailable_guilds = CACHE.read().unavailable_guilds.len(); - - while unavailable_guilds != 0 && (now!() < last_guild_create_time + 2000) { - thread::sleep(time::Duration::from_millis(500)); - } - - Ok(()) - }; - match event { DispatchEvent::Client(ClientEvent::ShardStageUpdate(event)) => { let context = context(data, runner_tx, shard_id); @@ -177,9 +154,9 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>( let context = context(data, runner_tx, shard_id); - // 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. + // Discord sends both a MessageCreate and a ChannelCreate upon a new message in a private channel. + // This could potentionally be annoying to handle when otherwise wanting to normally take care of a new channel. + // So therefore, private channels are dispatched to their own handler code. match event.channel { Channel::Private(channel) => { let event_handler = Arc::clone(event_handler); @@ -309,8 +286,6 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>( #[cfg(feature = "cache")] { - last_guild_create_time = now!(); - let cache = CACHE.read(); if cache.unavailable_guilds.is_empty() { @@ -578,28 +553,12 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>( DispatchEvent::Model(Event::Ready(mut event)) => { update!(event); - let event_handler = Arc::clone(event_handler); - - feature_cache! {{ - last_guild_create_time = now!(); - - let _ = wait_for_guilds() - .map(move |_| { - let context = context(data, runner_tx, shard_id); - let event_handler = Arc::clone(&event_handler); - - threadpool.execute(move || { - event_handler.ready(context, event.ready); - }); - }); - } else { - let context = context(data, runner_tx, shard_id); - let event_handler = Arc::clone(&event_handler); + let context = context(data, runner_tx, shard_id); + let event_handler = Arc::clone(&event_handler); - threadpool.execute(move || { - event_handler.ready(context, event.ready); - }); - }} + threadpool.execute(move || { + event_handler.ready(context, event.ready); + }); }, DispatchEvent::Model(Event::Resumed(mut event)) => { let context = context(data, runner_tx, shard_id); |