PardonCommand.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Text;
  2. using Content.Server.Database;
  3. using Content.Shared.Administration;
  4. using Robust.Shared.Console;
  5. namespace Content.Server.Administration.Commands
  6. {
  7. [AdminCommand(AdminFlags.Ban)]
  8. public sealed class PardonCommand : IConsoleCommand
  9. {
  10. public string Command => "pardon";
  11. public string Description => "Pardons somebody's ban";
  12. public string Help => $"Usage: {Command} <ban id>";
  13. public async void Execute(IConsoleShell shell, string argStr, string[] args)
  14. {
  15. var player = shell.Player;
  16. var dbMan = IoCManager.Resolve<IServerDbManager>();
  17. if (args.Length != 1)
  18. {
  19. shell.WriteLine(Help);
  20. return;
  21. }
  22. if (!int.TryParse(args[0], out var banId))
  23. {
  24. shell.WriteLine($"Unable to parse {args[0]} as a ban id integer.\n{Help}");
  25. return;
  26. }
  27. var ban = await dbMan.GetServerBanAsync(banId);
  28. if (ban == null)
  29. {
  30. shell.WriteLine($"No ban found with id {banId}");
  31. return;
  32. }
  33. if (ban.Unban != null)
  34. {
  35. var response = new StringBuilder("This ban has already been pardoned");
  36. if (ban.Unban.UnbanningAdmin != null)
  37. {
  38. response.Append($" by {ban.Unban.UnbanningAdmin.Value}");
  39. }
  40. response.Append($" in {ban.Unban.UnbanTime}.");
  41. shell.WriteLine(response.ToString());
  42. return;
  43. }
  44. await dbMan.AddServerUnbanAsync(new ServerUnbanDef(banId, player?.UserId, DateTimeOffset.Now));
  45. shell.WriteLine($"Pardoned ban with id {banId}");
  46. }
  47. }
  48. }