Admin immunity + Discord

- Fixed command logging + small refactor
- Fixed admin immunity
- Separated penalty webhook
- More customizable penalty webhook
This commit is contained in:
Dawid Bepierszcz
2024-08-05 03:28:42 +02:00
parent bb0a236f28
commit c4cb308147
12 changed files with 222 additions and 250 deletions

View File

@@ -27,10 +27,10 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
private static bool _tagsDetected; private static bool _tagsDetected;
public static bool VoteInProgress = false; public static bool VoteInProgress = false;
public static int? ServerId = null; public static int? ServerId = null;
public static bool UnlockedCommands = CoreConfig.UnlockConCommands; private static readonly bool UnlockedCommands = CoreConfig.UnlockConCommands;
public static DiscordWebhookClient? DiscordWebhookClientLog; public static DiscordWebhookClient? DiscordWebhookClientLog;
public static DiscordWebhookClient? DiscordWebhookClientPenalty; // public static DiscordWebhookClient? DiscordWebhookClientPenalty;
private string _dbConnectionString = string.Empty; private string _dbConnectionString = string.Empty;
private static Database.Database? _database; private static Database.Database? _database;
@@ -120,8 +120,10 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
if (!string.IsNullOrEmpty(Config.Discord.DiscordLogWebhook)) if (!string.IsNullOrEmpty(Config.Discord.DiscordLogWebhook))
DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook); DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook);
/*
if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook)) if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook))
DiscordWebhookClientPenalty = new DiscordWebhookClient(Config.Discord.DiscordPenaltyWebhook); DiscordWebhookClientPenalty = new DiscordWebhookClient(Config.Discord.DiscordPenaltyWebhook);
*/
PluginInfo.ShowAd(ModuleVersion); PluginInfo.ShowAd(ModuleVersion);
if (Config.EnableUpdateCheck) if (Config.EnableUpdateCheck)

View File

@@ -52,7 +52,6 @@ namespace CS2_SimpleAdmin
if (_database == null || player is null || !player.IsValid) return; if (_database == null || player is null || !player.IsValid) return;
if (!caller.CanTarget(player)) return; if (!caller.CanTarget(player)) return;
if (CheckValidBan(caller, time) == false) if (CheckValidBan(caller, time) == false)
return; return;
@@ -139,11 +138,10 @@ namespace CS2_SimpleAdmin
Server.ExecuteCommand($"banid 2 {new SteamID(player.SteamID).SteamId3}"); Server.ExecuteCommand($"banid 2 {new SteamID(player.SteamID).SteamId3}");
if (command != null) if (command != null)
{
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
} Helper.LogCommand(caller, $"css_ban {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {time} {reason}");
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _localizer);
} }
[ConsoleCommand("css_addban")] [ConsoleCommand("css_addban")]
@@ -244,7 +242,7 @@ namespace CS2_SimpleAdmin
} }
} }
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _localizer);
} }
Task.Run(async () => Task.Run(async () =>
@@ -254,7 +252,6 @@ namespace CS2_SimpleAdmin
}); });
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
//Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer); //Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer);
if (UnlockedCommands) if (UnlockedCommands)
Server.ExecuteCommand($"banid 2 {steamId.SteamId3}"); Server.ExecuteCommand($"banid 2 {steamId.SteamId3}");
@@ -282,8 +279,6 @@ namespace CS2_SimpleAdmin
return; return;
} }
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
var reason = _localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
var adminInfo = new PlayerInfo var adminInfo = new PlayerInfo
@@ -365,7 +360,8 @@ namespace CS2_SimpleAdmin
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
} }
} }
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, DiscordWebhookClientPenalty, _localizer);
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _localizer);
} }
Task.Run(async () => Task.Run(async () =>
@@ -375,7 +371,6 @@ namespace CS2_SimpleAdmin
}); });
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
command.ReplyToCommand($"Banned player with IP address {ipAddress}."); command.ReplyToCommand($"Banned player with IP address {ipAddress}.");
} }
@@ -422,7 +417,6 @@ namespace CS2_SimpleAdmin
BanManager banManager = new(_database, Config); BanManager banManager = new(_database, Config);
Task.Run(async () => await banManager.UnbanPlayer(pattern, callerSteamId, reason)); Task.Run(async () => await banManager.UnbanPlayer(pattern, callerSteamId, reason));
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
command.ReplyToCommand($"Unbanned player with pattern {pattern}."); command.ReplyToCommand($"Unbanned player with pattern {pattern}.");

View File

@@ -18,7 +18,6 @@ namespace CS2_SimpleAdmin
{ {
if (caller == null || !caller.IsValid || command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return; if (caller == null || !caller.IsValid || command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return;
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
@@ -45,7 +44,6 @@ namespace CS2_SimpleAdmin
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
var utf8String = Encoding.UTF8.GetString(utf8BytesString); var utf8String = Encoding.UTF8.GetString(utf8BytesString);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
@@ -92,7 +90,6 @@ namespace CS2_SimpleAdmin
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
var utf8String = Encoding.UTF8.GetString(utf8BytesString); var utf8String = Encoding.UTF8.GetString(utf8BytesString);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.PrintToCenterAll(utf8String.ReplaceColorTags()); Helper.PrintToCenterAll(utf8String.ReplaceColorTags());
@@ -106,7 +103,6 @@ namespace CS2_SimpleAdmin
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
var utf8String = Encoding.UTF8.GetString(utf8BytesString); var utf8String = Encoding.UTF8.GetString(utf8BytesString);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
VirtualFunctions.ClientPrintAll( VirtualFunctions.ClientPrintAll(

View File

@@ -135,8 +135,6 @@ namespace CS2_SimpleAdmin
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList(); var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
_ = adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin); _ = adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin);
if (command != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, $"css_addadmin {steamid} {name} {flags} {immunity} {time}"); Helper.LogCommand(caller, $"css_addadmin {steamid} {name} {flags} {immunity} {time}");
var msg = $"Added '{flags}' flags to '{name}' ({steamid})"; var msg = $"Added '{flags}' flags to '{name}' ({steamid})";
@@ -185,8 +183,6 @@ namespace CS2_SimpleAdmin
AdminManager.RemovePlayerAdminData(steamId); AdminManager.RemovePlayerAdminData(steamId);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
if (command != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, $"css_deladmin {steamid}"); Helper.LogCommand(caller, $"css_deladmin {steamid}");
var msg = $"Removed flags from '{steamid}'"; var msg = $"Removed flags from '{steamid}'";
@@ -233,8 +229,6 @@ namespace CS2_SimpleAdmin
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList(); var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
_ = adminManager.AddGroup(name, flagsList, immunity, globalGroup); _ = adminManager.AddGroup(name, flagsList, immunity, globalGroup);
if (command != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, $"css_addgroup {name} {flags} {immunity}"); Helper.LogCommand(caller, $"css_addgroup {name} {flags} {immunity}");
var msg = $"Created group '{name}' with flags '{flags}'"; var msg = $"Created group '{name}' with flags '{flags}'";
@@ -275,8 +269,6 @@ namespace CS2_SimpleAdmin
ReloadAdmins(caller); ReloadAdmins(caller);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
if (command != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, $"css_delgroup {name}"); Helper.LogCommand(caller, $"css_delgroup {name}");
var msg = $"Removed group '{name}'"; var msg = $"Removed group '{name}'";
@@ -348,7 +340,7 @@ namespace CS2_SimpleAdmin
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
if (SilentPlayers.Contains(caller.Slot)) if (!SilentPlayers.Add(caller.Slot))
{ {
SilentPlayers.Remove(caller.Slot); SilentPlayers.Remove(caller.Slot);
caller.PrintToChat($"You aren't hidden now!"); caller.PrintToChat($"You aren't hidden now!");
@@ -356,7 +348,6 @@ namespace CS2_SimpleAdmin
} }
else else
{ {
SilentPlayers.Add(caller.Slot);
Server.ExecuteCommand("sv_disable_teamselect_menu 1"); Server.ExecuteCommand("sv_disable_teamselect_menu 1");
if (caller.PlayerPawn.Value != null && caller.PawnIsAlive) if (caller.PlayerPawn.Value != null && caller.PawnIsAlive)
@@ -547,24 +538,22 @@ namespace CS2_SimpleAdmin
player.Pawn.Value!.Freeze(); player.Pawn.Value!.Freeze();
if (command != null) Helper.LogCommand(caller, $"css_kick {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {reason}");
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, $"css_kick {player?.PlayerName} {reason}");
if (string.IsNullOrEmpty(reason) == false) if (string.IsNullOrEmpty(reason) == false)
{ {
if (player != null && !player.IsBot) if (!player.IsBot)
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
{ {
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, callerName]); player.PrintToCenter(_localizer!["sa_player_kick_message", reason, callerName]);
} }
if (player != null && player.UserId.HasValue) if (player.UserId.HasValue)
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value, reason), AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value, reason),
CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
} }
else else
{ {
if (player != null && player.UserId.HasValue) if (player.UserId.HasValue)
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value), AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value),
CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
} }
@@ -638,9 +627,7 @@ namespace CS2_SimpleAdmin
} }
} }
if (command == null) return; Helper.LogCommand(caller, command?.GetCommandString ?? $"css_map {map}");
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command);
} }
[ConsoleCommand("css_changewsmap", "Change workshop map.")] [ConsoleCommand("css_changewsmap", "Change workshop map.")]
@@ -677,9 +664,7 @@ namespace CS2_SimpleAdmin
Server.ExecuteCommand(issuedCommand); Server.ExecuteCommand(issuedCommand);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
if (command == null) return; Helper.LogCommand(caller, command?.GetCommandString ?? $"css_wsmap {map}");
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command);
} }
[ConsoleCommand("css_cvar", "Change a cvar.")] [ConsoleCommand("css_cvar", "Change a cvar.")]
@@ -702,7 +687,6 @@ namespace CS2_SimpleAdmin
return; return;
} }
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
var value = command.GetArg(2); var value = command.GetArg(2);
@@ -720,7 +704,6 @@ namespace CS2_SimpleAdmin
{ {
var callerName = caller == null ? "Console" : caller.PlayerName; var callerName = caller == null ? "Console" : caller.PlayerName;
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Server.ExecuteCommand(command.ArgString); Server.ExecuteCommand(command.ArgString);

View File

@@ -124,10 +124,8 @@ namespace CS2_SimpleAdmin
} }
} }
if (command == null) return; Helper.LogCommand(caller, $"css_gag {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {time} {reason}");
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, _localizer);
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, DiscordWebhookClientPenalty, _localizer);
Helper.LogCommand(caller, command);
} }
[ConsoleCommand("css_addgag")] [ConsoleCommand("css_addgag")]
@@ -229,7 +227,7 @@ namespace CS2_SimpleAdmin
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time); PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
} }
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, _localizer);
} }
Task.Run(async () => Task.Run(async () =>
@@ -237,7 +235,6 @@ namespace CS2_SimpleAdmin
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time); await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time);
}); });
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
command.ReplyToCommand($"Gagged player with steamid {steamid}."); command.ReplyToCommand($"Gagged player with steamid {steamid}.");
@@ -261,12 +258,12 @@ namespace CS2_SimpleAdmin
return; return;
} }
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command);
var found = false; var found = false;
var pattern = command.GetArg(1); var pattern = command.GetArg(1);
Helper.LogCommand(caller, command);
MuteManager muteManager = new(_database); MuteManager muteManager = new(_database);
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null) if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
@@ -462,12 +459,8 @@ namespace CS2_SimpleAdmin
} }
} }
if (command != null) Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, _localizer);
{ Helper.LogCommand(caller, $"css_mute {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {time} {reason}");
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer);
Helper.LogCommand(caller, command);
}
} }
[ConsoleCommand("css_addmute")] [ConsoleCommand("css_addmute")]
@@ -564,7 +557,7 @@ namespace CS2_SimpleAdmin
} }
} }
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, _localizer);
} }
Task.Run(async () => Task.Run(async () =>
@@ -572,7 +565,6 @@ namespace CS2_SimpleAdmin
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1); await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1);
}); });
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
command.ReplyToCommand($"Muted player with steamid {steamid}."); command.ReplyToCommand($"Muted player with steamid {steamid}.");
@@ -596,7 +588,6 @@ namespace CS2_SimpleAdmin
return; return;
} }
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
var pattern = command.GetArg(1); var pattern = command.GetArg(1);
@@ -793,9 +784,8 @@ namespace CS2_SimpleAdmin
if (command == null) return; if (command == null) return;
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Silence, _localizer);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer); Helper.LogCommand(caller, $"css_silence {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {time} {reason}");
Helper.LogCommand(caller, command);
} }
[ConsoleCommand("css_addsilence")] [ConsoleCommand("css_addsilence")]
@@ -893,7 +883,7 @@ namespace CS2_SimpleAdmin
} }
} }
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Mute, DiscordWebhookClientPenalty, _localizer); Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Silence, _localizer);
} }
} }
Task.Run(async () => Task.Run(async () =>
@@ -901,7 +891,6 @@ namespace CS2_SimpleAdmin
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2); await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2);
}); });
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
command.ReplyToCommand($"Silenced player with steamid {steamid}."); command.ReplyToCommand($"Silenced player with steamid {steamid}.");
@@ -925,7 +914,6 @@ namespace CS2_SimpleAdmin
return; return;
} }
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
var pattern = command.GetArg(1); var pattern = command.GetArg(1);

View File

@@ -17,7 +17,6 @@ namespace CS2_SimpleAdmin
if (command.ArgCount < 2) if (command.ArgCount < 2)
return; return;
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
VoteAnswers.Clear(); VoteAnswers.Clear();
@@ -50,11 +49,10 @@ namespace CS2_SimpleAdmin
Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
if (_localizer != null) player.SendLocalizedMessage(_localizer,
player.SendLocalizedMessage(_localizer, "sa_admin_vote_message",
"sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName,
caller == null ? "Console" : caller.PlayerName, question);
question);
voteMenu.Open(player); voteMenu.Open(player);

View File

@@ -20,8 +20,6 @@ namespace CS2_SimpleAdmin
player.IsValid && player.IsValid &&
player is { PawnIsAlive: true, IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected }).ToList(); player is { PawnIsAlive: true, IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected }).ToList();
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
@@ -63,8 +61,6 @@ namespace CS2_SimpleAdmin
if (targets == null) return; if (targets == null) return;
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, PawnIsAlive: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player is { IsValid: true, PawnIsAlive: true, IsHLTV: false }).ToList();
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
@@ -123,11 +119,7 @@ namespace CS2_SimpleAdmin
player!.Pawn.Value!.Unfreeze(); player!.Pawn.Value!.Unfreeze();
if (command != null) Helper.LogCommand(caller, $"css_unfreeze {player?.PlayerName}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))

View File

@@ -33,16 +33,11 @@ namespace CS2_SimpleAdmin
return; return;
if (!caller.CanTarget(player)) return; if (!caller.CanTarget(player)) return;
callerName ??= caller == null ? "Console" : caller.PlayerName; callerName ??= caller == null ? "Console" : caller.PlayerName;
player?.CommitSuicide(false, true); player?.CommitSuicide(false, true);
if (command != null) Helper.LogCommand(caller, $"css_slay {player?.PlayerName}");
{
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
Helper.LogCommand(caller, command);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -114,11 +109,7 @@ namespace CS2_SimpleAdmin
{ {
if (!caller.CanTarget(player)) return; if (!caller.CanTarget(player)) return;
if (command != null) Helper.LogCommand(caller, $"css_give {player.PlayerName} {weaponName}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
player.GiveNamedItem(weaponName); player.GiveNamedItem(weaponName);
SubGiveWeapon(caller, player, weaponName, callerName); SubGiveWeapon(caller, player, weaponName, callerName);
@@ -173,11 +164,7 @@ namespace CS2_SimpleAdmin
player.RemoveWeapons(); player.RemoveWeapons();
if (command != null) Helper.LogCommand(caller, $"css_strip {player.PlayerName}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -222,11 +209,7 @@ namespace CS2_SimpleAdmin
player.SetHp(health); player.SetHp(health);
if (command != null) Helper.LogCommand(caller, $"css_hp {player.PlayerName} {health}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -272,11 +255,7 @@ namespace CS2_SimpleAdmin
player.SetSpeed((float)speed); player.SetSpeed((float)speed);
if (command != null) Helper.LogCommand(caller, $"css_speed {player?.PlayerName} {speed}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -300,8 +279,6 @@ namespace CS2_SimpleAdmin
var targets = GetTarget(command); var targets = GetTarget(command);
if (targets == null) return; if (targets == null) return;
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
@@ -324,11 +301,7 @@ namespace CS2_SimpleAdmin
player.SetGravity((float)gravity); player.SetGravity((float)gravity);
if (command != null) Helper.LogCommand(caller, $"css_gravity {player?.PlayerName} {gravity}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -374,11 +347,7 @@ namespace CS2_SimpleAdmin
player.SetMoney(money); player.SetMoney(money);
if (command != null) Helper.LogCommand(caller, $"css_money {player?.PlayerName} {money}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -421,17 +390,10 @@ namespace CS2_SimpleAdmin
callerName ??= caller == null ? "Console" : caller.PlayerName; callerName ??= caller == null ? "Console" : caller.PlayerName;
if (player == null) return; if (player == null) return;
if (command != null)
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (!GodPlayers.Contains(player.Slot)) Helper.LogCommand(caller, $"css_god {player.PlayerName}");
{
GodPlayers.Add(player.Slot); if (!GodPlayers.Add(player.Slot))
}
else
{ {
GodPlayers.Remove(player.Slot); GodPlayers.Remove(player.Slot);
} }
@@ -483,12 +445,7 @@ namespace CS2_SimpleAdmin
var callerName = caller == null ? "Console" : caller.PlayerName; var callerName = caller == null ? "Console" : caller.PlayerName;
player!.Pawn.Value!.Slap(damage); player!.Pawn.Value!.Slap(damage);
if (command != null) Helper.LogCommand(caller, $"css_slap {player?.PlayerName} {damage}");
{
Helper.LogCommand(caller, command);
if (_localizer != null)
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (_localizer == null) if (_localizer == null)
return; return;
@@ -599,9 +556,7 @@ namespace CS2_SimpleAdmin
} }
} }
if (command == null) return; Helper.LogCommand(caller, $"css_team {player?.PlayerName} {teamName}");
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
} }
[ConsoleCommand("css_rename", "Rename a player.")] [ConsoleCommand("css_rename", "Rename a player.")]
@@ -620,7 +575,6 @@ namespace CS2_SimpleAdmin
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {
@@ -658,7 +612,6 @@ namespace CS2_SimpleAdmin
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {
@@ -728,11 +681,7 @@ namespace CS2_SimpleAdmin
VirtualFunction.CreateVoid<CCSPlayerController>(player.Handle, VirtualFunction.CreateVoid<CCSPlayerController>(player.Handle,
GameData.GetOffset("CCSPlayerController_Respawn"))(player); GameData.GetOffset("CCSPlayerController_Respawn"))(player);
if (command != null) Helper.LogCommand(caller, $"css_respawn {player?.PlayerName}");
{
Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
}
if (caller != null && SilentPlayers.Contains(caller.Slot)) return; if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
@@ -762,7 +711,6 @@ namespace CS2_SimpleAdmin
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {
@@ -806,7 +754,6 @@ namespace CS2_SimpleAdmin
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
Helper.LogCommand(caller, command); Helper.LogCommand(caller, command);
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{ {

View File

@@ -21,13 +21,59 @@ namespace CS2_SimpleAdmin
public required string Flag { get; set; } public required string Flag { get; set; }
} }
public class DiscordPenaltySetting
{
[JsonPropertyName("name")]
public required string Name { get; set; }
[JsonPropertyName("value")]
public string Value { get; set; } = "";
}
public class Discord public class Discord
{ {
[JsonPropertyName("DiscordLogWebhook")] [JsonPropertyName("DiscordLogWebhook")]
public string DiscordLogWebhook { get; set; } = ""; public string DiscordLogWebhook { get; set; } = "";
[JsonPropertyName("DiscordPenaltyWebhook")] [JsonPropertyName("DiscordPenaltyBanSettings")]
public string DiscordPenaltyWebhook { get; set; } = ""; public DiscordPenaltySetting[] DiscordPenaltyBanSettings { get; set; } =
[
new DiscordPenaltySetting { Name = "Color", Value = "" },
new DiscordPenaltySetting { Name = "Webhook", Value = "" },
new DiscordPenaltySetting { Name = "ThumbnailUrl", Value = "" },
new DiscordPenaltySetting { Name = "ImageUrl", Value = "" },
new DiscordPenaltySetting { Name = "Footer", Value = "" },
];
[JsonPropertyName("DiscordPenaltyMuteSettings")]
public DiscordPenaltySetting[] DiscordPenaltyMuteSettings { get; set; } =
[
new DiscordPenaltySetting { Name = "Color", Value = "" },
new DiscordPenaltySetting { Name = "Webhook", Value = "" },
new DiscordPenaltySetting { Name = "ThumbnailUrl", Value = "" },
new DiscordPenaltySetting { Name = "ImageUrl", Value = "" },
new DiscordPenaltySetting { Name = "Footer", Value = "" },
];
[JsonPropertyName("DiscordPenaltyGagSettings")]
public DiscordPenaltySetting[] DiscordPenaltyGagSettings { get; set; } =
[
new DiscordPenaltySetting { Name = "Color", Value = "" },
new DiscordPenaltySetting { Name = "Webhook", Value = "" },
new DiscordPenaltySetting { Name = "ThumbnailUrl", Value = "" },
new DiscordPenaltySetting { Name = "ImageUrl", Value = "" },
new DiscordPenaltySetting { Name = "Footer", Value = "" },
];
[JsonPropertyName("DiscordPenaltySilenceSettings")]
public DiscordPenaltySetting[] DiscordPenaltySilenceSettings { get; set; } =
[
new DiscordPenaltySetting { Name = "Color", Value = "" },
new DiscordPenaltySetting { Name = "Webhook", Value = "" },
new DiscordPenaltySetting { Name = "ThumbnailUrl", Value = "" },
new DiscordPenaltySetting { Name = "ImageUrl", Value = "" },
new DiscordPenaltySetting { Name = "Footer", Value = "" },
];
} }
public class CustomServerCommandData public class CustomServerCommandData
@@ -111,7 +157,7 @@ namespace CS2_SimpleAdmin
public class CS2_SimpleAdminConfig : BasePluginConfig public class CS2_SimpleAdminConfig : BasePluginConfig
{ {
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 16; [JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 17;
[JsonPropertyName("DatabaseHost")] [JsonPropertyName("DatabaseHost")]
public string DatabaseHost { get; set; } = ""; public string DatabaseHost { get; set; } = "";

View File

@@ -45,8 +45,6 @@ public partial class CS2_SimpleAdmin
} }
} }
_getIpTryCount = 0;
var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}"; var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}";
var hostname = ConVar.Find("hostname")!.StringValue; var hostname = ConVar.Find("hostname")!.StringValue;
@@ -106,6 +104,8 @@ public partial class CS2_SimpleAdmin
} }
}); });
}); });
_getIpTryCount = 0;
} }
[GameEventHandler] [GameEventHandler]
@@ -370,11 +370,17 @@ public partial class CS2_SimpleAdmin
return HookResult.Handled; return HookResult.Handled;
} }
public void OnMapStart(string mapName) private void OnMapStart(string mapName)
{ {
if (Config.ReloadAdminsEveryMapChange && _serverLoaded && ServerId != null) if (Config.ReloadAdminsEveryMapChange && _serverLoaded && ServerId != null)
AddTimer(3.0f, () => ReloadAdmins(null)); AddTimer(3.0f, () => ReloadAdmins(null));
AddTimer(34, () =>
{
if (!_serverLoaded)
OnGameServerSteamAPIActivated();
});
var path = Path.GetDirectoryName(ModuleDirectory); var path = Path.GetDirectoryName(ModuleDirectory);
if (Directory.Exists(path + "/CS2-Tags")) if (Directory.Exists(path + "/CS2-Tags"))
{ {

View File

@@ -1,4 +1,5 @@
using CounterStrikeSharp.API; using System.Drawing;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
@@ -16,6 +17,7 @@ using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Color = Discord.Color;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -176,6 +178,8 @@ namespace CS2_SimpleAdmin
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer[ CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer[
"sa_discord_log_command", "sa_discord_log_command",
playerName, command.GetCommandString]}".Replace("HOSTNAME", hostname).Replace("**", "")); playerName, command.GetCommandString]}".Replace("HOSTNAME", hostname).Replace("**", ""));
SendDiscordLogMessage(caller, command, CS2_SimpleAdmin.DiscordWebhookClientLog, CS2_SimpleAdmin._localizer);
} }
internal static void LogCommand(CCSPlayerController? caller, string command) internal static void LogCommand(CCSPlayerController? caller, string command)
@@ -184,14 +188,17 @@ namespace CS2_SimpleAdmin
return; return;
var playerName = caller?.PlayerName ?? "Console"; var playerName = caller?.PlayerName ?? "Console";
var hostnameCvar = ConVar.Find("hostname");
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"]; var hostname = hostnameCvar?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"];
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer["sa_discord_log_command", CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer["sa_discord_log_command",
playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", "")); playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", ""));
SendDiscordLogMessage(caller, command, CS2_SimpleAdmin.DiscordWebhookClientLog, CS2_SimpleAdmin._localizer);
} }
public static IEnumerable<Embed> GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags) /*public static IEnumerable<Embed> GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags)
{ {
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}"; var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
@@ -221,9 +228,9 @@ namespace CS2_SimpleAdmin
} }
return new List<Embed> { embed.Build() }; return new List<Embed> { embed.Build() };
} }*/
public static void SendDiscordLogMessage(CCSPlayerController? caller, CommandInfo command, DiscordWebhookClient? discordWebhookClientLog, IStringLocalizer? localizer) private static void SendDiscordLogMessage(CCSPlayerController? caller, CommandInfo command, DiscordWebhookClient? discordWebhookClientLog, IStringLocalizer? localizer)
{ {
if (discordWebhookClientLog == null || localizer == null) return; if (discordWebhookClientLog == null || localizer == null) return;
@@ -232,6 +239,15 @@ namespace CS2_SimpleAdmin
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString])); discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
} }
private static void SendDiscordLogMessage(CCSPlayerController? caller, string command, DiscordWebhookClient? discordWebhookClientLog, IStringLocalizer? localizer)
{
if (discordWebhookClientLog == null || localizer == null) return;
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
var callerName = caller != null ? caller.PlayerName : "Console";
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command]));
}
public enum PenaltyType public enum PenaltyType
{ {
Ban, Ban,
@@ -247,17 +263,34 @@ namespace CS2_SimpleAdmin
return time.Days > 0 ? $"{time.Days}d {time.Hours}h {time.Minutes}m" : time.Hours > 0 ? $"{time.Hours}h {time.Minutes}m" : $"{time.Minutes}m"; return time.Days > 0 ? $"{time.Days}d {time.Hours}h {time.Minutes}m" : time.Hours > 0 ? $"{time.Hours}h {time.Minutes}m" : $"{time.Minutes}m";
} }
public static void SendDiscordPenaltyMessage(CCSPlayerController? caller, CCSPlayerController? target, string reason, int duration, PenaltyType penalty, DiscordWebhookClient? discordWebhookClientPenalty, IStringLocalizer? localizer) public static void SendDiscordPenaltyMessage(CCSPlayerController? caller, CCSPlayerController? target, string reason, int duration, PenaltyType penalty, IStringLocalizer? localizer)
{ {
if (discordWebhookClientPenalty == null || localizer == null) return; if (localizer == null) return;
DiscordPenaltySetting[] penaltySetting = penalty switch
{
PenaltyType.Ban => CS2_SimpleAdmin.Instance.Config.Discord.DiscordPenaltyBanSettings,
PenaltyType.Mute => CS2_SimpleAdmin.Instance.Config.Discord.DiscordPenaltyMuteSettings,
PenaltyType.Gag => CS2_SimpleAdmin.Instance.Config.Discord.DiscordPenaltyGagSettings,
PenaltyType.Silence => CS2_SimpleAdmin.Instance.Config.Discord.DiscordPenaltySilenceSettings,
_ => throw new ArgumentOutOfRangeException(nameof(penalty), penalty, null)
};
var webhookUrl = penaltySetting.FirstOrDefault(s => s.Name.Equals("Webhook"))?.Value;
if (string.IsNullOrEmpty(webhookUrl)) return;
var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>"; var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>"; var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
var callerName = caller != null ? caller.PlayerName : "Console"; var callerName = caller != null ? caller.PlayerName : "Console";
var targetName = target != null ? target.PlayerName : localizer["sa_unknown"]; var targetName = target != null ? target.PlayerName : localizer["sa_unknown"];
var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2 : localizer["sa_unknown"]; var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId64.ToString() : localizer["sa_unknown"];
var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer["sa_permanent"]; DateTime futureTime = DateTime.Now.AddMinutes(duration);
long futureUnixTimestamp = new DateTimeOffset(futureTime).ToUnixTimeSeconds();
//var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer["sa_permanent"];
var time = duration != 0 ? $"<t:{futureUnixTimestamp}:R>": localizer["sa_permanent"];
string[] fieldNames = [ string[] fieldNames = [
localizer["sa_player"], localizer["sa_player"],
@@ -265,34 +298,37 @@ namespace CS2_SimpleAdmin
localizer["sa_duration"], localizer["sa_duration"],
localizer["sa_reason"], localizer["sa_reason"],
localizer["sa_admin"]]; localizer["sa_admin"]];
string[] fieldValues = [$"[{targetName}]({targetCommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callerCommunityUrl})"]; string[] fieldValues =
[
$"[{targetName}]({targetCommunityUrl})", $"||{targetSteamId}||", time, reason,
$"[{callerName}]({callerCommunityUrl})"
];
bool[] inlineFlags = [true, true, true, false, false]; bool[] inlineFlags = [true, true, true, false, false];
var hostname = ConVar.Find("hostname")?.StringValue ?? localizer["sa_unknown"]; var hostname = ConVar.Find("hostname")?.StringValue ?? localizer["sa_unknown"];
var colorHex = penaltySetting.FirstOrDefault(s => s.Name.Equals("Color"))?.Value ?? "#FFFFFF";
var color = ColorTranslator.FromHtml(colorHex);
var embed = new EmbedBuilder var embed = new EmbedBuilder
{ {
Color = new Color(color.R, color.G, color.B),
Title = penalty switch Title = penalty switch
{ {
PenaltyType.Ban => localizer["sa_discord_penalty_ban"], PenaltyType.Ban => localizer["sa_discord_penalty_ban"],
PenaltyType.Mute => localizer["sa_discord_penalty_mute"], PenaltyType.Mute => localizer["sa_discord_penalty_mute"],
PenaltyType.Gag => localizer["sa_discord_penalty_gag"], PenaltyType.Gag => localizer["sa_discord_penalty_gag"],
PenaltyType.Silence => localizer["sa_discord_penalty_silence"], PenaltyType.Silence => localizer["sa_discord_penalty_silence"],
_ => localizer["sa_discord_penalty_unknown"], _ => throw new ArgumentOutOfRangeException(nameof(penalty), penalty, null)
}, },
ThumbnailUrl = penaltySetting.FirstOrDefault(s => s.Name.Equals("ThumbnailUrl"))?.Value,
Color = penalty switch ImageUrl = penaltySetting.FirstOrDefault(s => s.Name.Equals("ImageUrl"))?.Value,
Footer = new EmbedFooterBuilder
{ {
PenaltyType.Ban => Color.Red, Text = penaltySetting.FirstOrDefault(s => s.Name.Equals("Footer"))?.Value,
PenaltyType.Mute => Color.Blue,
PenaltyType.Gag => Color.Gold,
PenaltyType.Silence => Color.Green,
_ => Color.Default,
}, },
Description = $"{hostname}", Description = $"{hostname}",
Timestamp = DateTimeOffset.Now,
Timestamp = DateTimeOffset.UtcNow
}; };
for (var i = 0; i < fieldNames.Length; i++) for (var i = 0; i < fieldNames.Length; i++)
@@ -300,7 +336,7 @@ namespace CS2_SimpleAdmin
embed.AddField(fieldNames[i], fieldValues[i], inlineFlags[i]); embed.AddField(fieldNames[i], fieldValues[i], inlineFlags[i]);
} }
discordWebhookClientPenalty.SendMessageAsync(embeds: [embed.Build()]); new DiscordWebhookClient(webhookUrl).SendMessageAsync(embeds: [embed.Build()]);
} }
private static string GenerateMessageDiscord(string message) private static string GenerateMessageDiscord(string message)

View File

@@ -74,63 +74,31 @@ public class PermissionManager(Database.Database database)
ORDER BY sa_admins.player_steamid ORDER BY sa_admins.player_steamid
"""; """;
var activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId })).ToList(); var admins = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId })).ToList();
// Group by player_steamid and aggregate the flags
var groupedPlayers = admins
.GroupBy(r => new { r.player_steamid, r.player_name, r.immunity, r.ends })
.Select(g => (
PlayerSteamId: (string)g.Key.player_steamid,
PlayerName: (string)g.Key.player_name,
Flags: g.Select(r => (string)r.flag).Distinct().ToList(),
Immunity: g.Key.immunity is int i ? i : int.TryParse((string)g.Key.immunity, out var immunity) ? immunity : 0,
Ends: g.Key.ends is DateTime dateTime ? dateTime : (DateTime?)null
))
.ToList();
/*
foreach (var player in groupedPlayers)
{
Console.WriteLine($"Player SteamID: {player.PlayerSteamId}, Name: {player.PlayerName}, Flags: {string.Join(", ", player.Flags)}, Immunity: {player.Immunity}, Ends: {player.Ends}");
}
*/
List<(string, string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = []; List<(string, string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = [];
var currentSteamId = string.Empty;
var currentPlayerName = string.Empty;
List<string> currentFlags = [];
var immunityValue = 0;
DateTime? ends = null;
foreach (var flagInfo in activeFlags) // Add the grouped players to the list
{ filteredFlagsWithImmunity.AddRange(groupedPlayers);
if (flagInfo is not IDictionary<string, object> flagInfoDict)
{
continue;
}
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
!flagInfoDict.TryGetValue("immunity", out var immunityValueObj) ||
!flagInfoDict.TryGetValue("ends", out var endsObj))
{
continue;
}
if (steamIdObj is not string steamId ||
playerNameObj is not string playerName ||
flagObj is not string flag ||
!int.TryParse(immunityValueObj.ToString(), out immunityValue))
{
continue;
}
if (ends != null)
{
if (DateTime.TryParse(endsObj.ToString(), out var parsedEnds))
{
ends = parsedEnds;
}
}
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
{
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
currentFlags = [];
}
currentSteamId = steamId;
currentPlayerName = playerName;
currentFlags.Add(flag);
}
if (!string.IsNullOrEmpty(currentSteamId))
{
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
}
return filteredFlagsWithImmunity; return filteredFlagsWithImmunity;
} }
@@ -343,22 +311,37 @@ public class PermissionManager(Database.Database database)
public async Task CreateAdminsJsonFile() public async Task CreateAdminsJsonFile()
{ {
List<(string identity, string name, List<string> flags, int immunity, DateTime? ends)> allPlayers = await GetAllPlayersFlags(); List<(string identity, string name, List<string> flags, int immunity, DateTime? ends)> allPlayers = await GetAllPlayersFlags();
var validPlayers = allPlayers
.Where(player => SteamID.TryParse(player.identity, out _)) // Filter invalid SteamID
.ToList();
var jsonData = allPlayers /*
foreach (var player in allPlayers)
{
var (steamId, name, flags, immunity, ends) = player;
// Print or process each item
Console.WriteLine($"Player SteamID: {steamId}");
Console.WriteLine($"Player Name: {name}");
Console.WriteLine($"Flags: {string.Join(", ", flags)}");
Console.WriteLine($"Immunity: {immunity}");
Console.WriteLine($"Ends: {(ends.HasValue ? ends.Value.ToString("yyyy-MM-dd HH:mm:ss") : "Never")}");
Console.WriteLine(); // New line for better readability
}
*/
var jsonData = validPlayers
.Select(player => .Select(player =>
{ {
SteamID? steamId = null; SteamID.TryParse(player.identity, out var steamId);
if (!string.IsNullOrEmpty(player.identity) && SteamID.TryParse(player.identity, out var id) && id != null)
{
steamId = id;
}
// Update cache if SteamID is valid and not already cached
if (steamId != null && !AdminCache.ContainsKey(steamId)) if (steamId != null && !AdminCache.ContainsKey(steamId))
{ {
AdminCache.TryAdd(steamId, player.ends); AdminCache.TryAdd(steamId, player.ends);
} }
// Create an anonymous object with player data
return new return new
{ {
playerName = player.name, playerName = player.name,
@@ -366,14 +349,15 @@ public class PermissionManager(Database.Database database)
{ {
player.identity, player.identity,
player.immunity, player.immunity,
flags = player.flags.Where(flag => flag.StartsWith($"@")).ToList(), flags = player.flags.Where(flag => flag.StartsWith("@")).ToList(),
groups = player.flags.Where(flag => flag.StartsWith($"#")).ToList() groups = player.flags.Where(flag => flag.StartsWith("#")).ToList()
} }
}; };
}) })
.ToDictionary(item => item.playerName, item => item.playerData); .ToDictionary(item => item.playerName, item => (object)item.playerData);
var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented); var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "admins.json"); var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "admins.json");
await File.WriteAllTextAsync(filePath, json); await File.WriteAllTextAsync(filePath, json);