PlayerPanelCommand.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.Linq;
  2. using Content.Server.EUI;
  3. using Content.Shared.Administration;
  4. using Robust.Server.Player;
  5. using Robust.Shared.Console;
  6. namespace Content.Server.Administration.Commands;
  7. [AdminCommand(AdminFlags.Admin)]
  8. public sealed class PlayerPanelCommand : LocalizedCommands
  9. {
  10. [Dependency] private readonly IPlayerLocator _locator = default!;
  11. [Dependency] private readonly EuiManager _euis = default!;
  12. [Dependency] private readonly IPlayerManager _players = default!;
  13. public override string Command => "playerpanel";
  14. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  15. {
  16. if (shell.Player is not { } admin)
  17. {
  18. shell.WriteError(Loc.GetString("cmd-playerpanel-server"));
  19. return;
  20. }
  21. if (args.Length != 1)
  22. {
  23. shell.WriteError(Loc.GetString("cmd-playerpanel-invalid-arguments"));
  24. return;
  25. }
  26. var queriedPlayer = await _locator.LookupIdByNameOrIdAsync(args[0]);
  27. if (queriedPlayer == null)
  28. {
  29. shell.WriteError(Loc.GetString("cmd-playerpanel-invalid-player"));
  30. return;
  31. }
  32. var ui = new PlayerPanelEui(queriedPlayer);
  33. _euis.OpenEui(ui, admin);
  34. ui.SetPlayerState();
  35. }
  36. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  37. {
  38. if (args.Length == 1)
  39. {
  40. var options = _players.Sessions.OrderBy(c => c.Name).Select(c => c.Name).ToArray();
  41. return CompletionResult.FromHintOptions(options, LocalizationManager.GetString("cmd-playerpanel-completion"));
  42. }
  43. return CompletionResult.Empty;
  44. }
  45. }