BanExemptionCommands.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Linq;
  2. using System.Text;
  3. using Content.Server.Database;
  4. using Content.Shared.Administration;
  5. using Robust.Shared.Console;
  6. namespace Content.Server.Administration.Commands;
  7. [AdminCommand(AdminFlags.Ban)]
  8. public sealed class BanExemptionUpdateCommand : LocalizedCommands
  9. {
  10. [Dependency] private readonly IServerDbManager _dbManager = default!;
  11. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  12. public override string Command => "ban_exemption_update";
  13. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  14. {
  15. if (args.Length < 2)
  16. {
  17. shell.WriteError(LocalizationManager.GetString("cmd-ban_exemption_update-nargs"));
  18. return;
  19. }
  20. var flags = ServerBanExemptFlags.None;
  21. for (var i = 1; i < args.Length; i++)
  22. {
  23. var arg = args[i];
  24. if (!Enum.TryParse<ServerBanExemptFlags>(arg, ignoreCase: true, out var flag))
  25. {
  26. shell.WriteError(LocalizationManager.GetString("cmd-ban_exemption_update-invalid-flag", ("flag", arg)));
  27. return;
  28. }
  29. flags |= flag;
  30. }
  31. var player = args[0];
  32. var playerData = await _playerLocator.LookupIdByNameOrIdAsync(player);
  33. if (playerData == null)
  34. {
  35. shell.WriteError(LocalizationManager.GetString("cmd-ban_exemption_update-locate", ("player", player)));
  36. return;
  37. }
  38. await _dbManager.UpdateBanExemption(playerData.UserId, flags);
  39. shell.WriteLine(LocalizationManager.GetString(
  40. "cmd-ban_exemption_update-success",
  41. ("player", player),
  42. ("uid", playerData.UserId)));
  43. }
  44. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  45. {
  46. if (args.Length == 1)
  47. return CompletionResult.FromHint(LocalizationManager.GetString("cmd-ban_exemption_get-arg-player"));
  48. return CompletionResult.FromHintOptions(
  49. Enum.GetNames<ServerBanExemptFlags>(),
  50. LocalizationManager.GetString("cmd-ban_exemption_update-arg-flag"));
  51. }
  52. }
  53. [AdminCommand(AdminFlags.Ban)]
  54. public sealed class BanExemptionGetCommand : LocalizedCommands
  55. {
  56. [Dependency] private readonly IServerDbManager _dbManager = default!;
  57. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  58. public override string Command => "ban_exemption_get";
  59. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  60. {
  61. if (args.Length != 1)
  62. {
  63. shell.WriteError(LocalizationManager.GetString("cmd-ban_exemption_get-nargs"));
  64. return;
  65. }
  66. var player = args[0];
  67. var playerData = await _playerLocator.LookupIdByNameOrIdAsync(player);
  68. if (playerData == null)
  69. {
  70. shell.WriteError(LocalizationManager.GetString("cmd-ban_exemption_update-locate", ("player", player)));
  71. return;
  72. }
  73. var flags = await _dbManager.GetBanExemption(playerData.UserId);
  74. if (flags == ServerBanExemptFlags.None)
  75. {
  76. shell.WriteLine(LocalizationManager.GetString("cmd-ban_exemption_get-none"));
  77. return;
  78. }
  79. var joined = new StringBuilder();
  80. var first = true;
  81. for (var i = 0; i < sizeof(ServerBanExemptFlags) * 8; i++)
  82. {
  83. var mask = (ServerBanExemptFlags) (1 << i);
  84. if ((mask & flags) == 0)
  85. continue;
  86. if (!first)
  87. joined.Append(", ");
  88. first = false;
  89. joined.Append(mask.ToString());
  90. }
  91. shell.WriteLine(LocalizationManager.GetString(
  92. "cmd-ban_exemption_get-show",
  93. ("flags", joined.ToString())));
  94. }
  95. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  96. {
  97. if (args.Length == 1)
  98. return CompletionResult.FromHint(LocalizationManager.GetString("cmd-ban_exemption_get-arg-player"));
  99. return CompletionResult.Empty;
  100. }
  101. }