-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add new command AdminToggle #785
add new command AdminToggle #785
Conversation
CodeRabbit Commands (Invoked using PR comments)
|
@coderabbitai configuration |
CodeRabbit configurationlanguage: ru-RU
tone_instructions: ''
early_access: false
enable_free_tier: true
reviews:
profile: chill
request_changes_workflow: false
high_level_summary: true
high_level_summary_placeholder: '@coderabbitai summary'
auto_title_placeholder: '@coderabbitai'
review_status: true
commit_status: true
poem: true
collapse_walkthrough: false
sequence_diagrams: true
changed_files_summary: true
labeling_instructions: []
path_filters:
- '!**/*.png'
- '!**/*.ogg'
path_instructions:
- path: '**/*.cs'
instructions: |-
Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
//start-ADT tweak
//end-ADT tweak
так как изменения в официальном коде
abort_on_close: true
auto_review:
enabled: false
auto_incremental_review: false
ignore_title_keywords: []
labels: []
drafts: false
base_branches: []
tools:
shellcheck:
enabled: true
ruff:
enabled: true
markdownlint:
enabled: true
github-checks:
enabled: true
timeout_ms: 90000
languagetool:
enabled: true
enabled_only: false
level: default
enabled_rules: []
disabled_rules: []
enabled_categories: []
disabled_categories: []
biome:
enabled: true
hadolint:
enabled: true
swiftlint:
enabled: true
phpstan:
enabled: true
level: default
golangci-lint:
enabled: true
yamllint:
enabled: true
gitleaks:
enabled: true
checkov:
enabled: true
detekt:
enabled: true
eslint:
enabled: true
rubocop:
enabled: true
buf:
enabled: true
regal:
enabled: true
actionlint:
enabled: true
pmd:
enabled: true
cppcheck:
enabled: true
semgrep:
enabled: true
circleci:
enabled: true
ast-grep:
packages: []
rule_dirs: []
util_dirs: []
essential_rules: true
chat:
auto_reply: true
knowledge_base:
opt_out: false
learnings:
scope: auto
issues:
scope: auto
jira:
project_keys: []
linear:
team_keys: []
pull_requests:
scope: auto
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Outside diff range and nitpick comments (2)
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
24-27
: Рекомендуется уточнить сообщения о действияхПредлагаю сделать сообщения более информативными для пользователя.
Примените следующие изменения:
-cmd-admin_toggle-readmin = Вернуть права админу. -cmd-admin_toggle-deadmin = Ввести в деадмин. +cmd-admin_toggle-readmin = Административные права восстановлены. +cmd-admin_toggle-deadmin = Административные права временно сняты.Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
11-16
: Добавьте XML документацию для классаКласс реализован корректно, но рекомендуется добавить документацию для улучшения читаемости кода.
Предлагаю добавить:
+/// <summary> +/// Команда для управления административными правами игроков. +/// Позволяет временно снимать и восстанавливать права администратора. +/// </summary> [AdminCommand(AdminFlags.Permissions)] public sealed class AdminToggleCommand : LocalizedCommands
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
Content.Client/UserInterface/Systems/Info/InfoUIController.cs
(1 hunks)Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs
(1 hunks)Resources/Locale/ru-RU/ADT/administration/commands.ftl
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Content.Client/UserInterface/Systems/Info/InfoUIController.cs
🧰 Additional context used
📓 Path-based instructions (1)
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
//start-ADT tweak
//end-ADT tweak
так как изменения в официальном коде
🔇 Additional comments (2)
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
21-23
: Описание команды соответствует стандартам!
Описание команды и инструкция по использованию корректно описывают функциональность и синтаксис.
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
1-7
:
Добавьте комментарии ADT tweak
Согласно руководству по написанию кода, все изменения вне папок /ADT/ должны быть обрамлены комментариями ADT tweak.
Добавьте следующие комментарии:
+//start-ADT tweak
using Content.Server.Administration.Managers;
using Content.Shared.Administration;
using Robust.Shared.Console;
using Content.Server.Administration;
using Robust.Server.Player;
using System.Linq;
+//end-ADT tweak
Likely invalid or redundant comment.
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughВ данном запросе на изменение кода было внесено несколько изменений. В классе Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (2)
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
24-24
: Уточните подсказку для параметраТекущая подсказка
Значение
слишком общая и не дает пользователю понимания о допустимых значениях параметра.Предлагаю заменить на более информативную подсказку:
-cmd-admin_toggle-hint-duration = Значение +cmd-admin_toggle-hint-duration = Укажите readmin для возврата прав или deadmin для их снятияContent.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
1-74
: Добавьте логирование административных действийРекомендуется добавить логирование для отслеживания изменений административного статуса:
- Кто инициировал изменение
- Кому изменили статус
- Какое действие было выполнено (deadmin/readmin)
- Временная метка
Это важно для:
- Аудита безопасности
- Отслеживания потенциальных злоупотреблений
- Разрешения споров
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
Content.Client/UserInterface/Systems/Info/InfoUIController.cs
(1 hunks)Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs
(1 hunks)Resources/Locale/ru-RU/ADT/administration/commands.ftl
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Content.Client/UserInterface/Systems/Info/InfoUIController.cs
🧰 Additional context used
📓 Path-based instructions (1)
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
//start-ADT tweak
//end-ADT tweak
так как изменения в официальном коде
🔇 Additional comments (5)
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
21-28
: Базовая реализация локализации выглядит хорошо
Основные строки локализации реализованы корректно, но все еще отсутствуют дополнительные сообщения об ошибках.
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (4)
18-52
: Исправьте ранее выявленные проблемы в методе Execute
Предыдущие замечания по реализации метода Execute все еще актуальны. Пожалуйста, обратите внимание на комментарии выше и внесите необходимые исправления.
54-73
: Исправьте ранее выявленные проблемы в методе GetCompletion
Предыдущие замечания по реализации метода GetCompletion все еще актуальны. Пожалуйста, обратите внимание на комментарии выше и внесите необходимые исправления.
1-13
:
Добавьте маркеры ADT для измененного кода
Согласно правилам кодирования, весь код вне папок /ADT/ должен быть обрамлен специальными комментариями.
Добавьте следующие маркеры в начало и конец файла:
+//start-ADT tweak
using Content.Server.Administration.Managers;
using Content.Shared.Administration;
...
public sealed class AdminToggleCommand : LocalizedCommands
{
...
}
+//end-ADT tweak
Likely invalid or redundant comment.
14-16
: Проверьте регистрацию зависимостей
Зависимости помечены корректно, но необходимо убедиться, что они зарегистрированы в IoC контейнере.
✅ Verification successful
Зависимости зарегистрированы корректно
Проверка показала, что:
IPlayerLocator
зарегистрирован вServerContentIoC.cs
IPlayerManager
является частью базового движка и доступен через стандартную регистрацию зависимостей
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем регистрацию IPlayerLocator и IPlayerManager
rg -A 5 "IPlayerLocator|IPlayerManager" | grep -i "register"
Length of output: 677
Script:
#!/bin/bash
# Проверяем регистрацию IPlayerManager
rg "IPlayerManager" Content.Server/IoC/ServerContentIoC.cs -A 5
Length of output: 63
Script:
#!/bin/bash
# Поиск регистрации IPlayerManager в других файлах
rg -g "*.cs" "IPlayerManager.*Register" -A 5
# Поиск реализации IPlayerManager
ast-grep --pattern 'class $_ : IPlayerManager'
Length of output: 95
Script:
#!/bin/bash
# Поиск файлов, связанных с PlayerManager
fd -e cs "PlayerManager"
# Поиск использования IPlayerManager в базовом движке
rg "IPlayerManager" -g "*.cs" -l
Length of output: 12510
…evelop_ADT into new_admin_comand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🧹 Outside diff range and nitpick comments (7)
Content.Server/ADT/Administration/Commands/KickHideCommand.cs (2)
Line range hint
13-16
: Проверьте комментарии в кодеКомментарии содержат опечатку и неформальную лексику. Рекомендуется исправить текст комментария на более профессиональный.
-// Данная команда предназначена для глав проекта "Время Приключений" и позволяет тихо какать разрывая соединение пользователя. +// Данная команда предназначена для администраторов проекта "Время Приключений" и позволяет тихо отключать пользователей.
Based on the analysis of the codebase, I can now provide a final response regarding the security concern about the
kick_hide
command:Команда требует дополнительной проверки прав администратора
Текущая реализация проверяет только флаг
AdminFlags.Permissions
, но этого недостаточно для безопасного использования команды. Необходимо добавить проверку, что цель кика не имеет флагаAdminFlags.Permissions
, чтобы предотвратить использование команды против администраторов с высоким уровнем доступа.Рекомендуемые изменения:
if (!_playerManager.TryGetSessionByUsername(target, out var player)) { shell.WriteError($"Unable to find player: '{target}'."); return; } + if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) + { + shell.WriteError(Loc.GetString("cmd-kick_hide-admin-error")); + return; + } _ghostKickManager.DoDisconnect(player.Channel, "Smitten.");🔗 Analysis chain
Line range hint
1-58
: Проверка безопасности командыНеобходимо убедиться, что команда не может быть использована против администраторов с высоким уровнем доступа.
Рекомендуется добавить проверку уровня доступа цели перед выполнением кика:
if (!_playerManager.TryGetSessionByUsername(target, out var player)) { shell.WriteError(Loc.GetString("cmd-kick_hide-player-not-found", ("username", target))); return; } + if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) + { + shell.WriteError(Loc.GetString("cmd-kick_hide-admin-error")); + return; + } _ghostKickManager.DoDisconnect(player.Channel, "Smitten.");Запустим проверку использования команды:
Let me check the content of the localization file and look for any additional security measures in related admin commands:
Let me check one more thing about admin commands and permissions:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск всех мест использования команды kick_hide rg -l "kick_hide" # Проверка наличия тестов fd -e cs -e yaml "test.*kick.*hide"Length of output: 172
Script:
#!/bin/bash # Check localization file content cat Resources/Locale/ru-RU/ADT/administration/commands.ftl # Look for similar admin commands implementation ast-grep --pattern 'class $_ : LocalizedCommands { $$$ Execute($$$) { $$$ _adminManager$$$ $$$ } }' # Check GhostKickManager implementation rg -A 5 "class GhostKickManager"Length of output: 2587
Script:
#!/bin/bash # Check for similar kick/ban commands implementation rg -A 10 "\[AdminCommand\(AdminFlags" # Look for admin flags definition rg "AdminFlags\." -A 3Length of output: 338127
Content.Server/Info/ShowRulesCommand.cs (2)
19-19
: Добавьте комментарии ADT-Tweak для новой зависимостиВ соответствии с требованиями к кодированию, добавление новой зависимости должно быть обрамлено комментариями ADT-Tweak.
+ // ADT-Tweak-Start [Dependency] private readonly IAdminManager _adminManager = default!; + // ADT-Tweak-End
Обнаружено несоответствие в использовании флагов AdminFlags
В файле ShowRulesCommand.cs используются два разных флага:
- Атрибут команды использует
[AdminCommand(AdminFlags.Admin)]
- Проверка в коде использует
AdminFlags.Permissions
Рекомендуется использовать
AdminFlags.Permissions
в атрибуте команды, так как:
- Этот флаг используется в других командах администрирования, связанных с управлением правами и разрешениями
- Команды
OpenPermissionsCommand
,PlayTimeCommands
,AdminToggleCommand
и другие подобные используют именно этот флаг- Проверка в коде уже использует
AdminFlags.Permissions
🔗 Analysis chain
Line range hint
13-13
: Проверьте соответствие флага AdminFlags.AdminТекущий атрибут
[AdminCommand(AdminFlags.Admin)]
использует флаг Admin, но в проверке используется флаг Permissions. Рекомендуется использовать одинаковые флаги для консистентности.
Let me generate additional verification to check the usage of AdminFlags.Admin:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других использований AdminFlags.Permissions rg "AdminFlags\.Permissions" -A 2 -B 2Length of output: 4187
Script:
#!/bin/bash # Поиск использований AdminFlags.Admin rg "AdminFlags\.Admin" -A 2 -B 2Length of output: 33541
Content.Server/GhostKick/GhostKickManager.cs (2)
78-89
: Исправить грамматическую ошибку в сообщении об ошибкеВ сообщении об ошибке есть грамматическая ошибка. Также рекомендуется использовать более формальный стиль для логирования.
Предлагаемые изменения:
- shell.WriteError($"You not permission for kick '{playerName}'."); + shell.WriteError($"You don't have permission to kick '{playerName}'."); - $"[АДМИНАБУЗ] {shell.Player?.Name} used the command ghostkick on '{playerName}'." + $"{shell.Player?.Name} выполнил команду ghostkick для пользователя '{playerName}'."
78-89
: Проверить использование ADT-Tweak маркеровМаркеры ADT-Tweak корректно добавлены, но рекомендуется добавить более подробный комментарий о внесенных изменениях.
Предлагаемые изменения:
- // ADT-Tweak-start + // ADT-Tweak-start: Добавлена проверка прав администратора и логированиеContent.Server/Administration/Managers/BanManager.cs (1)
Line range hint
284-284
: Удалить избыточный returnОператор
return
в конце методаvoid
является избыточным и может быть удален без изменения функциональности.- return; //ADT Tweak
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (9)
Content.Server/ADT/Administration/Commands/KickHideCommand.cs
(3 hunks)Content.Server/Administration/Managers/AdminManager.cs
(1 hunks)Content.Server/Administration/Managers/BanManager.cs
(3 hunks)Content.Server/Ghost/GhostSystem.cs
(1 hunks)Content.Server/GhostKick/GhostKickManager.cs
(3 hunks)Content.Server/Info/ShowRulesCommand.cs
(3 hunks)Content.Server/Tips/TipsSystem.cs
(3 hunks)Content.Shared/ADT/Ghost/HideGhostWarpComponent.cs
(1 hunks)Content.Shared/Follower/FollowerSystem.cs
(2 hunks)
✅ Files skipped from review due to trivial changes (3)
- Content.Server/Administration/Managers/AdminManager.cs
- Content.Server/Ghost/GhostSystem.cs
- Content.Shared/ADT/Ghost/HideGhostWarpComponent.cs
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Server/Tips/TipsSystem.cs
🧰 Additional context used
📓 Path-based instructions (5)
Content.Server/ADT/Administration/Commands/KickHideCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Administration/Managers/BanManager.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/GhostKick/GhostKickManager.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Info/ShowRulesCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Shared/Follower/FollowerSystem.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
🔇 Additional comments (5)
Content.Server/ADT/Administration/Commands/KickHideCommand.cs (1)
7-7
: Добавление IAdminManager для управления правами
Добавление зависимости IAdminManager
улучшает контроль над правами администраторов, что соответствует требованиям безопасности.
Also applies to: 20-20
Content.Server/GhostKick/GhostKickManager.cs (2)
8-10
: LGTM: Корректное добавление необходимых зависимостей
Импорты для IAdminManager
и IAdminLogManager
логично дополняют функционал.
53-54
: LGTM: Правильное внедрение зависимостей
Зависимости корректно внедрены с использованием атрибута [Dependency]
.
Content.Shared/Follower/FollowerSystem.cs (1)
20-21
: Добавление необходимой зависимости
Добавление пространства имен для работы с HideGhostWarpComponent
соответствует требованиям PR.
Content.Server/Administration/Managers/BanManager.cs (1)
43-43
: Корректное добавление зависимости
Зависимость IAdminManager
добавлена согласно существующему паттерну внедрения зависимостей в классе.
// ADT-Tweak-Start | ||
if (targetUsername != null && _playerManager.TryGetSessionByUsername(targetUsername, out var player)) | ||
{ | ||
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | ||
return; | ||
} | ||
// ADT-Tweak-End |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Необходимо добавить логирование при попытке бана администратора
Текущая реализация тихо прерывает выполнение при попытке забанить пользователя с флагом Permissions
. Рекомендуется добавить логирование такой попытки для целей аудита.
Предлагаемые изменения:
// ADT-Tweak-Start
if (targetUsername != null && _playerManager.TryGetSessionByUsername(targetUsername, out var player))
{
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions))
+ {
+ _sawmill.Warning($"Attempted to ban user {targetUsername} with Permissions flag by {banningAdmin}");
return;
+ }
}
// ADT-Tweak-End
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// ADT-Tweak-Start | |
if (targetUsername != null && _playerManager.TryGetSessionByUsername(targetUsername, out var player)) | |
{ | |
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | |
return; | |
} | |
// ADT-Tweak-End | |
// ADT-Tweak-Start | |
if (targetUsername != null && _playerManager.TryGetSessionByUsername(targetUsername, out var player)) | |
{ | |
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | |
{ | |
_sawmill.Warning($"Attempted to ban user {targetUsername} with Permissions flag by {banningAdmin}"); | |
return; | |
} | |
} | |
// ADT-Tweak-End |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
🧹 Outside diff range and nitpick comments (6)
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
25-26
: Добавить сообщения об успешном выполненииРекомендуется добавить сообщения, подтверждающие успешное выполнение команды.
cmd-admin_toggle-readmin = Вернуть права админу. cmd-admin_toggle-deadmin = Ввести в деадмин. +cmd-admin_toggle-success-readmin = Права администратора успешно возвращены для {$user}. +cmd-admin_toggle-success-deadmin = Пользователь {$user} успешно переведен в деадмин.Content.Server/ADT/Administration/Commands/KickHideCommand.cs (1)
Line range hint
1-63
: Добавьте маркеры ADT-TweakСогласно правилам кодирования, все изменения вне папок /ADT/ должны быть обрамлены комментариями ADT-Tweak.
Добавьте следующие комментарии в начало и конец измененных участков кода:
+ // ADT-Tweak-Start [Dependency] private readonly IAdminManager _adminManager = default!; + // ADT-Tweak-End ... + // ADT-Tweak-Start var players = IoCManager.Resolve<IPlayerManager>(); if (!players.TryGetSessionByUsername(target, out var player)) { shell.WriteError($"Unable to find player: '{target}'."); return; } _ghostKickManager.DoDisconnect(player.Channel, "Smitten."); + // ADT-Tweak-EndContent.Server/Administration/Managers/BanManager.cs (1)
140-144
: Улучшить проверку прав администратораТекущая реализация может быть улучшена для большей надежности и читаемости.
Предлагаемые изменения:
if (targetUsername != null && _playerManager.TryGetSessionByUsername(targetUsername, out var player)) { - if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) + if (player != null && _adminManager.HasAdminFlag(player, AdminFlags.Permissions)) + { return; + } }Content.Server/Ghost/GhostSystem.cs (3)
39-39
: Изменение пространства имен для Ghost компонентовПеренос компонентов из
Server
вShared
пространство имен улучшает архитектуру, делая компоненты доступными как для сервера, так и для клиента.
Line range hint
300-303
: Добавлена защита от преследования призракамиРеализована проверка на наличие
HideGhostWarpComponent
, которая предотвращает телепортацию призраков к защищенным сущностям. Комментарий в коде указывает на намерение ограничить возможности призраков.Предлагаю улучшить читаемость кода:
-if (HasComp<HideGhostWarpComponent>(target)) return; // ADT TWEAK: НАХЕР ГОСТОВ ЗАЕБАЛИ, - // не сможет тепнуться к нему так как вышли из функции - // если цель "target" имеет HideGhostWarp Comp +// Prevent ghosts from warping to protected entities +if (HasComp<HideGhostWarpComponent>(target)) + return;
Line range hint
589-593
: Добавлена кастомизация типа урона при попытке стать призракомРеализована возможность настройки типа урона через компонент
OnGhostAttemtpDamageComponent
. Комментарий указывает на специфичность этого изменения.Предлагаю исправить опечатку в названии компонента и улучшить комментарий:
-// START-ADT-TWeak: Это блять ебучий щиткод для ХорниМух, Котька не кусай меня пожажуста >~< -if (TryComp<OnGhostAttemtpDamageComponent>(playerEntity, out var damageComp)) +// Customizable damage type for specific entities when attempting to ghost +if (TryComp<OnGhostAttemptDamageComponent>(playerEntity, out var damageComp))
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (12)
Content.Client/UserInterface/Systems/Info/InfoUIController.cs
(1 hunks)Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs
(1 hunks)Content.Server/ADT/Administration/Commands/KickHideCommand.cs
(3 hunks)Content.Server/Administration/Managers/AdminManager.cs
(1 hunks)Content.Server/Administration/Managers/BanManager.cs
(3 hunks)Content.Server/Ghost/GhostSystem.cs
(1 hunks)Content.Server/GhostKick/GhostKickManager.cs
(3 hunks)Content.Server/Info/ShowRulesCommand.cs
(3 hunks)Content.Server/Tips/TipsSystem.cs
(3 hunks)Content.Shared/ADT/Ghost/HideGhostWarpComponent.cs
(1 hunks)Content.Shared/Follower/FollowerSystem.cs
(2 hunks)Resources/Locale/ru-RU/ADT/administration/commands.ftl
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (11)
Content.Client/UserInterface/Systems/Info/InfoUIController.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/ADT/Administration/Commands/KickHideCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Administration/Managers/AdminManager.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Administration/Managers/BanManager.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Ghost/GhostSystem.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/GhostKick/GhostKickManager.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Info/ShowRulesCommand.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Server/Tips/TipsSystem.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Shared/ADT/Ghost/HideGhostWarpComponent.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
Content.Shared/Follower/FollowerSystem.cs (1)
Pattern **/*.cs
: Все изменения вне папок /ADT/
должны быть прокомментированы
примерно так
// ADT-Tweak-Start
// ADT-Tweak-End
так как изменения в официальном коде
🔇 Additional comments (18)
Content.Shared/ADT/Ghost/HideGhostWarpComponent.cs (1)
Line range hint 1-10
: Изменения выглядят корректно!
Перенос компонента в пространство имен Shared логичен, так как функциональность должна быть доступна как на сервере, так и на клиенте. Документация и реализация компонента соответствуют требованиям.
Давайте проверим использование компонента в кодовой базе:
Resources/Locale/ru-RU/ADT/administration/commands.ftl (1)
27-28
:
Добавить сообщения для всех случаев ошибок
Отсутствуют сообщения об ошибках для случаев недостаточных прав и попытки отзыва прав у защищенных пользователей.
cmd-admin_toggle-error-args = Указанный пользователь не найден.
+cmd-admin_toggle-error-protected = Невозможно отозвать права у пользователя с особыми разрешениями.
+cmd-admin_toggle-error-no-permission = У вас недостаточно прав для использования этой команды.
+cmd-admin_toggle-error-invalid-action = Неверное действие. Используйте readmin или deadmin.
Likely invalid or redundant comment.
Content.Server/ADT/Administration/Commands/KickHideCommand.cs (1)
41-47
: Предыдущий комментарий всё ещё актуален
Проблемы с повторным разрешением IPlayerManager
и нелокализованным сообщением об ошибке, отмеченные в предыдущем обзоре, всё ещё присутствуют.
Content.Server/Info/ShowRulesCommand.cs (2)
9-9
: LGTM: Добавление зависимости IAdminManager
Корректное внедрение зависимости для проверки прав администратора.
Also applies to: 19-19
62-66
: Предыдущий комментарий всё ещё актуален
Проблемы с логикой проверки прав администратора и отсутствием маркеров ADT-Tweak были отмечены в предыдущем обзоре кода и до сих пор не исправлены.
Content.Server/ADT/Administration/Commands/AdminToggleCommand.cs (4)
1-17
: Корректное объявление класса и зависимостей!
Структура класса и зависимости определены правильно, следуя стандартному шаблону административных команд.
18-52
: Предыдущие замечания по методу Execute все еще актуальны
Необходимо исправить проблемы, указанные в предыдущем обзоре кода.
54-73
: Предыдущие замечания по методу GetCompletion все еще актуальны
Необходимо исправить проблемы, указанные в предыдущем обзоре кода.
1-75
: Файл соответствует требованиям ADT
Поскольку файл находится в директории ADT, маркеры ADT-Tweak не требуются.
Content.Server/GhostKick/GhostKickManager.cs (2)
8-10
: Корректное добавление зависимостей!
Зависимости для управления администраторами и логирования добавлены правильно.
84-88
: Предыдущий комментарий о null-обработке все еще актуален
Content.Server/Tips/TipsSystem.cs (2)
15-16
: Корректное добавление директив using!
Добавленные директивы необходимы для работы с системой логирования административных действий.
33-33
: Правильное внедрение зависимости для логирования!
Зависимость IAdminLogManager
добавлена в соответствии с существующим паттерном внедрения зависимостей.
Content.Shared/Follower/FollowerSystem.cs (2)
20-21
: Импорты корректны!
Добавленные пространства имен необходимы для работы с HideGhostWarpComponent
и TimedDespawnComponent
.
154-161
: Предыдущие замечания по реализации все еще актуальны
Текущая реализация соответствует требованиям PR, но предыдущие замечания рецензента остаются в силе.
Content.Server/Administration/Managers/BanManager.cs (1)
139-139
: Корректное использование ADT-Tweak маркеров
Маркеры правильно обрамляют изменения в соответствии с требованиями руководства по написанию кода.
Also applies to: 145-145
Content.Server/Administration/Managers/AdminManager.cs (1)
115-118
:
Проверьте влияние отключения уведомлений о входе в скрытый режим
Отключение уведомлений о входе администратора в скрытый режим может негативно повлиять на прозрачность действий администраторов и их подотчетность. Рекомендуется:
- Сохранить хотя бы уведомление для самого администратора
- Рассмотреть добавление логирования этих действий
Content.Server/Ghost/GhostSystem.cs (1)
Line range hint 498-506
: Добавлена логика создания полтергейста
Реализована специальная обработка для сущностей с компонентом PotentialPoltergeistComponent
, которые превращаются в полтергейст вместо обычного призрака.
Давайте проверим использование прототипа "ADTMobPoltergeist":
✅ Verification successful
Let's examine the poltergeist prototype content and related code to verify the implementation.
Let's check the specific implementation of poltergeist-related logic in GhostSystem:
Логика создания полтергейста подтверждена и корректно реализована
Проверка показала, что:
- Прототип
ADTMobPoltergeist
существует и правильно сконфигурирован - В
GhostSystem
реализована специальная обработка для сущностей сPotentialPoltergeistComponent
- При попытке стать призраком, сущность с этим компонентом превращается в полтергейст вместо обычного призрака
- Полтергейст имеет все необходимые компоненты и системы для корректной работы
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Check if the poltergeist prototype exists and its configuration
rg -l "ADTMobPoltergeist" --type yaml
Length of output: 99
Script:
#!/bin/bash
# Check the poltergeist prototype content
cat Resources/Prototypes/ADT/Entities/Mobs/Player/poltergeist.yml
# Search for PotentialPoltergeistComponent usage
rg -g "*.cs" "PotentialPoltergeistComponent"
# Search for poltergeist-related logic in GhostSystem
ast-grep --pattern 'public bool OnGhostAttempt($$$) { $$$ }'
Length of output: 2133
Script:
#!/bin/bash
# Check the GhostSystem implementation around poltergeist logic
rg -g "*.cs" -B 5 -A 10 "PotentialPoltergeistComponent"
# Check PoltergeistSystem implementation
cat Content.Server/ADT/Poltergeist/Systems/PoltergeistSystem.cs
Length of output: 11980
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | ||
{ | ||
shell.WriteError($"You not permission for kick '{playerName}'."); | ||
return; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Исправьте грамматику в сообщении об ошибке
Текущее сообщение содержит грамматические ошибки.
Предлагаю следующие изменения:
- shell.WriteError($"You not permission for kick '{playerName}'.");
+ shell.WriteError($"У вас нет прав для кика пользователя '{playerName}'.");
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | |
{ | |
shell.WriteError($"You not permission for kick '{playerName}'."); | |
return; | |
} | |
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | |
{ | |
shell.WriteError($"У вас нет прав для кика пользователя '{playerName}'."); | |
return; | |
} |
// ADT-Tweak-start | ||
if (_adminManager.HasAdminFlag(player, AdminFlags.Permissions)) | ||
{ | ||
shell.WriteError($"You not permission for kick '{playerName}'."); | ||
return; | ||
} | ||
_adminLogger.Add( | ||
LogType.AdminMessage, | ||
LogImpact.Low, | ||
$"[АДМИНАБУЗ] {shell.Player?.Name} used the command ghostkick on '{playerName}'." | ||
); | ||
// ADT-Tweak-end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружено некорректное использование проверки прав
Проверка AdminFlags.Permissions
в файле GhostKickManager.cs
используется неправильно - она запрещает действие при наличии прав вместо их требования. Это противоречит логике работы других административных команд в кодовой базе.
- В файле
Content.Server/GhostKick/GhostKickManager.cs
проверка прав должна быть инвертирована:
if (!_adminManager.HasAdminFlag(player, AdminFlags.Permissions))
{
shell.WriteError($"You not permission for kick '{playerName}'.");
return;
}
🔗 Analysis chain
Проверьте согласованность проверок прав
Необходимо убедиться, что аналогичные административные команды используют согласованный подход к проверке прав.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск похожих административных команд и их проверок прав
ast-grep --pattern 'AdminCommand(AdminFlags.$_)
public sealed class $_Command : IConsoleCommand
{
$$$
_adminManager.HasAdminFlag($_, AdminFlags.$_)
$$$
}'
Length of output: 162
Script:
#!/bin/bash
# Search for admin command classes and their permission checks
rg -U "AdminCommand.*AdminFlags\." -A 5
# Search for HasAdminFlag usage patterns
rg "_adminManager\.HasAdminFlag" -A 2 -B 2
# Search for other ghost-related commands
rg "class.*Command.*ghost" -A 5
Length of output: 139095
Script:
#!/bin/bash
# Search for ghost-related commands and their permission checks
rg -U "class.*GhostKick.*Command" -A 10 -B 2
# Search for similar permission checks in admin commands
rg "HasAdminFlag.*Permissions" -A 2 -B 2
# Search for admin flag declarations
rg "AdminFlags\.Permissions" -A 2 -B 2
Length of output: 6731
// _consoleHost.RegisterCommand("fuckrules", // ADT COmment | ||
// "", | ||
// "", | ||
// (_, _, _) => | ||
// { | ||
// OnAcceptPressed(); | ||
// }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Требуется добавить комментарии ADT-Tweak
Отключение команды "fuckrules" соответствует целям PR. Однако, согласно руководству по кодированию, изменения вне папок /ADT/ должны быть обрамлены специальными комментариями.
Примените следующие изменения:
+ // ADT-Tweak-Start
// _consoleHost.RegisterCommand("fuckrules", // ADT COmment
// "",
// "",
// (_, _, _) =>
// {
// OnAcceptPressed();
// });
+ // ADT-Tweak-End
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// _consoleHost.RegisterCommand("fuckrules", // ADT COmment | |
// "", | |
// "", | |
// (_, _, _) => | |
// { | |
// OnAcceptPressed(); | |
// }); | |
// ADT-Tweak-Start | |
// _consoleHost.RegisterCommand("fuckrules", // ADT COmment | |
// "", | |
// "", | |
// (_, _, _) => | |
// { | |
// OnAcceptPressed(); | |
// }); | |
// ADT-Tweak-End |
// ADT Tweak commented | ||
// _chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message")); | ||
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-de-admin-message", ("exAdminName", session.Name)), AdminFlags.Stealth); | ||
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-enable-stealth", ("stealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавьте маркеры ADT-Tweak
Согласно правилам кодирования, изменения вне папок ADT должны быть обрамлены маркерами ADT-Tweak.
Примените следующие изменения:
+ // ADT-Tweak-Start
// ADT Tweak commented
// _chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-de-admin-message", ("exAdminName", session.Name)), AdminFlags.Stealth);
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-enable-stealth", ("stealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth);
+ // ADT-Tweak-End
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// ADT Tweak commented | |
// _chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message")); | |
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-de-admin-message", ("exAdminName", session.Name)), AdminFlags.Stealth); | |
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-enable-stealth", ("stealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth); | |
// ADT-Tweak-Start | |
// ADT Tweak commented | |
// _chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message")); | |
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-de-admin-message", ("exAdminName", session.Name)), AdminFlags.Stealth); | |
// _chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-enable-stealth", ("stealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth); | |
// ADT-Tweak-End |
{
var dbData = await _dbManager.GetAdminDataForAsync(session.UserId);
if (dbData == null)
{
// Not an admin!
return null;
}
var flags = AdminFlags.None;
if (dbData.AdminRank != null)
{
flags = AdminFlagsHelper.NamesToFlags(dbData.AdminRank.Flags.Select(p => p.Flag));
}
foreach (var dbFlag in dbData.Flags)
{
var flag = AdminFlagsHelper.NameToFlag(dbFlag.Flag);
if (dbFlag.Negative)
{
flags &= ~flag;
}
else
{
flags |= flag;
}
}
var data = new AdminData
{
Flags = flags
};
if (dbData.Title != null && _cfg.GetCVar(CCVars.AdminUseCustomNamesAdminRank))
{
data.Title = dbData.Title;
}
else if (dbData.AdminRank != null)
{
data.Title = dbData.AdminRank.Name;
}
return (data, dbData.AdminRankId, false);
}
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Убирать fuckrules я смысла не вижу
- Нельзя забанить человека с правами? Что-то мне не очень такое нравится
Факрул Да. Permission права укрепляются. 1984. Для обеспечения безопасности |
@jungarikjan хочет безопасности от чрезвычайных случаев |
@FaDeOkno нельзя банить Петра, Эйдана, Кураторов и Пангу |
Плюс добавлю, что голосование за бан пользователя я ни трогал, им можно забанить в любом случае |
…evelop_ADT into new_admin_comand
…evelop_ADT into new_admin_comand
Описание PR
Требования
Критические изменения
Чейнджлог
NO CL NO FUN
Summary by CodeRabbit
Новые функции
admin_toggle
для переключения административного статуса игроков.Исправления ошибок
ShowRulesCommand
теперь проверяет права администратора перед отображением правил.KickHideCommand
теперь предоставляет более точные сообщения об ошибках при отсутствии игрока.Документация
admin_toggle
.