OSay.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Linq;
  2. using Content.Server.Administration.Logs;
  3. using Content.Server.Chat.Systems;
  4. using Content.Shared.Administration;
  5. using Content.Shared.Database;
  6. using Robust.Shared.Console;
  7. namespace Content.Server.Administration.Commands;
  8. [AdminCommand(AdminFlags.Admin)]
  9. public sealed class OSay : LocalizedCommands
  10. {
  11. [Dependency] private readonly IAdminLogManager _adminLogger = default!;
  12. [Dependency] private readonly IEntityManager _entityManager = default!;
  13. public override string Command => "osay";
  14. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  15. {
  16. if (args.Length == 1)
  17. {
  18. return CompletionResult.FromHint(Loc.GetString("osay-command-arg-uid"));
  19. }
  20. if (args.Length == 2)
  21. {
  22. return CompletionResult.FromHintOptions( Enum.GetNames(typeof(InGameICChatType)),
  23. Loc.GetString("osay-command-arg-type"));
  24. }
  25. if (args.Length > 2)
  26. {
  27. return CompletionResult.FromHint(Loc.GetString("osay-command-arg-message"));
  28. }
  29. return CompletionResult.Empty;
  30. }
  31. public override void Execute(IConsoleShell shell, string argStr, string[] args)
  32. {
  33. if (args.Length < 3)
  34. {
  35. shell.WriteLine(Loc.GetString("osay-command-error-args"));
  36. return;
  37. }
  38. var chatType = (InGameICChatType) Enum.Parse(typeof(InGameICChatType), args[1]);
  39. if (!NetEntity.TryParse(args[0], out var sourceNet) || !_entityManager.TryGetEntity(sourceNet, out var source) || !_entityManager.EntityExists(source))
  40. {
  41. shell.WriteLine(Loc.GetString("osay-command-error-euid", ("arg", args[0])));
  42. return;
  43. }
  44. var message = string.Join(" ", args.Skip(2)).Trim();
  45. if (string.IsNullOrEmpty(message))
  46. return;
  47. _entityManager.System<ChatSystem>().TrySendInGameICMessage(source.Value, message, chatType, false);
  48. _adminLogger.Add(LogType.Action, LogImpact.Low, $"{(shell.Player != null ? shell.Player.Name : "An administrator")} forced {_entityManager.ToPrettyString(source.Value)} to {args[1]}: {message}");
  49. }
  50. }