/// <summary> /// Sets the Rich Presence. /// </summary> /// <param name="presence">The Rich Presence to set on the current Discord user.</param> public void SetPresence(RichPresence presence) { if (IsDisposed) { throw new ObjectDisposedException("Discord IPC Client"); } if (connection == null) { throw new ObjectDisposedException("Connection", "Cannot initialize as the connection has been deinitialized"); } if (!IsInitialized) { Logger.Warning("The client is not yet initialized, storing the presence as a state instead."); } //SEnd the event if (!presence) { //Clear the presence connection.EnqueueCommand(new PresenceCommand() { PID = ProcessID, Presence = null }); } else { //Send valid presence //Validate the presence with our settings if (presence.HasSecrets() && !HasRegisteredUriScheme) { throw new BadPresenceException("Cannot send a presence with secrets as this object has not registered a URI scheme. Please enable the uri scheme registration in the DiscordRpcClient constructor."); } if (presence.HasParty() && presence.Party.Max < presence.Party.Size) { throw new BadPresenceException("Presence maximum party size cannot be smaller than the current size."); } if (presence.HasSecrets() && !presence.HasParty()) { Logger.Warning("The presence has set the secrets but no buttons will show as there is no party available."); } //Send the presence connection.EnqueueCommand(new PresenceCommand() { PID = ProcessID, Presence = presence.Clone() }); } //Update our local store lock (_sync) { CurrentPresence = presence; } }
/// <summary> /// Sets the Rich Presence. /// </summary> /// <param name="presence">The Rich Presence to set on the current Discord user.</param> public void SetPresence(RichPresence presence) { DoStandardPrecheck(false); //Send the event if (!presence) { //Clear the presence if (!SkipIdenticalPresence || CurrentPresence != null) { connection.EnqueueCommand(new PresenceCommand() { PID = this.ProcessID, Presence = null }); } } else { //Send valid presence //Validate the presence with our settings if (presence.HasSecrets() && !HasRegisteredUriScheme) { throw new BadPresenceException("Cannot send a presence with secrets as this object has not registered a URI scheme. Please enable the uri scheme registration in the DiscordRpcClient constructor."); } if (presence.HasParty() && presence.Party.Max < presence.Party.Size) { throw new BadPresenceException("Presence maximum party size cannot be smaller than the current size."); } if (presence.HasSecrets() && !presence.HasParty()) { Logger.Warning("The presence has set the secrets but no buttons will show as there is no party available."); } //Send the presence, but only if we are not skipping if (!SkipIdenticalPresence || !presence.Matches(CurrentPresence)) { connection.EnqueueCommand(new PresenceCommand() { PID = this.ProcessID, Presence = presence.Clone() }); } } //Update our local store lock (_sync) { CurrentPresence = presence != null?presence.Clone() : null; } }
/// <summary> /// Creats a new Presence object, copying values of the Rich Presence /// </summary> /// <param name="presence">The rich presence, often received by discord.</param> public DiscordPresence(DiscordRPC.RichPresence presence) { this.state = presence.State; this.details = presence.Details; this.party = presence.HasParty() ? new DiscordParty(presence.Party) : new DiscordParty(); this.secrets = presence.HasSecrets() ? new DiscordSecrets(presence.Secrets) : new DiscordSecrets(); if (presence.HasAssets()) { this.smallAsset = new DiscordAsset() { image = presence.Assets.SmallImageKey, tooltip = presence.Assets.SmallImageText }; this.largeAsset = new DiscordAsset() { image = presence.Assets.LargeImageKey, tooltip = presence.Assets.LargeImageText }; } else { this.smallAsset = new DiscordAsset(); this.largeAsset = new DiscordAsset(); } if (presence.HasTimestamps()) { this.startTime = presence.Timestamps.Start.HasValue ? new DiscordTimestamp(presence.Timestamps.Start.Value) : new DiscordTimestamp(0); this.endTime = presence.Timestamps.End.HasValue ? new DiscordTimestamp(presence.Timestamps.End.Value) : new DiscordTimestamp(0); } }
/// <summary> /// Creats a new Presence object, copying values of the Rich Presence /// </summary> /// <param name="presence">The rich presence, often received by discord.</param> public DiscordPresence(DiscordRPC.RichPresence presence) { if (presence != null) { this.state = presence.State; this.details = presence.Details; this.party = presence.HasParty() ? new DiscordParty(presence.Party) : new DiscordParty(); this.secrets = presence.HasSecrets() ? new DiscordSecrets(presence.Secrets) : new DiscordSecrets(); if (presence.HasAssets()) { this.smallAsset = new DiscordAsset() { image = presence.Assets.SmallImageKey, tooltip = presence.Assets.SmallImageText, snowflake = presence.Assets.SmallImageID.GetValueOrDefault(0) }; this.largeAsset = new DiscordAsset() { image = presence.Assets.LargeImageKey, tooltip = presence.Assets.LargeImageText, snowflake = presence.Assets.LargeImageID.GetValueOrDefault(0) }; } else { this.smallAsset = new DiscordAsset(); this.largeAsset = new DiscordAsset(); } if (presence.HasTimestamps()) { //This could probably be made simpler this.startTime = presence.Timestamps.Start.HasValue ? new DiscordTimestamp((long)presence.Timestamps.StartUnixMilliseconds.Value) : DiscordTimestamp.Invalid; this.endTime = presence.Timestamps.End.HasValue ? new DiscordTimestamp((long)presence.Timestamps.EndUnixMilliseconds.Value) : DiscordTimestamp.Invalid; } } else { this.state = ""; this.details = ""; this.party = new DiscordParty(); this.secrets = new DiscordSecrets(); this.smallAsset = new DiscordAsset(); this.largeAsset = new DiscordAsset(); this.startTime = DiscordTimestamp.Invalid; this.endTime = DiscordTimestamp.Invalid; } }
/// <summary> /// Sets the Rich Presences /// </summary> /// <param name="presence">The rich presence to send to discord</param> public void SetPresence(RichPresence presence) { if (Disposed) { throw new ObjectDisposedException("Discord IPC Client"); } if (connection == null) { throw new ObjectDisposedException("Connection", "Cannot initialize as the connection has been deinitialized"); } //Update our internal store of the presence _presence = presence; if (!_presence) { //Clear the presence connection.EnqueueCommand(new PresenceCommand() { PID = this.ProcessID, Presence = null }); } else { //Send valid presence //Validate the presence with our settings if (presence.HasSecrets()) { if (!HasRegisteredUriScheme) { throw new BadPresenceException("Cannot send a presence with secrets as this object has not registered a URI scheme!"); } if (!string.IsNullOrEmpty(presence.Secrets.JoinSecret) && !presence.HasParty()) { throw new BadPresenceException("Presences that include Join Secrets must also include a party!"); } } if (presence.HasParty() && presence.Party.Max < presence.Party.Size) { throw new BadPresenceException("Presence maximum party size cannot be smaller than the current size."); } //Send the presence connection.EnqueueCommand(new PresenceCommand() { PID = this.ProcessID, Presence = presence.Clone() }); } }
public void SetPresence(RichPresence presence) { if (this.Disposed) { throw new ObjectDisposedException("Discord IPC Client"); } if (this.connection == null) { throw new ObjectDisposedException("Connection", "Cannot initialize as the connection has been deinitialized"); } this._presence = presence; if (!(bool)this._presence) { this.connection.EnqueueCommand((ICommand) new PresenceCommand() { PID = this.ProcessID, Presence = (RichPresence)null }); } else { if (presence.HasSecrets() && !this.HasRegisteredUriScheme) { throw new BadPresenceException("Cannot send a presence with secrets as this object has not registered a URI scheme!"); } if (presence.HasParty() && presence.Party.Max < presence.Party.Size) { throw new BadPresenceException("Presence maximum party size cannot be smaller than the current size."); } this.connection.EnqueueCommand((ICommand) new PresenceCommand() { PID = this.ProcessID, Presence = presence.Clone() }); } }