/// <summary>
        /// Merges the passed presence with this one, taking into account the image key to image id annoyance.
        /// </summary>
        /// <param name="presence"></param>
        /// <returns>self</returns>
        internal RichPresence Merge(BaseRichPresence presence)
        {
            this._state     = presence.State;
            this._details   = presence.Details;
            this.Party      = presence.Party;
            this.Timestamps = presence.Timestamps;
            this.Secrets    = presence.Secrets;

            //If they have assets, we should merge them
            if (presence.HasAssets())
            {
                //Make sure we actually have assets too
                if (!this.HasAssets())
                {
                    //We dont, so we will just use theirs
                    this.Assets = presence.Assets;
                }
                else
                {
                    //We do, so we better merge them!
                    this.Assets.Merge(presence.Assets);
                }
            }
            else
            {
                //They dont have assets, so we will just set ours to null
                this.Assets = null;
            }

            return(this);
        }
    /// <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.BaseRichPresence 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;
        }
    }