1
0

GrantConnectBypassCommand.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Content.Server.Administration;
  2. using Content.Shared.Administration;
  3. using Robust.Shared.Console;
  4. namespace Content.Server.Connection;
  5. [AdminCommand(AdminFlags.Moderator)]
  6. public sealed class GrantConnectBypassCommand : LocalizedCommands
  7. {
  8. private static readonly TimeSpan DefaultDuration = TimeSpan.FromHours(1);
  9. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  10. [Dependency] private readonly IConnectionManager _connectionManager = default!;
  11. public override string Command => "grant_connect_bypass";
  12. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  13. {
  14. if (args.Length is not (1 or 2))
  15. {
  16. shell.WriteError(Loc.GetString("cmd-grant_connect_bypass-invalid-args"));
  17. return;
  18. }
  19. var argPlayer = args[0];
  20. var info = await _playerLocator.LookupIdByNameOrIdAsync(argPlayer);
  21. if (info == null)
  22. {
  23. shell.WriteError(Loc.GetString("cmd-grant_connect_bypass-unknown-user", ("user", argPlayer)));
  24. return;
  25. }
  26. var duration = DefaultDuration;
  27. if (args.Length > 1)
  28. {
  29. var argDuration = args[2];
  30. if (!uint.TryParse(argDuration, out var minutes))
  31. {
  32. shell.WriteLine(Loc.GetString("cmd-grant_connect_bypass-invalid-duration", ("duration", argDuration)));
  33. return;
  34. }
  35. duration = TimeSpan.FromMinutes(minutes);
  36. }
  37. _connectionManager.AddTemporaryConnectBypass(info.UserId, duration);
  38. shell.WriteLine(Loc.GetString("cmd-grant_connect_bypass-success", ("user", argPlayer)));
  39. }
  40. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  41. {
  42. if (args.Length == 1)
  43. return CompletionResult.FromHint(Loc.GetString("cmd-grant_connect_bypass-arg-user"));
  44. if (args.Length == 2)
  45. return CompletionResult.FromHint(Loc.GetString("cmd-grant_connect_bypass-arg-duration"));
  46. return CompletionResult.Empty;
  47. }
  48. }