From 01e3c331ed188e2b95bafa2fa0fc63d5c0c03905 Mon Sep 17 00:00:00 2001 From: Zeyla Hellyer Date: Tue, 31 Jul 2018 17:04:55 -0700 Subject: Deprecate Context::edit_profile This method won't exist in v0.6.x. --- src/client/context.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'src/client') diff --git a/src/client/context.rs b/src/client/context.rs index d581ffb..c72818c 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 EditProfile>(&self, f: F) -> Result { let mut map = VecMap::with_capacity(2); -- cgit v1.2.3 From e1332a54af46eff6051097ff4989c8d0fde4ca37 Mon Sep 17 00:00:00 2001 From: Zeyla Hellyer Date: Wed, 1 Aug 2018 08:35:04 -0700 Subject: Add From impls for Game, generify Game params Add more `impl From for Game` implementations, and make `Into` trait bounds for all function parameters accepting a Game. --- src/client/bridge/gateway/shard_messenger.rs | 16 ++++++++++++++-- src/client/context.rs | 20 ++++++++++---------- 2 files changed, 24 insertions(+), 12 deletions(-) (limited to 'src/client') 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) { + pub fn set_game>(&self, game: Option) { + self._set_game(game.map(Into::into)) + } + + fn _set_game(&self, game: Option) { let _ = self.send(ShardRunnerMessage::SetGame(game)); } @@ -195,7 +199,15 @@ impl ShardMessenger { /// # try_main().unwrap(); /// # } /// ``` - pub fn set_presence(&self, game: Option, mut status: OnlineStatus) { + pub fn set_presence>( + &self, + game: Option, + status: OnlineStatus, + ) { + self._set_presence(game.map(Into::into), status) + } + + fn _set_presence(&self, game: Option, mut status: OnlineStatus) { if status == OnlineStatus::Offline { status = OnlineStatus::Invisible; } diff --git a/src/client/context.rs b/src/client/context.rs index c72818c..61a1925 100644 --- a/src/client/context.rs +++ b/src/client/context.rs @@ -274,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::, OnlineStatus::Online); } /// Sets the current game, defaulting to an online status of [`Online`]. @@ -317,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>(&self, game: T) { + self._set_game(game.into()) + } + + fn _set_game(&self, game: Game) { self.shard.set_presence(Some(game), OnlineStatus::Online); } @@ -357,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>(&self, game_name: T) { + self.set_game(game_name.into()) } /// Sets the current user's presence, providing all fields to be passed. -- cgit v1.2.3 From 97d9378d338607b8f6f566242f8563956649fa30 Mon Sep 17 00:00:00 2001 From: acdenisSK Date: Wed, 1 Aug 2018 21:30:56 +0200 Subject: De-cringe a comment --- src/client/dispatch.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/client') diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 04bd8c9..410ca76 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -177,9 +177,9 @@ fn handle_event( 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); -- cgit v1.2.3 From 12d53214f39211a4c02026d9389b9aa2bfa8a5ee Mon Sep 17 00:00:00 2001 From: Zeyla Hellyer Date: Wed, 1 Aug 2018 12:50:45 -0700 Subject: Don't delay Ready with cache enabled When the cache is enabled, don't delay the Ready until all guilds have been received. This never really worked in the first place and duplicates the "cached" logic that fires when all guilds have been received. This presumably fixes the "silent death" bug, as this appears to stall the thread on certain conditions. --- src/client/dispatch.rs | 51 +++++--------------------------------------------- 1 file changed, 5 insertions(+), 46 deletions(-) (limited to 'src/client') diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 410ca76..c0d6e99 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>, runner_tx: &Sender, @@ -149,20 +140,6 @@ fn handle_event( 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); @@ -309,8 +286,6 @@ fn handle_event( #[cfg(feature = "cache")] { - last_guild_create_time = now!(); - let cache = CACHE.read(); if cache.unavailable_guilds.is_empty() { @@ -566,28 +541,12 @@ fn handle_event( 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); -- cgit v1.2.3