This commit is contained in:
Deserty0
2025-08-11 00:04:09 +10:00
parent 4b68d79729
commit 146967b786
10 changed files with 135 additions and 7 deletions

View File

@@ -12,7 +12,7 @@ public sealed partial class AdminMenuWindow : DefaultWindow
public AdminMenuWindow()
{
MinSize = new Vector2(650, 250);
MinSize = new Vector2(650, 280);
Title = Loc.GetString("admin-menu-title");
RobustXamlLoader.Load(this);
MasterTabContainer.SetTabTitle((int) TabIndex.Admin, Loc.GetString("admin-menu-admin-tab"));

View File

@@ -27,6 +27,11 @@
<cc:CommandButton Name="ShowReasonButton" Command="panicbunker_show_reason"
ToggleMode="True" Text="{Loc admin-ui-panic-bunker-show-reason}"
ToolTip="{Loc admin-ui-panic-bunker-show-reason-tooltip}" />
<BoxContainer Orientation="Horizontal" Margin="2">
<Label Text="{Loc cp14-admin-ui-suspicious-warning-level-setting}" MinWidth="175" />
<OptionButton Name="SuspiciousWarningLevel" HorizontalAlignment="Left" Margin="4 0"
ToolTip="{Loc cp14-admin-ui-suspicious-warning-level-setting-desc}" />
</BoxContainer>
<BoxContainer Orientation="Vertical" Margin="0 10 0 0">
<BoxContainer Orientation="Horizontal" Margin="2">
<Label Text="{Loc admin-ui-panic-bunker-min-account-age}" MinWidth="175" />

View File

@@ -1,7 +1,9 @@
using Content.Shared.Administration.Events;
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Console;
namespace Content.Client.Administration.UI.Tabs.PanicBunkerTab;
@@ -10,9 +12,13 @@ namespace Content.Client.Administration.UI.Tabs.PanicBunkerTab;
public sealed partial class PanicBunkerTab : Control
{
[Dependency] private readonly IConsoleHost _console = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
private string _minAccountAge;
private string _minOverallMinutes;
// CrystallEdge suspicious activity warning system
private List<SuspiciousWarningLevelSelection> _suspiciousWarningLevelSelections = [];
private string _currentSuspiciousWarningLevel = string.Empty;
public PanicBunkerTab()
{
@@ -28,6 +34,21 @@ public sealed partial class PanicBunkerTab : Control
MinOverallMinutes.OnTextEntered += args => SendMinOverallMinutes(args.Text);
MinOverallMinutes.OnFocusExit += args => SendMinOverallMinutes(args.Text);
_minOverallMinutes = MinOverallMinutes.Text;
// CrystallEdge suspicious activity warning system
foreach (var type in Enum.GetValues<SuspiciousWarningLevelSelection>())
{
_suspiciousWarningLevelSelections.Add(type);
SuspiciousWarningLevel.AddItem(GetLocalizedEnumValue(type));
}
UpdateSuspiciousWarningLevel();
SuspiciousWarningLevel.OnItemSelected += ev =>
{
SuspiciousWarningLevel.SelectId(ev.Id);
SendSuspiciousWarningLevel(_suspiciousWarningLevelSelections[ev.Id]);
};
}
private void SendMinAccountAge(string text)
@@ -74,4 +95,43 @@ public sealed partial class PanicBunkerTab : Control
MinOverallMinutes.Text = status.MinOverallMinutes.ToString();
_minOverallMinutes = MinOverallMinutes.Text;
}
// CrystallEdge suspicious activity warning system
private enum SuspiciousWarningLevelSelection
{
Disabled,
Low,
Medium,
High,
}
private string GetLocalizedEnumValue(SuspiciousWarningLevelSelection selection)
{
return selection switch
{
SuspiciousWarningLevelSelection.Disabled => Loc.GetString("cp14-admin-ui-suspicious-warning-level-disabled"),
SuspiciousWarningLevelSelection.Low => Loc.GetString("cp14-admin-ui-suspicious-warning-level-low"),
SuspiciousWarningLevelSelection.Medium => Loc.GetString("cp14-admin-ui-suspicious-warning-level-medium"),
SuspiciousWarningLevelSelection.High => Loc.GetString("cp14-admin-ui-suspicious-warning-level-high"),
_ => throw new ArgumentOutOfRangeException(nameof(selection), selection, null),
};
}
private void UpdateSuspiciousWarningLevel()
{
_currentSuspiciousWarningLevel = _cfg.GetCVar(CCVars.SuspiciousAccountsWarningLevel);
if (!Enum.TryParse(_currentSuspiciousWarningLevel, true, out SuspiciousWarningLevelSelection currentSuspiciousWarningSelection))
{
throw new ArgumentOutOfRangeException(nameof(_currentSuspiciousWarningLevel),
_currentSuspiciousWarningLevel,
null);
}
SuspiciousWarningLevel.SelectId((int)currentSuspiciousWarningSelection);
}
private void SendSuspiciousWarningLevel(SuspiciousWarningLevelSelection selection)
{
_console.ExecuteCommand($"cp14.suspicious-warning-level {Enum.GetName(selection)}");
}
}

View File

@@ -0,0 +1,40 @@
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
using Robust.Shared.Console;
namespace Content.Server._CP14.Administration.Commands;
[AdminCommand(AdminFlags.Server)]
public sealed class SuspiciousLevelCommand : LocalizedCommands
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public override string Command => "cp14.suspicious-warning-level";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length == 0)
{
var level = _cfg.GetCVar(CCVars.SuspiciousAccountsWarningLevel);
shell.WriteLine(Loc.GetString("cp14-suspicious-warning-level-command-current", ("level", level)));
}
if (args.Length > 1)
{
shell.WriteError(Loc.GetString("shell-need-between-arguments",("lower", 0), ("upper", 1)));
return;
}
List<string> possibleLevels = ["disabled", "low", "medium", "high"];
if (!possibleLevels.Contains(args[0].ToLower()))
{
shell.WriteError(Loc.GetString("cp14-suspicious-warning-level-command-error"));
return;
}
_cfg.SetCVar(CCVars.SuspiciousAccountsWarningLevel, args[0]);
shell.WriteLine(Loc.GetString("cp14-suspicious-warning-level-command-set", ("level", args[0])));
}
}

View File

@@ -10,7 +10,6 @@ using Content.Server.Database;
using Content.Shared._CP14.Discord;
using Content.Shared.CCVar;
using Robust.Server.Player;
using Robust.Shared;
using Robust.Shared.Configuration;
using Robust.Shared.Enums;
using Robust.Shared.Network;
@@ -178,9 +177,11 @@ public sealed class DiscordAuthManager
switch (_suspiciousAccountsWarningLevel)
{
case "medium":
{
if (_panicBunkerEnabled)
{
var errorMessage = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String("RXJyb3IgMjcwMQ=="));
var errorMessage =
System.Text.Encoding.UTF8.GetString(Convert.FromBase64String("RXJyb3IgMjcwMQ=="));
if (_panicBunkerShowReason)
{
errorMessage = "Panic bunker enabled";
@@ -189,16 +190,20 @@ public sealed class DiscordAuthManager
errorMessage = _panicBunkerCustomReason;
}
}
return new AuthData { Verified = false, ErrorMessage = errorMessage };
}
break;
return new AuthData { Verified = false, ErrorMessage = errorMessage };
}
break;
}
case "high":
{
return new AuthData
{
Verified = false,
ErrorMessage = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String("RXJyb3IgMjcwMQ=="))
};
}
}
return new AuthData { Verified = true, Suspicious = isSuspicious };

View File

@@ -14,5 +14,5 @@ public sealed partial class CCVars
CVarDef.Create("cp14.discord_auth_token", "token", CVar.SERVERONLY | CVar.CONFIDENTIAL);
public static readonly CVarDef<string> SuspiciousAccountsWarningLevel =
CVarDef.Create("cp14.suspicious_accounts_warning_level", "disabled", CVar.SERVERONLY, "Can be: disabled, low, medium, high");
CVarDef.Create("cp14.suspicious_accounts_warning_level", "disabled", CVar.SERVER, "Can be: disabled, low, medium, high");
}

View File

@@ -0,0 +1,3 @@
cp14-suspicious-warning-level-command-error = Warning level can be only disabled, low, medium or high
cp14-suspicious-warning-level-command-current = Current warning level is {$level}
cp14-suspicious-warning-level-command-set = Warning level set to {$level}

View File

@@ -0,0 +1,6 @@
cp14-admin-ui-suspicious-warning-level-setting = Warning level
cp14-admin-ui-suspicious-warning-level-setting-desc = Level of response to players with suspicious discord accounts
cp14-admin-ui-suspicious-warning-level-disabled = Disabled
cp14-admin-ui-suspicious-warning-level-low = Low
cp14-admin-ui-suspicious-warning-level-medium = Medium
cp14-admin-ui-suspicious-warning-level-high = High

View File

@@ -0,0 +1,3 @@
cp14-suspicious-warning-level-command-error = Уровень тревоги может быть только disabled, low, medium или high
cp14-suspicious-warning-level-command-current = Текущий уровень тревоги {$level}
cp14-suspicious-warning-level-command-set = Уровень тревоги установлен на {$level}

View File

@@ -0,0 +1,6 @@
cp14-admin-ui-suspicious-warning-level-setting = Уровень тревоги
cp14-admin-ui-suspicious-warning-level-setting-desc = Уровень реакции на игроков с подозрительными дискорд аккаунтами
cp14-admin-ui-suspicious-warning-level-disabled = Нет
cp14-admin-ui-suspicious-warning-level-low = Низкий
cp14-admin-ui-suspicious-warning-level-medium = Средний
cp14-admin-ui-suspicious-warning-level-high = Высокий