ServerInfoManager.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System.Text.Json.Nodes;
  2. using Content.Shared.CCVar;
  3. using Robust.Server.ServerStatus;
  4. using Robust.Shared.Configuration;
  5. namespace Content.Server.ServerInfo;
  6. /// <summary>
  7. /// Adds additional data like info links to the server info endpoint
  8. /// </summary>
  9. public sealed class ServerInfoManager
  10. {
  11. private static readonly (CVarDef<string> cVar, string icon, string name)[] Vars =
  12. {
  13. // @formatter:off
  14. (CCVars.InfoLinksDiscord, "discord", "info-link-discord"),
  15. (CCVars.InfoLinksForum, "forum", "info-link-forum"),
  16. (CCVars.InfoLinksGithub, "github", "info-link-github"),
  17. (CCVars.InfoLinksWebsite, "web", "info-link-website"),
  18. (CCVars.InfoLinksWiki, "wiki", "info-link-wiki"),
  19. (CCVars.InfoLinksTelegram, "telegram", "info-link-telegram")
  20. // @formatter:on
  21. };
  22. [Dependency] private readonly IStatusHost _statusHost = default!;
  23. [Dependency] private readonly IConfigurationManager _cfg = default!;
  24. [Dependency] private readonly ILocalizationManager _loc = default!;
  25. public void Initialize()
  26. {
  27. _statusHost.OnInfoRequest += OnInfoRequest;
  28. }
  29. private void OnInfoRequest(JsonNode json)
  30. {
  31. foreach (var (cVar, icon, name) in Vars)
  32. {
  33. var url = _cfg.GetCVar(cVar);
  34. if (string.IsNullOrEmpty(url))
  35. continue;
  36. StatusHostHelpers.AddLink(json, _loc.GetString(name), url, icon);
  37. }
  38. }
  39. }