private async void UpdateSafe(DiscordConnection connection, DiscordRichPresence presence) { try { await connection.UpdateAsync(presence, _overrideProcessId ?? _processId); } catch (Exception e) { Utils.Warn(e.ToString()); } }
public void Update(DiscordRichPresence presence) { _currentPresence = presence; if (_currentConnection != null) { UpdateSafe(_currentConnection, presence); } else { Utils.Log("Not yet connected"); } }
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 } })); }