예제 #1
0
        /// <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; }
        }
예제 #2
0
        /// <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()
                });
            }
        }
예제 #3
0
        /// <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;
            }
        }
예제 #4
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)
    {
        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;
        }
    }
예제 #6
0
 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()
         });
     }
 }