AdminWhoCommand.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Text;
  2. using Content.Server.Administration.Managers;
  3. using Content.Server.Afk;
  4. using Content.Shared.Administration;
  5. using Robust.Shared.Console;
  6. using Robust.Shared.Utility;
  7. namespace Content.Server.Administration.Commands;
  8. [AdminCommand(AdminFlags.AdminWho)]
  9. public sealed class AdminWhoCommand : IConsoleCommand
  10. {
  11. public string Command => "adminwho";
  12. public string Description => "Returns a list of all admins on the server";
  13. public string Help => "Usage: adminwho";
  14. public void Execute(IConsoleShell shell, string argStr, string[] args)
  15. {
  16. var adminMgr = IoCManager.Resolve<IAdminManager>();
  17. var afk = IoCManager.Resolve<IAfkManager>();
  18. var seeStealth = true;
  19. // If null it (hopefully) means it is being called from the console.
  20. if (shell.Player != null)
  21. {
  22. var playerData = adminMgr.GetAdminData(shell.Player);
  23. seeStealth = playerData != null && playerData.CanStealth();
  24. }
  25. var sb = new StringBuilder();
  26. var first = true;
  27. foreach (var admin in adminMgr.ActiveAdmins)
  28. {
  29. var adminData = adminMgr.GetAdminData(admin)!;
  30. DebugTools.AssertNotNull(adminData);
  31. if (adminData.Stealth && !seeStealth)
  32. continue;
  33. if (!first)
  34. sb.Append('\n');
  35. first = false;
  36. sb.Append(admin.Name);
  37. if (adminData.Title is { } title)
  38. sb.Append($": [{title}]");
  39. if (adminData.Stealth)
  40. sb.Append(" (S)");
  41. if (shell.Player is { } player && adminMgr.HasAdminFlag(player, AdminFlags.Admin))
  42. {
  43. if (afk.IsAfk(admin))
  44. sb.Append(" [AFK]");
  45. }
  46. }
  47. shell.WriteLine(sb.ToString());
  48. }
  49. }