- Added `ReloadAdminsEveryMapChange` - Reloading sql admins on map start
- Ability to use any valid steamid instead of steamid64
- Fixed chat commands when gagged
- Votes now respect `UseChatMenu` config setting
This commit is contained in:
Dawid Bepierszcz
2024-06-09 17:55:33 +02:00
parent 962529e445
commit 00facafdcb
13 changed files with 105 additions and 62 deletions

View File

@@ -37,7 +37,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66"; public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.4.4b"; public override string ModuleVersion => "1.4.5a";
public CS2_SimpleAdminConfig Config { get; set; } = new(); public CS2_SimpleAdminConfig Config { get; set; } = new();

View File

@@ -10,7 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.228" /> <PackageReference Include="CounterStrikeSharp.API" Version="1.0.239" />
<PackageReference Include="Dapper" Version="2.1.35" /> <PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Discord.Net.Webhook" Version="3.14.1" /> <PackageReference Include="Discord.Net.Webhook" Version="3.14.1" />
<PackageReference Include="MySqlConnector" Version="2.3.7" /> <PackageReference Include="MySqlConnector" Version="2.3.7" />

View File

@@ -151,14 +151,15 @@ namespace CS2_SimpleAdmin
return; return;
if (string.IsNullOrEmpty(command.GetArg(1))) return; if (string.IsNullOrEmpty(command.GetArg(1))) return;
var steamid = command.GetArg(1);
if (!Helper.IsValidSteamId64(steamid)) if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = steamId.SteamId64.ToString();
var reason = _localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
int.TryParse(command.GetArg(2), out var time); int.TryParse(command.GetArg(2), out var time);

View File

@@ -97,12 +97,16 @@ namespace CS2_SimpleAdmin
public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command) public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command)
{ {
if (_database == null) return; if (_database == null) return;
if (!Helper.IsValidSteamId64(command.GetArg(1)))
if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = steamId.SteamId64.ToString();
if (command.GetArg(2).Length <= 0) if (command.GetArg(2).Length <= 0)
{ {
command.ReplyToCommand($"Invalid player name."); command.ReplyToCommand($"Invalid player name.");
@@ -114,7 +118,6 @@ namespace CS2_SimpleAdmin
return; return;
} }
var steamid = command.GetArg(1);
var name = command.GetArg(2); var name = command.GetArg(2);
var flags = command.GetArg(3); var flags = command.GetArg(3);
var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") || var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") ||
@@ -153,16 +156,15 @@ namespace CS2_SimpleAdmin
{ {
if (_database == null) return; if (_database == null) return;
if (!Helper.IsValidSteamId64(command.GetArg(1))) if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = command.GetArg(1);
var globalDelete = command.GetArg(2).ToLower().Equals("-g"); var globalDelete = command.GetArg(2).ToLower().Equals("-g");
RemoveAdmin(caller, steamid, globalDelete, command); RemoveAdmin(caller, steamId.SteamId64.ToString(), globalDelete, command);
} }
public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null) public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null)
@@ -534,13 +536,12 @@ namespace CS2_SimpleAdmin
public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string? reason = "Unknown", string? callerName = null, CommandInfo? command = null) public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string? reason = "Unknown", string? callerName = null, CommandInfo? command = null)
{ {
if (player == null || !player.IsValid) return;
callerName ??= caller == null ? "Console" : caller.PlayerName; callerName ??= caller == null ? "Console" : caller.PlayerName;
if (player != null && player.PawnIsAlive)
{
player.Pawn.Value!.Freeze();
}
reason ??= _localizer?["sa_unknown"] ?? "Unknown"; reason ??= _localizer?["sa_unknown"] ?? "Unknown";
player.Pawn.Value!.Freeze();
if (command != null) if (command != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer); Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
@@ -548,7 +549,7 @@ namespace CS2_SimpleAdmin
if (string.IsNullOrEmpty(reason) == false) if (string.IsNullOrEmpty(reason) == false)
{ {
if (player != null && !player.IsBot && !player.IsHLTV) if (player != null && !player.IsBot)
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]); player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);

View File

@@ -141,14 +141,14 @@ namespace CS2_SimpleAdmin
if (string.IsNullOrEmpty(command.GetArg(1))) return; if (string.IsNullOrEmpty(command.GetArg(1))) return;
var steamid = command.GetArg(1); if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
if (!Helper.IsValidSteamId64(steamid))
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = steamId.SteamId64.ToString();
var reason = _localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
@@ -265,10 +265,10 @@ namespace CS2_SimpleAdmin
var pattern = command.GetArg(1); var pattern = command.GetArg(1);
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
if (Helper.IsValidSteamId64(pattern)) if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
{ {
var matches = Helper.GetPlayerFromSteamid64(pattern); var matches = Helper.GetPlayerFromSteamid64(steamId.SteamId64.ToString());
if (matches.Count == 1) if (matches.Count == 1)
{ {
var player = matches.FirstOrDefault(); var player = matches.FirstOrDefault();
@@ -474,16 +474,17 @@ namespace CS2_SimpleAdmin
if (command.ArgCount < 2) if (command.ArgCount < 2)
return; return;
if (string.IsNullOrEmpty(command.GetArg(1))) return; if (string.IsNullOrEmpty(command.GetArg(1))) return;
var steamid = command.GetArg(1); if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
if (!Helper.IsValidSteamId64(steamid))
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = steamId.SteamId64.ToString();
var reason = _localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
@@ -595,9 +596,9 @@ namespace CS2_SimpleAdmin
var found = false; var found = false;
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
if (Helper.IsValidSteamId64(pattern)) if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
{ {
var matches = Helper.GetPlayerFromSteamid64(pattern); var matches = Helper.GetPlayerFromSteamid64(steamId.SteamId64.ToString());
if (matches.Count == 1) if (matches.Count == 1)
{ {
var player = matches.FirstOrDefault(); var player = matches.FirstOrDefault();
@@ -735,7 +736,7 @@ namespace CS2_SimpleAdmin
if (time == 0) if (time == 0)
{ {
if (!player.IsBot && !player.IsHLTV) if (!player.IsBot)
{ {
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
@@ -780,12 +781,11 @@ namespace CS2_SimpleAdmin
} }
} }
if (command != null) if (command == null) return;
{
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer); Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
}
} }
[ConsoleCommand("css_addsilence")] [ConsoleCommand("css_addsilence")]
@@ -800,14 +800,14 @@ namespace CS2_SimpleAdmin
return; return;
if (string.IsNullOrEmpty(command.GetArg(1))) return; if (string.IsNullOrEmpty(command.GetArg(1))) return;
var steamid = command.GetArg(1); if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
if (!Helper.IsValidSteamId64(steamid))
{ {
command.ReplyToCommand($"Invalid SteamID64."); command.ReplyToCommand($"Invalid SteamID64.");
return; return;
} }
var steamid = steamId.SteamId64.ToString();
var reason = _localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
@@ -843,7 +843,7 @@ namespace CS2_SimpleAdmin
if (time == 0) if (time == 0)
{ {
if (!player.IsBot && !player.IsHLTV) if (player is { IsBot: false, IsHLTV: false })
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
@@ -863,7 +863,7 @@ namespace CS2_SimpleAdmin
} }
else else
{ {
if (!player.IsBot && !player.IsHLTV) if (player is { IsBot: false, IsHLTV: false })
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
@@ -921,9 +921,9 @@ namespace CS2_SimpleAdmin
var found = false; var found = false;
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
if (Helper.IsValidSteamId64(pattern)) if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
{ {
var matches = Helper.GetPlayerFromSteamid64(pattern); var matches = Helper.GetPlayerFromSteamid64(steamId.SteamId64.ToString());
if (matches.Count == 1) if (matches.Count == 1)
{ {
var player = matches.FirstOrDefault(); var player = matches.FirstOrDefault();

View File

@@ -37,7 +37,10 @@ namespace CS2_SimpleAdmin
{ {
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
ChatMenu voteMenu = new(_localizer!["sa_admin_vote_menu_title", question]); BaseMenu voteMenu = Config.UseChatMenu
? new ChatMenu(_localizer!["sa_admin_vote_menu_title", question])
: new CenterHtmlMenu(_localizer!["sa_admin_vote_menu_title", question], Instance);
//ChatMenu voteMenu = new(_localizer!["sa_admin_vote_menu_title", question]);
for (var i = 2; i <= answersCount - 1; i++) for (var i = 2; i <= answersCount - 1; i++)
{ {
@@ -50,8 +53,10 @@ namespace CS2_SimpleAdmin
StringBuilder sb = new(_localizer["sa_prefix"]); StringBuilder sb = new(_localizer["sa_prefix"]);
sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
player.PrintToChat(sb.ToString()); player.PrintToChat(sb.ToString());
MenuManager.OpenChatMenu(player, voteMenu); voteMenu.OpenToAll();
//MenuManager.OpenChatMenu(player, voteMenu);
} }
} }

View File

@@ -129,6 +129,9 @@ namespace CS2_SimpleAdmin
[JsonPropertyName("EnableMetrics")] [JsonPropertyName("EnableMetrics")]
public bool EnableMetrics { get; set; } = true; public bool EnableMetrics { get; set; } = true;
[JsonPropertyName("ReloadAdminsEveryMapChange")]
public bool ReloadAdminsEveryMapChange { get; set; } = false;
[JsonPropertyName("UseChatMenu")] [JsonPropertyName("UseChatMenu")]
public bool UseChatMenu { get; set; } = false; public bool UseChatMenu { get; set; } = false;
@@ -160,10 +163,10 @@ namespace CS2_SimpleAdmin
public Discord Discord { get; set; } = new(); public Discord Discord { get; set; } = new();
[JsonPropertyName("DefaultMaps")] [JsonPropertyName("DefaultMaps")]
public List<string> DefaultMaps { get; set; } = []; public List<string> DefaultMaps { get; set; } = new();
[JsonPropertyName("WorkshopMaps")] [JsonPropertyName("WorkshopMaps")]
public List<string> WorkshopMaps { get; set; } = []; public List<string> WorkshopMaps { get; set; } = new();
[JsonPropertyName("CustomServerCommands")] [JsonPropertyName("CustomServerCommands")]
public List<CustomServerCommandData> CustomServerCommands { get; set; } = new(); public List<CustomServerCommandData> CustomServerCommands { get; set; } = new();

View File

@@ -205,8 +205,11 @@ public partial class CS2_SimpleAdmin
public HookResult OnCommandSay(CCSPlayerController? player, CommandInfo info) public HookResult OnCommandSay(CCSPlayerController? player, CommandInfo info)
{ {
if (player is null || !player.IsValid || player.IsBot || player.IsHLTV || info.GetArg(1).StartsWith($"/") if (player is null || !player.IsValid || player.IsBot || player.IsHLTV)
|| info.GetArg(1).StartsWith($"!") && info.GetArg(1).Length >= 12) return HookResult.Continue;
if (info.GetArg(1).StartsWith($"/")
|| info.GetArg(1).StartsWith($"!"))
return HookResult.Continue; return HookResult.Continue;
if (info.GetArg(1).Length == 0) if (info.GetArg(1).Length == 0)
@@ -220,8 +223,11 @@ public partial class CS2_SimpleAdmin
public HookResult OnCommandTeamSay(CCSPlayerController? player, CommandInfo info) public HookResult OnCommandTeamSay(CCSPlayerController? player, CommandInfo info)
{ {
if (player is null || !player.IsValid || player.IsBot || player.IsHLTV || info.GetArg(1).StartsWith($"/") if (player is null || !player.IsValid || player.IsBot || player.IsHLTV )
|| info.GetArg(1).StartsWith($"!") && info.GetArg(1).Length >= 12) return HookResult.Continue;
if (info.GetArg(1).StartsWith($"/")
|| info.GetArg(1).StartsWith($"!"))
return HookResult.Continue; return HookResult.Continue;
if (info.GetArg(1).Length == 0) if (info.GetArg(1).Length == 0)
@@ -257,6 +263,9 @@ public partial class CS2_SimpleAdmin
public void OnMapStart(string mapName) public void OnMapStart(string mapName)
{ {
if (Config.ReloadAdminsEveryMapChange)
AddTimer(3.0f, () => ReloadAdmins(null));
var path = Path.GetDirectoryName(ModuleDirectory); var path = Path.GetDirectoryName(ModuleDirectory);
if (Directory.Exists(path + "/CS2-Tags")) if (Directory.Exists(path + "/CS2-Tags"))
{ {

View File

@@ -24,12 +24,12 @@ public static class PlayerExtensions
public static bool CanTarget(this CCSPlayerController? controller, CCSPlayerController? target) public static bool CanTarget(this CCSPlayerController? controller, CCSPlayerController? target)
{ {
if (target != null && target.IsBot) return true; if (controller is null || target is null) return true;
if (controller is null) return true; if (target.IsBot) return true;
return target != null && (AdminManager.CanPlayerTarget(controller, target) || return AdminManager.CanPlayerTarget(controller, target) ||
AdminManager.CanPlayerTarget(new SteamID(controller.SteamID), AdminManager.CanPlayerTarget(new SteamID(controller.SteamID),
new SteamID(target.SteamID))); new SteamID(target.SteamID));
} }
public static void SetSpeed(this CCSPlayerController? controller, float speed) public static void SetSpeed(this CCSPlayerController? controller, float speed)

View File

@@ -75,6 +75,21 @@ namespace CS2_SimpleAdmin
const string pattern = @"^\d{17}$"; const string pattern = @"^\d{17}$";
return Regex.IsMatch(input, pattern); return Regex.IsMatch(input, pattern);
} }
public static bool ValidateSteamId(string input, out SteamID? steamId)
{
steamId = null;
if (string.IsNullOrEmpty(input))
{
return false;
}
if (!SteamID.TryParse(input, out var parsedSteamId)) return false;
steamId = parsedSteamId;
return true;
}
public static bool IsValidIp(string input) public static bool IsValidIp(string input)
{ {

View File

@@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging;
using MySqlConnector; using MySqlConnector;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using Serilog.Core;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
@@ -134,8 +135,9 @@ public class PermissionManager(Database.Database database)
return filteredFlagsWithImmunity; return filteredFlagsWithImmunity;
} }
catch (Exception) catch (Exception ex)
{ {
CS2_SimpleAdmin._logger?.LogError(ex.ToString());
return []; return [];
} }
} }
@@ -249,7 +251,10 @@ public class PermissionManager(Database.Database database)
return groupInfoDictionary; return groupInfoDictionary;
} }
catch { } catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogError(ex.ToString());
}
return []; return [];
} }
@@ -388,7 +393,10 @@ public class PermissionManager(Database.Database database)
await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, CS2_SimpleAdmin.ServerId }); await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, CS2_SimpleAdmin.ServerId });
} }
catch { }; catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogError(ex.ToString());
}
} }
public async Task AddAdminBySteamId(string playerSteamId, string playerName, List<string> flagsList, int immunity = 0, int time = 0, bool globalAdmin = false) public async Task AddAdminBySteamId(string playerSteamId, string playerName, List<string> flagsList, int immunity = 0, int time = 0, bool globalAdmin = false)
@@ -457,7 +465,7 @@ public class PermissionManager(Database.Database database)
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.ToString()); CS2_SimpleAdmin._logger?.LogError(ex.ToString());
} }
} }
@@ -503,7 +511,7 @@ public class PermissionManager(Database.Database database)
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.ToString()); CS2_SimpleAdmin._logger?.LogError(ex.ToString());
} }
} }
@@ -519,7 +527,7 @@ public class PermissionManager(Database.Database database)
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.ToString()); CS2_SimpleAdmin._logger?.LogError(ex.ToString());
} }
} }

View File

@@ -41,6 +41,7 @@ namespace CS2_SimpleAdmin.Menus
continue; continue;
var enabled = admin.CanTarget(player); var enabled = admin.CanTarget(player);
if (optionName != null) if (optionName != null)
menu.AddMenuOption(optionName, (_, _) => menu.AddMenuOption(optionName, (_, _) =>
{ {

View File

@@ -1 +1 @@
1.4.4b 1.4.5a