diff --git a/src/client.rs b/src/client.rs index b603e74..46652d3 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,4 +1,5 @@ use serde::{Serialize, de::DeserializeOwned}; +use serde_json::Value; use connection::Manager as ConnectionManager; use models::{ @@ -9,7 +10,12 @@ use models::{ commands::{SubscriptionArgs, Subscription}, }; #[cfg(feature = "rich_presence")] -use models::rich_presence::{SetActivityArgs, Activity}; +use models::rich_presence::{ + SetActivityArgs, + Activity, + SendActivityJoinInviteArgs, + CloseActivityRequestArgs, +}; use error::{Result, Error}; @@ -53,6 +59,19 @@ impl Client { self.execute(Command::SetActivity, SetActivityArgs::default(), None) } + // NOTE: Not sure what the actual response values of + // SEND_ACTIVITY_JOIN_INVITE and CLOSE_ACTIVITY_REQUEST are, + // they are not documented. + #[cfg(feature = "rich_presence")] + pub fn send_activity_join_invite(&mut self, user_id: u64) -> Result> { + self.execute(Command::SendActivityJoinInvite, SendActivityJoinInviteArgs::new(user_id), None) + } + + #[cfg(feature = "rich_presence")] + pub fn close_activity_request(&mut self, user_id: u64) -> Result> { + self.execute(Command::CloseActivityRequest, CloseActivityRequestArgs::new(user_id), None) + } + pub fn subscribe(&mut self, evt: Event, f: F) -> Result> where F: FnOnce(SubscriptionArgs) -> SubscriptionArgs { diff --git a/src/models/mod.rs b/src/models/mod.rs index 9e723ef..60eb1dc 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -15,6 +15,10 @@ pub enum Command { Unsubscribe, #[cfg(feature = "rich_presence")] SetActivity, + #[cfg(feature = "rich_presence")] + SendActivityJoinInvite, + #[cfg(feature = "rich_presence")] + CloseActivityRequest, } #[derive(Debug, PartialEq, Deserialize, Serialize)] @@ -43,6 +47,8 @@ pub mod prelude { #[cfg(feature = "rich_presence")] pub use super::rich_presence::{ SetActivityArgs, + SendActivityJoinInviteArgs, + CloseActivityRequestArgs, ActivityJoinEvent, ActivitySpectateEvent, ActivityJoinRequestEvent diff --git a/src/models/rich_presence.rs b/src/models/rich_presence.rs index 867871f..81d8f3d 100644 --- a/src/models/rich_presence.rs +++ b/src/models/rich_presence.rs @@ -28,6 +28,19 @@ impl Default for SetActivityArgs { } } +#[derive(Debug, PartialEq, Deserialize, Serialize)] +pub struct SendActivityJoinInviteArgs { + pub user_id: String, +} + +pub type CloseActivityRequestArgs = SendActivityJoinInviteArgs; + +impl SendActivityJoinInviteArgs { + pub fn new(user_id: u64) -> Self { + Self { user_id: user_id.to_string() } + } +} + builder!{ActivityJoinEvent secret: String, }