using System.Text.Json.Nodes; using Content.Shared.CCVar; using Robust.Server.ServerStatus; using Robust.Shared.Configuration; namespace Content.Server.ServerInfo; /// /// Adds additional data like info links to the server info endpoint /// public sealed class ServerInfoManager { private static readonly (CVarDef cVar, string icon, string name)[] Vars = { // @formatter:off (CCVars.InfoLinksDiscord, "discord", "info-link-discord"), (CCVars.InfoLinksForum, "forum", "info-link-forum"), (CCVars.InfoLinksGithub, "github", "info-link-github"), (CCVars.InfoLinksWebsite, "web", "info-link-website"), (CCVars.InfoLinksWiki, "wiki", "info-link-wiki") // @formatter:on }; [Dependency] private readonly IStatusHost _statusHost = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ILocalizationManager _loc = default!; public void Initialize() { _statusHost.OnInfoRequest += OnInfoRequest; } private void OnInfoRequest(JsonNode json) { foreach (var (cVar, icon, name) in Vars) { var url = _cfg.GetCVar(cVar); if (string.IsNullOrEmpty(url)) continue; StatusHostHelpers.AddLink(json, _loc.GetString(name), url, icon); } } }