1
0

BanListCommand.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Linq;
  2. using Content.Server.Administration.BanList;
  3. using Content.Server.Database;
  4. using Content.Server.EUI;
  5. using Content.Shared.Administration;
  6. using Robust.Server.Player;
  7. using Robust.Shared.Console;
  8. namespace Content.Server.Administration.Commands;
  9. /// <summary>
  10. /// Lists someones active Ban Ids or opens a window to see them.
  11. /// </summary>
  12. [AdminCommand(AdminFlags.Ban)]
  13. public sealed class BanListCommand : LocalizedCommands
  14. {
  15. [Dependency] private readonly IServerDbManager _dbManager = default!;
  16. [Dependency] private readonly EuiManager _eui = default!;
  17. [Dependency] private readonly IPlayerLocator _locator = default!;
  18. public override string Command => "banlist";
  19. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  20. {
  21. if (args.Length != 1)
  22. {
  23. shell.WriteError(Help);
  24. return;
  25. }
  26. var data = await _locator.LookupIdByNameOrIdAsync(args[0]);
  27. if (data == null)
  28. {
  29. shell.WriteError(Loc.GetString("cmd-ban-player"));
  30. return;
  31. }
  32. if (shell.Player is not { } player)
  33. {
  34. var bans = await _dbManager.GetServerBansAsync(data.LastAddress, data.UserId, data.LastLegacyHWId, data.LastModernHWIds, false);
  35. if (bans.Count == 0)
  36. {
  37. shell.WriteLine(Loc.GetString("cmd-banlist-empty", ("user", data.Username)));
  38. return;
  39. }
  40. foreach (var ban in bans)
  41. {
  42. var msg = $"{ban.Id}: {ban.Reason}";
  43. shell.WriteLine(msg);
  44. }
  45. return;
  46. }
  47. var ui = new BanListEui();
  48. _eui.OpenEui(ui, player);
  49. await ui.ChangeBanListPlayer(data.UserId);
  50. }
  51. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  52. {
  53. if (args.Length != 1)
  54. return CompletionResult.Empty;
  55. var playerMgr = IoCManager.Resolve<IPlayerManager>();
  56. var options = playerMgr.Sessions.Select(c => c.Name).OrderBy(c => c).ToArray();
  57. return CompletionResult.FromHintOptions(options, Loc.GetString("cmd-banlist-hint"));
  58. }
  59. }