aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorMishio595 <[email protected]>2018-08-01 15:38:12 -0600
committerMishio595 <[email protected]>2018-08-01 15:38:12 -0600
commitc5fb7b4b331ef5a66179539b065913078e55b668 (patch)
tree99bc28270eaad9acf3da3871e72ba67dac5b87eb /src/client
parentMerge branch 'asref_messageid_for_message' (diff)
parentDon't delay Ready with cache enabled (diff)
downloadserenity-c5fb7b4b331ef5a66179539b065913078e55b668.tar.xz
serenity-c5fb7b4b331ef5a66179539b065913078e55b668.zip
Merge branch 'upstream'
Diffstat (limited to 'src/client')
-rw-r--r--src/client/bridge/gateway/shard_messenger.rs16
-rw-r--r--src/client/context.rs21
-rw-r--r--src/client/dispatch.rs57
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);