mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-18 18:49:23 +00:00
1.4.3c
- Fixed rare problems with expiring bans - More checks for `BanType` - Minor changes about validating players - Added `css_players -duplicate` to list players with same ip address
This commit is contained in:
@@ -10,14 +10,14 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0)
|
||||
{
|
||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time);
|
||||
|
||||
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||
try
|
||||
{
|
||||
const string sql =
|
||||
"INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||
|
||||
await connection.ExecuteAsync(sql, new
|
||||
{
|
||||
@@ -41,7 +41,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
if (string.IsNullOrEmpty(playerSteamId)) return;
|
||||
|
||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -70,7 +70,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
if (string.IsNullOrEmpty(playerIp)) return;
|
||||
|
||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
||||
DateTime futureTime = now.AddMinutes(time);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -108,7 +108,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
|
||||
int banCount;
|
||||
|
||||
DateTime currentTime = DateTime.Now.ToLocalTime();
|
||||
DateTime currentTime = DateTime.UtcNow.ToLocalTime();
|
||||
|
||||
try
|
||||
{
|
||||
@@ -172,12 +172,14 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
|
||||
if (!string.IsNullOrEmpty(player.IpAddress))
|
||||
if (config.BanType > 0 && !string.IsNullOrEmpty(player.IpAddress))
|
||||
{
|
||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||
new
|
||||
{
|
||||
PlayerSteamID = player.SteamId, PlayerIP = player.IpAddress, serverid = CS2_SimpleAdmin.ServerId
|
||||
PlayerSteamID = player.SteamId,
|
||||
PlayerIP = player.IpAddress,
|
||||
serverid = CS2_SimpleAdmin.ServerId
|
||||
});
|
||||
}
|
||||
else
|
||||
@@ -185,7 +187,9 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||
new
|
||||
{
|
||||
PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value, serverid = CS2_SimpleAdmin.ServerId
|
||||
PlayerSteamID = player.SteamId,
|
||||
PlayerIP = DBNull.Value,
|
||||
serverid = CS2_SimpleAdmin.ServerId
|
||||
});
|
||||
}
|
||||
|
||||
@@ -264,6 +268,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
{
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
string sql;
|
||||
bool checkIpBans = config.BanType > 0;
|
||||
|
||||
if (config.MultiServerMode)
|
||||
{
|
||||
@@ -280,7 +285,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
if (!UserId.HasValue) continue;
|
||||
|
||||
var banCount = 0;
|
||||
if (!string.IsNullOrEmpty(IpAddress))
|
||||
if (checkIpBans && !string.IsNullOrEmpty(IpAddress))
|
||||
{
|
||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||
new { PlayerSteamID = SteamID, PlayerIP = IpAddress, serverid = CS2_SimpleAdmin.ServerId });
|
||||
@@ -306,7 +311,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
public async Task ExpireOldBans()
|
||||
{
|
||||
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||
|
||||
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
try
|
||||
{
|
||||
@@ -349,7 +354,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
||||
|
||||
if (config.ExpireOldIpBans > 0)
|
||||
{
|
||||
var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans).ToLocalTime();
|
||||
var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans);
|
||||
sql = config.MultiServerMode ? """
|
||||
|
||||
UPDATE sa_bans
|
||||
|
||||
@@ -10,7 +10,7 @@ internal class MuteManager(Database.Database database)
|
||||
if (player.SteamId == null) return;
|
||||
|
||||
var now = DateTime.UtcNow.ToLocalTime();
|
||||
var futureTime = now.AddMinutes(time).ToLocalTime();
|
||||
var futureTime = now.AddMinutes(time);
|
||||
|
||||
var muteType = type switch
|
||||
{
|
||||
@@ -24,7 +24,7 @@ internal class MuteManager(Database.Database database)
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
const string sql =
|
||||
"INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||
|
||||
await connection.ExecuteAsync(sql, new
|
||||
{
|
||||
@@ -49,7 +49,7 @@ internal class MuteManager(Database.Database database)
|
||||
|
||||
|
||||
var now = DateTime.UtcNow.ToLocalTime();
|
||||
var futureTime = now.AddMinutes(time).ToLocalTime();
|
||||
var futureTime = now.AddMinutes(time);
|
||||
|
||||
var muteType = type switch
|
||||
{
|
||||
@@ -62,7 +62,7 @@ internal class MuteManager(Database.Database database)
|
||||
{
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||
|
||||
await connection.ExecuteAsync(sql, new
|
||||
{
|
||||
@@ -95,7 +95,7 @@ internal class MuteManager(Database.Database database)
|
||||
try
|
||||
{
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
var currentTime = DateTime.Now.ToLocalTime();
|
||||
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||
string sql;
|
||||
|
||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||
@@ -177,7 +177,7 @@ internal class MuteManager(Database.Database database)
|
||||
const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId";
|
||||
var sqlInsertUnmute = "INSERT INTO sa_unmutes (mute_id, admin_id, reason) VALUES (@muteId, @adminId, @reason); SELECT LAST_INSERT_ID();";
|
||||
|
||||
var sqlAdminId = await connection.ExecuteScalarAsync<int?>(sqlAdmin, new { adminSteamId });
|
||||
var sqlAdminId = await connection.ExecuteScalarAsync<int?>(sqlAdmin, new { adminSteamId });
|
||||
var adminId = sqlAdminId ?? 0;
|
||||
|
||||
foreach (var mute in mutesList)
|
||||
@@ -217,7 +217,7 @@ internal class MuteManager(Database.Database database)
|
||||
? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid"
|
||||
: "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
||||
|
||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime(), serverid = CS2_SimpleAdmin.ServerId });
|
||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.UtcNow.ToLocalTime(), serverid = CS2_SimpleAdmin.ServerId });
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
using CounterStrikeSharp.API.Modules.Entities;
|
||||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Modules.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MySqlConnector;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Concurrent;
|
||||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Modules.Admin;
|
||||
|
||||
namespace CS2_SimpleAdmin;
|
||||
|
||||
@@ -90,7 +89,7 @@ public class PermissionManager(Database.Database database)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
|
||||
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
|
||||
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
|
||||
@@ -115,7 +114,7 @@ public class PermissionManager(Database.Database database)
|
||||
ends = parsedEnds;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
|
||||
{
|
||||
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
|
||||
@@ -125,7 +124,7 @@ public class PermissionManager(Database.Database database)
|
||||
currentSteamId = steamId;
|
||||
currentPlayerName = playerName;
|
||||
currentFlags.Add(flag);
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(currentSteamId))
|
||||
@@ -400,7 +399,7 @@ public class PermissionManager(Database.Database database)
|
||||
DateTime? futureTime;
|
||||
|
||||
if (time != 0)
|
||||
futureTime = now.ToLocalTime().AddMinutes(time);
|
||||
futureTime = now.AddMinutes(time);
|
||||
else
|
||||
futureTime = null;
|
||||
|
||||
@@ -410,7 +409,7 @@ public class PermissionManager(Database.Database database)
|
||||
|
||||
// Insert admin into sa_admins table
|
||||
const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " +
|
||||
"VALUES (@playerSteamid, @playerName, @immunity, @ends, @created, @serverid); SELECT LAST_INSERT_ID();";
|
||||
"VALUES (@playerSteamid, @playerName, @immunity, @ends, @created, @serverid); SELECT LAST_INSERT_ID();";
|
||||
|
||||
var adminId = await connection.ExecuteScalarAsync<int>(insertAdminSql, new
|
||||
{
|
||||
@@ -442,7 +441,7 @@ public class PermissionManager(Database.Database database)
|
||||
}
|
||||
|
||||
const string insertFlagsSql = "INSERT INTO `sa_admins_flags` (`admin_id`, `flag`) " +
|
||||
"VALUES (@adminId, @flag)";
|
||||
"VALUES (@adminId, @flag)";
|
||||
|
||||
await connection.ExecuteAsync(insertFlagsSql, new
|
||||
{
|
||||
@@ -464,14 +463,14 @@ public class PermissionManager(Database.Database database)
|
||||
|
||||
public async Task AddGroup(string groupName, List<string> flagsList, int immunity = 0, bool globalGroup = false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
||||
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
||||
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
try
|
||||
{
|
||||
// Insert group into sa_groups table
|
||||
const string insertGroup = "INSERT INTO `sa_groups` (`name`, `immunity`) " +
|
||||
"VALUES (@groupName, @immunity); SELECT LAST_INSERT_ID();";
|
||||
"VALUES (@groupName, @immunity); SELECT LAST_INSERT_ID();";
|
||||
var groupId = await connection.ExecuteScalarAsync<int>(insertGroup, new
|
||||
{
|
||||
groupName,
|
||||
@@ -482,7 +481,7 @@ public class PermissionManager(Database.Database database)
|
||||
foreach (var flag in flagsList)
|
||||
{
|
||||
const string insertFlagsSql = "INSERT INTO `sa_groups_flags` (`group_id`, `flag`) " +
|
||||
"VALUES (@groupId, @flag)";
|
||||
"VALUES (@groupId, @flag)";
|
||||
|
||||
await connection.ExecuteAsync(insertFlagsSql, new
|
||||
{
|
||||
@@ -492,10 +491,10 @@ public class PermissionManager(Database.Database database)
|
||||
}
|
||||
|
||||
const string insertGroupServer = "INSERT INTO `sa_groups_servers` (`group_id`, `server_id`) " +
|
||||
"VALUES (@groupId, @server_id)";
|
||||
|
||||
"VALUES (@groupId, @server_id)";
|
||||
|
||||
await connection.ExecuteAsync(insertGroupServer, new { groupId, server_id = globalGroup ? null : CS2_SimpleAdmin.ServerId });
|
||||
|
||||
|
||||
await Server.NextFrameAsync(() =>
|
||||
{
|
||||
CS2_SimpleAdmin.Instance.ReloadAdmins(null);
|
||||
@@ -531,7 +530,7 @@ public class PermissionManager(Database.Database database)
|
||||
await using var connection = await database.GetConnectionAsync();
|
||||
|
||||
const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime() });
|
||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.UtcNow.ToLocalTime() });
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
@@ -30,11 +30,11 @@ public class PlayerPenaltyManager
|
||||
{
|
||||
if (!existingDict.TryGetValue(penaltyType, out var value))
|
||||
{
|
||||
value = new List<(DateTime, int)>();
|
||||
existingDict[penaltyType] = value;
|
||||
value = new List<(DateTime, int)>();
|
||||
existingDict[penaltyType] = value;
|
||||
}
|
||||
|
||||
value.Add((endDateTime, durationSeconds));
|
||||
value.Add((endDateTime, durationSeconds));
|
||||
return existingDict;
|
||||
});
|
||||
}
|
||||
@@ -44,7 +44,7 @@ public class PlayerPenaltyManager
|
||||
//Console.WriteLine($"Checking penalties for player with slot {slot} and penalty type {penaltyType}");
|
||||
|
||||
if (!Penalties.TryGetValue(slot, out var penaltyDict) ||
|
||||
!penaltyDict.TryGetValue(penaltyType, out var penaltiesList)) return false;
|
||||
!penaltyDict.TryGetValue(penaltyType, out var penaltiesList)) return false;
|
||||
//Console.WriteLine($"Found penalties for player with slot {slot} and penalty type {penaltyType}");
|
||||
|
||||
var now = DateTime.UtcNow.ToLocalTime();
|
||||
@@ -83,7 +83,7 @@ public class PlayerPenaltyManager
|
||||
public static List<(DateTime EndDateTime, int Duration)> GetPlayerPenalties(int slot, PenaltyType penaltyType)
|
||||
{
|
||||
if (Penalties.TryGetValue(slot, out var penaltyDict) &&
|
||||
penaltyDict.TryGetValue(penaltyType, out var penaltiesList))
|
||||
penaltyDict.TryGetValue(penaltyType, out var penaltiesList))
|
||||
{
|
||||
return penaltiesList;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user