1
0

RoleBanListCommand.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Linq;
  2. using System.Text;
  3. using Content.Server.Administration.BanList;
  4. using Content.Server.EUI;
  5. using Content.Server.Database;
  6. using Content.Shared.Administration;
  7. using Robust.Server.Player;
  8. using Robust.Shared.Console;
  9. namespace Content.Server.Administration.Commands;
  10. [AdminCommand(AdminFlags.Ban)]
  11. public sealed class RoleBanListCommand : IConsoleCommand
  12. {
  13. [Dependency] private readonly IServerDbManager _dbManager = default!;
  14. [Dependency] private readonly EuiManager _eui = default!;
  15. [Dependency] private readonly IPlayerLocator _locator = default!;
  16. public string Command => "rolebanlist";
  17. public string Description => Loc.GetString("cmd-rolebanlist-desc");
  18. public string Help => Loc.GetString("cmd-rolebanlist-help");
  19. public async void Execute(IConsoleShell shell, string argStr, string[] args)
  20. {
  21. if (args.Length != 1 && args.Length != 2)
  22. {
  23. shell.WriteLine($"Invalid amount of args. {Help}");
  24. return;
  25. }
  26. var includeUnbanned = true;
  27. if (args.Length == 2 && !bool.TryParse(args[1], out includeUnbanned))
  28. {
  29. shell.WriteLine($"Argument two ({args[1]}) is not a boolean.");
  30. return;
  31. }
  32. var data = await _locator.LookupIdByNameOrIdAsync(args[0]);
  33. if (data == null)
  34. {
  35. shell.WriteError("Unable to find a player with that name or id.");
  36. return;
  37. }
  38. if (shell.Player is not { } player)
  39. {
  40. var bans = await _dbManager.GetServerRoleBansAsync(data.LastAddress, data.UserId, data.LastLegacyHWId, data.LastModernHWIds, includeUnbanned);
  41. if (bans.Count == 0)
  42. {
  43. shell.WriteLine("That user has no bans in their record.");
  44. return;
  45. }
  46. foreach (var ban in bans)
  47. {
  48. var msg = $"ID: {ban.Id}: Role: {ban.Role} Reason: {ban.Reason}";
  49. shell.WriteLine(msg);
  50. }
  51. return;
  52. }
  53. var ui = new BanListEui();
  54. _eui.OpenEui(ui, player);
  55. await ui.ChangeBanListPlayer(data.UserId);
  56. }
  57. public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  58. {
  59. return args.Length switch
  60. {
  61. 1 => CompletionResult.FromHintOptions(CompletionHelper.SessionNames(),
  62. Loc.GetString("cmd-rolebanlist-hint-1")),
  63. 2 => CompletionResult.FromHintOptions(CompletionHelper.Booleans,
  64. Loc.GetString("cmd-rolebanlist-hint-2")),
  65. _ => CompletionResult.Empty
  66. };
  67. }
  68. }