JobWhitelistCommands.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using System.Linq;
  2. using Content.Server.Database;
  3. using Content.Server.Players.JobWhitelist;
  4. using Content.Shared.Administration;
  5. using Content.Shared.Roles;
  6. using Robust.Server.Player;
  7. using Robust.Shared.Console;
  8. using Robust.Shared.Prototypes;
  9. namespace Content.Server.Administration.Commands;
  10. [AdminCommand(AdminFlags.Ban)]
  11. public sealed class JobWhitelistAddCommand : LocalizedCommands
  12. {
  13. [Dependency] private readonly IServerDbManager _db = default!;
  14. [Dependency] private readonly JobWhitelistManager _jobWhitelist = default!;
  15. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  16. [Dependency] private readonly IPlayerManager _players = default!;
  17. [Dependency] private readonly IPrototypeManager _prototypes = default!;
  18. public override string Command => "jobwhitelistadd";
  19. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  20. {
  21. if (args.Length != 2)
  22. {
  23. shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific",
  24. ("properAmount", 2),
  25. ("currentAmount", args.Length)));
  26. shell.WriteLine(Help);
  27. return;
  28. }
  29. var player = args[0].Trim();
  30. var job = new ProtoId<JobPrototype>(args[1].Trim());
  31. if (!_prototypes.TryIndex(job, out var jobPrototype))
  32. {
  33. shell.WriteError(Loc.GetString("cmd-jobwhitelist-job-does-not-exist", ("job", job.Id)));
  34. shell.WriteLine(Help);
  35. return;
  36. }
  37. var data = await _playerLocator.LookupIdByNameAsync(player);
  38. if (data != null)
  39. {
  40. var guid = data.UserId;
  41. var isWhitelisted = await _db.IsJobWhitelisted(guid, job);
  42. if (isWhitelisted)
  43. {
  44. shell.WriteLine(Loc.GetString("cmd-jobwhitelistadd-already-whitelisted",
  45. ("player", player),
  46. ("jobId", job.Id),
  47. ("jobName", jobPrototype.LocalizedName)));
  48. return;
  49. }
  50. _jobWhitelist.AddWhitelist(guid, job);
  51. shell.WriteLine(Loc.GetString("cmd-jobwhitelistadd-added",
  52. ("player", player),
  53. ("jobId", job.Id),
  54. ("jobName", jobPrototype.LocalizedName)));
  55. return;
  56. }
  57. shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player)));
  58. }
  59. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  60. {
  61. if (args.Length == 1)
  62. {
  63. return CompletionResult.FromHintOptions(
  64. _players.Sessions.Select(s => s.Name),
  65. Loc.GetString("cmd-jobwhitelist-hint-player"));
  66. }
  67. if (args.Length == 2)
  68. {
  69. return CompletionResult.FromHintOptions(
  70. _prototypes.EnumeratePrototypes<JobPrototype>().Select(p => p.ID),
  71. Loc.GetString("cmd-jobwhitelist-hint-job"));
  72. }
  73. return CompletionResult.Empty;
  74. }
  75. }
  76. [AdminCommand(AdminFlags.Ban)]
  77. public sealed class GetJobWhitelistCommand : LocalizedCommands
  78. {
  79. [Dependency] private readonly IServerDbManager _db = default!;
  80. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  81. [Dependency] private readonly IPlayerManager _players = default!;
  82. public override string Command => "jobwhitelistget";
  83. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  84. {
  85. if (args.Length == 0)
  86. {
  87. shell.WriteError("This command needs at least one argument.");
  88. shell.WriteLine(Help);
  89. return;
  90. }
  91. var player = string.Join(' ', args).Trim();
  92. var data = await _playerLocator.LookupIdByNameAsync(player);
  93. if (data != null)
  94. {
  95. var guid = data.UserId;
  96. var whitelists = await _db.GetJobWhitelists(guid);
  97. if (whitelists.Count == 0)
  98. {
  99. shell.WriteLine(Loc.GetString("cmd-jobwhitelistget-whitelisted-none", ("player", player)));
  100. return;
  101. }
  102. shell.WriteLine(Loc.GetString("cmd-jobwhitelistget-whitelisted-for",
  103. ("player", player),
  104. ("jobs", string.Join(", ", whitelists))));
  105. return;
  106. }
  107. shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player)));
  108. }
  109. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  110. {
  111. if (args.Length == 1)
  112. {
  113. return CompletionResult.FromHintOptions(
  114. _players.Sessions.Select(s => s.Name),
  115. Loc.GetString("cmd-jobwhitelist-hint-player"));
  116. }
  117. return CompletionResult.Empty;
  118. }
  119. }
  120. [AdminCommand(AdminFlags.Ban)]
  121. public sealed class RemoveJobWhitelistCommand : LocalizedCommands
  122. {
  123. [Dependency] private readonly IServerDbManager _db = default!;
  124. [Dependency] private readonly JobWhitelistManager _jobWhitelist = default!;
  125. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  126. [Dependency] private readonly IPlayerManager _players = default!;
  127. [Dependency] private readonly IPrototypeManager _prototypes = default!;
  128. public override string Command => "jobwhitelistremove";
  129. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  130. {
  131. if (args.Length != 2)
  132. {
  133. shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific",
  134. ("properAmount", 2),
  135. ("currentAmount", args.Length)));
  136. shell.WriteLine(Help);
  137. return;
  138. }
  139. var player = args[0].Trim();
  140. var job = new ProtoId<JobPrototype>(args[1].Trim());
  141. if (!_prototypes.TryIndex(job, out var jobPrototype))
  142. {
  143. shell.WriteError(Loc.GetString("cmd-jobwhitelist-job-does-not-exist", ("job", job)));
  144. shell.WriteLine(Help);
  145. return;
  146. }
  147. var data = await _playerLocator.LookupIdByNameAsync(player);
  148. if (data != null)
  149. {
  150. var guid = data.UserId;
  151. var isWhitelisted = await _db.IsJobWhitelisted(guid, job);
  152. if (!isWhitelisted)
  153. {
  154. shell.WriteError(Loc.GetString("cmd-jobwhitelistremove-was-not-whitelisted",
  155. ("player", player),
  156. ("jobId", job.Id),
  157. ("jobName", jobPrototype.LocalizedName)));
  158. return;
  159. }
  160. _jobWhitelist.RemoveWhitelist(guid, job);
  161. shell.WriteLine(Loc.GetString("cmd-jobwhitelistremove-removed",
  162. ("player", player),
  163. ("jobId", job.Id),
  164. ("jobName", jobPrototype.LocalizedName)));
  165. return;
  166. }
  167. shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player)));
  168. }
  169. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  170. {
  171. if (args.Length == 1)
  172. {
  173. return CompletionResult.FromHintOptions(
  174. _players.Sessions.Select(s => s.Name),
  175. Loc.GetString("cmd-jobwhitelist-hint-player"));
  176. }
  177. if (args.Length == 2)
  178. {
  179. return CompletionResult.FromHintOptions(
  180. _prototypes.EnumeratePrototypes<JobPrototype>().Select(p => p.ID),
  181. Loc.GetString("cmd-jobwhitelist-hint-job"));
  182. }
  183. return CompletionResult.Empty;
  184. }
  185. }