Exemplo n.º 1
0
 private async void UpdateSafe(DiscordConnection connection, DiscordRichPresence presence)
 {
     try {
         await connection.UpdateAsync(presence, _overrideProcessId ?? _processId);
     } catch (Exception e) {
         Utils.Warn(e.ToString());
     }
 }
Exemplo n.º 2
0
 public void Update(DiscordRichPresence presence)
 {
     _currentPresence = presence;
     if (_currentConnection != null)
     {
         UpdateSafe(_currentConnection, presence);
     }
     else
     {
         Utils.Log("Not yet connected");
     }
 }
Exemplo n.º 3
0
        public Task UpdateAsync(DiscordRichPresence presence, int pid)
        {
            var details  = presence.Details.Limit(128, "Unknown details");
            var activity = new JObject {
                ["state"]    = presence.State.Limit(128, "Unknown state"),
                ["details"]  = details,
                ["instance"] = presence.Instance
            };

            if (presence.Start.HasValue || presence.End.HasValue)
            {
                activity["timestamps"] = new JObject();
                if (presence.Start.HasValue)
                {
                    activity["timestamps"]["start"] = presence.Start.Value.ToTimestamp();
                }
                if (presence.End.HasValue)
                {
                    activity["timestamps"]["end"] = presence.End.Value.ToTimestamp();
                }
            }

            if (presence.LargeImage != null || presence.SmallImage != null)
            {
                activity["assets"] = new JObject();

                if (presence.LargeImage != null)
                {
                    activity["assets"]["large_image"] = presence.LargeImage.Key.Limit(32, DiscordImage.OptionDefaultImage);
                    activity["assets"]["large_text"]  = presence.LargeImage.Text.Limit(128, details);
                }

                if (presence.SmallImage != null)
                {
                    activity["assets"]["small_image"] = presence.SmallImage.Key.Limit(32, DiscordImage.OptionDefaultImage);
                    activity["assets"]["small_text"]  = presence.SmallImage.Text.Limit(128, details);
                }
            }

            activity["party"] = new JObject {
                ["id"] = (presence.Party?.Id).Limit(128, $"_party{pid}"),
            };

            if (presence.Party != null)
            {
                var size = new JArray {
                    Math.Max(presence.Party.Size, 1)
                };
                if (presence.Party.Capacity > 0)
                {
                    size.Add(presence.Party.Capacity);
                }

                if (size.Count == 2)
                {
                    activity["party"]["size"] = size;
                }
            }

            if (presence.Party?.MatchSecret != null || presence.Party?.JoinSecret != null || presence.Party?.SpectateSecret != null)
            {
                activity["secrets"] = new JObject();
                if (presence.Party.MatchSecret != null)
                {
                    activity["secrets"]["match"] = presence.Party.MatchSecret.Limit(128, "_matchSecret");
                }
                if (presence.Party.JoinSecret != null)
                {
                    activity["secrets"]["join"] = presence.Party.JoinSecret.Limit(128, "_joinSecret");
                }
                if (presence.Party.SpectateSecret != null)
                {
                    activity["secrets"]["spectate"] = presence.Party.SpectateSecret.Limit(128, "_spectateSecret");
                }
            }

            var footprint = activity.ToString(Formatting.None);

            if (footprint == _currentActivity)
            {
                return(Task.Delay(0));
            }
            _currentActivity = footprint;

            return(Execute("SET_ACTIVITY", new JObject {
                ["args"] = new JObject {
                    ["pid"] = pid,
                    ["activity"] = activity
                }
            }));
        }