From 474062b83a25f7bc506ed5a24a61f19502298d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schr=C3=B6dinger?= <132720404+Schrodinger71@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:24:11 +0000 Subject: [PATCH] new command kick_hide (#718) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR Команда на тихий кик пользователя, аналог в покарашках только командой ## Требования - [x] Я прочитал(а) и следую [Руководство по созданию пулл реквестов](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). Я понимаю, что в противном случае мой ПР может быть закрыт по усмотрению мейнтейнера. - [x] Я добавил скриншоты/видео к этому пулл реквесту, демонстрирующие его изменения в игре, **или** этот пулл реквест не требует демонстрации в игре **Чейнджлог** ### NO CL. NO FUN --- .../Commands/KickHideCommand.cs | 56 +++++++++++++++++++ .../ru-RU/ADT/administration/commands.ftl | 8 +++ Resources/Locale/ru-RU/ADT/info/ban.ftl | 2 - 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 Content.Server/ADT/Administration/Commands/KickHideCommand.cs create mode 100644 Resources/Locale/ru-RU/ADT/administration/commands.ftl delete mode 100644 Resources/Locale/ru-RU/ADT/info/ban.ftl diff --git a/Content.Server/ADT/Administration/Commands/KickHideCommand.cs b/Content.Server/ADT/Administration/Commands/KickHideCommand.cs new file mode 100644 index 00000000000..637f3238733 --- /dev/null +++ b/Content.Server/ADT/Administration/Commands/KickHideCommand.cs @@ -0,0 +1,56 @@ +using System.Linq; +using Content.Shared.Administration; +using Robust.Server.Player; +using Robust.Shared.Console; +using Content.Server.GhostKick; +using Serilog; +using Robust.Shared.Player; + +namespace Content.Server.Administration.Commands; + +// Команда для тихого кика +// Автор: Discord: schrodinger71 +// Данная команда предназначена для глав проекта "Время Приключений" и позволяет тихо какать разрывая соединение пользователя. +[AdminCommand(AdminFlags.Permissions)] +public sealed class KickHideCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _locator = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly GhostKickManager _ghostKickManager = default!; + + public override string Command => "kick_hide"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError("cmd-kick_hide-error-arg"); + return; + } + + var target = args[0]; + var located = await _locator.LookupIdByNameOrIdAsync(target); + + if (located == null) + { + shell.WriteError(Loc.GetString("cmd-kick_hide-player")); + return; + } + + var targetSession = _playerManager.GetSessionById(located.UserId); + _ghostKickManager.DoDisconnect(targetSession.Channel, "Smitten."); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + var options = _playerManager.Sessions.Select(c => c.Name).OrderBy(c => c).ToArray(); + return CompletionResult.FromHintOptions( + options, + LocalizationManager.GetString("cmd-ban-hint")); + } + + return CompletionResult.Empty; + } +} diff --git a/Resources/Locale/ru-RU/ADT/administration/commands.ftl b/Resources/Locale/ru-RU/ADT/administration/commands.ftl new file mode 100644 index 00000000000..7aca0ff8c79 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/administration/commands.ftl @@ -0,0 +1,8 @@ +cmd-banmass-desc = Банит сразу нескольких игроков по никнейму или ID. +cmd-banmass-help = Использование: banmass "Причина" <время> name1 name2 name3.. Время - продолжительность в минутах, 0 для пермабана. + +cmd-kick_hide-desc = Тихо кикает пользователя разрывая соединение. +cmd-kick_hide-help = Использование: kick_hide +cmd-kick_hide-player = Сессия игрока не найдена. +cmd-kick_hide-error-arg = Не указан аргумент для команды. + diff --git a/Resources/Locale/ru-RU/ADT/info/ban.ftl b/Resources/Locale/ru-RU/ADT/info/ban.ftl deleted file mode 100644 index c37ed153424..00000000000 --- a/Resources/Locale/ru-RU/ADT/info/ban.ftl +++ /dev/null @@ -1,2 +0,0 @@ -cmd-banmass-desc = Банит сразу нескольких игроков по никнейму или ID. -cmd-banmass-help = Использование: banmass "Причина" <время> name1 name2 name3.. Время - продолжительность в минутах, 0 для пермабана.