- Minor changes
This commit is contained in:
Dawid Bepierszcz
2024-04-28 02:14:50 +02:00
parent 806b5038ca
commit aefa6c6355
28 changed files with 1268 additions and 1351 deletions

209
Helper.cs
View File

@@ -47,28 +47,26 @@ namespace CS2_SimpleAdmin
public static List<CCSPlayerController> GetValidPlayers()
{
return Utilities.GetPlayers().FindAll(p => p != null && p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV);
return Utilities.GetPlayers().FindAll(p => p?.IsValid == true && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false });
}
public static List<CCSPlayerController> GetValidPlayersWithBots()
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
{
return Utilities.GetPlayers().FindAll(p =>
p != null && p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV ||
p != null && p.IsValid && p.Connected == PlayerConnectedState.PlayerConnected && p.IsBot && !p.IsHLTV
p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false } ||
p is { IsValid: true, Connected: PlayerConnectedState.PlayerConnected, IsBot: true, IsHLTV: false }
);
}
public static bool IsValidSteamID64(string input)
public static bool IsValidSteamId64(string input)
{
string pattern = @"^\d{17}$";
const string pattern = @"^\d{17}$";
return Regex.IsMatch(input, pattern);
}
public static bool IsValidIP(string input)
public static bool IsValidIp(string input)
{
string pattern = @"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
const string pattern = @"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
return Regex.IsMatch(input, pattern);
}
@@ -81,26 +79,24 @@ namespace CS2_SimpleAdmin
return;
}
if (flags != null)
if (flags == null) return;
foreach (var flag in flags)
{
foreach (var flag in flags)
if (string.IsNullOrEmpty(flag)) continue;
if (flag.StartsWith($"@"))
{
if (!string.IsNullOrEmpty(flag))
{
if (flag.StartsWith("@"))
{
//Console.WriteLine($"Adding permission {flag} to SteamID {steamid}");
AdminManager.AddPlayerPermissions(steamid, flag);
}
else if (flag.StartsWith("#"))
{
//Console.WriteLine($"Adding SteamID {steamid} to group {flag}");
AdminManager.AddPlayerToGroup(steamid, flag);
}
}
//Console.WriteLine($"Adding permission {flag} to SteamID {steamid}");
AdminManager.AddPlayerPermissions(steamid, flag);
}
else if (flag.StartsWith($"#"))
{
//Console.WriteLine($"Adding SteamID {steamid} to group {flag}");
AdminManager.AddPlayerToGroup(steamid, flag);
}
AdminManager.SetPlayerImmunity(steamid, (uint)immunity);
}
AdminManager.SetPlayerImmunity(steamid, (uint)immunity);
}
catch (Exception)
{
@@ -112,7 +108,7 @@ namespace CS2_SimpleAdmin
{
if (!string.IsNullOrEmpty(reason))
{
int escapeChars = reason.IndexOfAny(new char[] { ';', '|' });
var escapeChars = reason.IndexOfAny([';', '|']);
if (escapeChars != -1)
{
@@ -125,7 +121,7 @@ namespace CS2_SimpleAdmin
public static void PrintToCenterAll(string message)
{
Utilities.GetPlayers().Where(p => p is not null && p.IsValid && !p.IsBot && !p.IsHLTV).ToList().ForEach(controller =>
Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false }).ToList().ForEach(controller =>
{
controller.PrintToCenter(message);
});
@@ -142,25 +138,26 @@ namespace CS2_SimpleAdmin
internal static void LogCommand(CCSPlayerController? caller, CommandInfo command)
{
if (CS2_SimpleAdmin.Instance == null || CS2_SimpleAdmin._localizer == null)
if (CS2_SimpleAdmin._localizer == null)
return;
string playerName = caller?.PlayerName ?? "Console";
var playerName = caller?.PlayerName ?? "Console";
string? hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"];
var hostname = ConVar.Find("hostname")!.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.GetCommandString]}".Replace("HOSTNAME", hostname).Replace("**", ""));
}
internal static void LogCommand(CCSPlayerController? caller, string command)
{
if (CS2_SimpleAdmin.Instance == null || CS2_SimpleAdmin._localizer == null)
if (CS2_SimpleAdmin._localizer == null)
return;
string playerName = caller?.PlayerName ?? "Console";
var playerName = caller?.PlayerName ?? "Console";
string? hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer?["sa_discord_log_command",
playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", ""));
@@ -168,8 +165,8 @@ namespace CS2_SimpleAdmin
public static IEnumerable<Embed> GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags)
{
string? hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
string? address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
description = description.Replace("{hostname}", hostname ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
description = description.Replace("{address}", address ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
@@ -182,7 +179,7 @@ namespace CS2_SimpleAdmin
Color = color,
};
for (int i = 0; i < fieldNames.Length; i++)
for (var i = 0; i < fieldNames.Length; i++)
{
fieldValues[i] = fieldValues[i].Replace("{hostname}", hostname ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
fieldValues[i] = fieldValues[i].Replace("{address}", address ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
@@ -200,12 +197,11 @@ namespace CS2_SimpleAdmin
public static void SendDiscordLogMessage(CCSPlayerController? caller, CommandInfo command, DiscordWebhookClient? discordWebhookClientLog, IStringLocalizer? localizer)
{
if (discordWebhookClientLog != null && localizer != null)
{
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
string callerName = caller != null ? caller.PlayerName : "Console";
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
}
if (discordWebhookClientLog == null || localizer == null) return;
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
var callerName = caller != null ? caller.PlayerName : "Console";
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
}
public enum PenaltyType
@@ -216,74 +212,73 @@ namespace CS2_SimpleAdmin
Silence,
}
public static string ConvertMinutesToTime(int minutes)
private static string ConvertMinutesToTime(int minutes)
{
TimeSpan time = TimeSpan.FromMinutes(minutes);
var time = TimeSpan.FromMinutes(minutes);
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)
{
if (discordWebhookClientPenalty != null && localizer != null)
if (discordWebhookClientPenalty == null || localizer == null) return;
var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
var callerName = caller != null ? caller.PlayerName : "Console";
var targetName = target != null ? target.PlayerName : localizer?["sa_unknown"] ?? "Unknown";
var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2.ToString() : localizer?["sa_unknown"] ?? "Unknown";
var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer?["sa_permanent"] ?? "Permanent";
string[] fieldNames = [
localizer?["sa_player"] ?? "Player:",
localizer?["sa_steamid"] ?? "SteamID:",
localizer?["sa_duration"] ?? "Duration:",
localizer?["sa_reason"] ?? "Reason:",
localizer?["sa_admin"] ?? "Admin:"];
string[] fieldValues = [$"[{targetName}]({targetCommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callerCommunityUrl})"];
bool[] inlineFlags = [true, true, true, false, false];
var hostname = ConVar.Find("hostname")!.StringValue ?? localizer?["sa_unknown"] ?? "Unknown";
var embed = new EmbedBuilder
{
string callercommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
string targetcommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
string callerName = caller != null ? caller.PlayerName : "Console";
string targetName = target != null ? target.PlayerName : localizer?["sa_unknown"] ?? "Unknown";
string targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2.ToString() : localizer?["sa_unknown"] ?? "Unknown";
string time = duration != 0 ? ConvertMinutesToTime(duration) : localizer?["sa_permanent"] ?? "Permanent";
string[] fieldNames = [
localizer?["sa_player"] ?? "Player:",
localizer?["sa_steamid"] ?? "SteamID:",
localizer?["sa_duration"] ?? "Duration:",
localizer?["sa_reason"] ?? "Reason:",
localizer?["sa_admin"] ?? "Admin:"];
string[] fieldValues = [$"[{targetName}]({targetcommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callercommunityUrl})"];
bool[] inlineFlags = [true, true, true, false, false];
string? hostname = ConVar.Find("hostname")!.StringValue ?? localizer?["sa_unknown"] ?? "Unknown";
var embed = new EmbedBuilder
Title = penalty switch
{
Title = penalty switch
{
PenaltyType.Ban => localizer?["sa_discord_penalty_ban"] ?? "Ban registrered",
PenaltyType.Mute => localizer?["sa_discord_penalty_mute"] ?? "Mute registrered",
PenaltyType.Gag => localizer?["sa_discord_penalty_gag"] ?? "Gag registrered",
PenaltyType.Silence => localizer?["sa_discord_penalty_silence"] ?? "Silence registrered",
_ => localizer?["sa_discord_penalty_unknown"] ?? "Unknown registrered",
},
PenaltyType.Ban => localizer?["sa_discord_penalty_ban"] ?? "Ban registrered",
PenaltyType.Mute => localizer?["sa_discord_penalty_mute"] ?? "Mute registrered",
PenaltyType.Gag => localizer?["sa_discord_penalty_gag"] ?? "Gag registrered",
PenaltyType.Silence => localizer?["sa_discord_penalty_silence"] ?? "Silence registrered",
_ => localizer?["sa_discord_penalty_unknown"] ?? "Unknown registrered",
},
Color = penalty switch
{
PenaltyType.Ban => Color.Red,
PenaltyType.Mute => Color.Blue,
PenaltyType.Gag => Color.Gold,
PenaltyType.Silence => Color.Green,
_ => Color.Default,
},
Description = $"{hostname}",
Timestamp = DateTimeOffset.UtcNow
};
for (int i = 0; i < fieldNames.Length; i++)
Color = penalty switch
{
embed.AddField(fieldNames[i], fieldValues[i], inlineFlags[i]);
}
PenaltyType.Ban => Color.Red,
PenaltyType.Mute => Color.Blue,
PenaltyType.Gag => Color.Gold,
PenaltyType.Silence => Color.Green,
_ => Color.Default,
},
discordWebhookClientPenalty.SendMessageAsync(embeds: [embed.Build()]);
Description = $"{hostname}",
Timestamp = DateTimeOffset.UtcNow
};
for (var i = 0; i < fieldNames.Length; i++)
{
embed.AddField(fieldNames[i], fieldValues[i], inlineFlags[i]);
}
discordWebhookClientPenalty.SendMessageAsync(embeds: [embed.Build()]);
}
public static string GenerateMessageDiscord(string message)
private static string GenerateMessageDiscord(string message)
{
string? hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
string? address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
message = message.Replace("HOSTNAME", hostname);
message = message.Replace("ADDRESS", address);
@@ -304,7 +299,12 @@ namespace CS2_SimpleAdmin
config.Version = newCfgVersion;
// serialize the updated config back to json
var updatedJsonContent = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
var updatedJsonContent = JsonSerializer.Serialize(config,
new JsonSerializerOptions
{
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
File.WriteAllText(CfgPath, updatedJsonContent);
}
@@ -316,22 +316,21 @@ namespace CS2_SimpleAdmin
if (caller != null && caller.IsValid == false)
caller = null;
string callerName = caller == null ? "Console" : caller.PlayerName;
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
var callerName = caller == null ? "Console" : caller.PlayerName;
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
CS2_SimpleAdmin._discordWebhookClientLog.SendMessageAsync(GenerateMessageDiscord(CS2_SimpleAdmin._localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", commandString]));
}
}
public class SchemaString<SchemaClass> : NativeObject where SchemaClass : NativeObject
public class SchemaString<SchemaClass>(SchemaClass instance, string member)
: NativeObject(Schema.GetSchemaValue<nint>(instance.Handle, typeof(SchemaClass).Name!, member))
where SchemaClass : NativeObject
{
public SchemaString(SchemaClass instance, string member) : base(Schema.GetSchemaValue<nint>(instance.Handle, typeof(SchemaClass).Name!, member))
{ }
public unsafe void Set(string str)
{
byte[] bytes = SchemaString<SchemaClass>.GetStringBytes(str);
var bytes = SchemaString<SchemaClass>.GetStringBytes(str);
for (int i = 0; i < bytes.Length; i++)
for (var i = 0; i < bytes.Length; i++)
{
Unsafe.Write((void*)(Handle.ToInt64() + i), bytes[i]);
}