- Cache for mysql admins
This commit is contained in:
daffyyyy
2023-12-18 14:29:56 +01:00
parent f95031a3f5
commit 27582b72af
3 changed files with 67 additions and 10 deletions

View File

@@ -1,12 +1,12 @@
using Dapper; using Dapper;
using MySqlConnector; using MySqlConnector;
using System.Collections.Generic;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
internal class AdminSQLManager internal class AdminSQLManager
{ {
private readonly MySqlConnection _dbConnection; private readonly MySqlConnection _dbConnection;
public static readonly Dictionary<string, List<string>> _adminCache = new Dictionary<string, List<string>>();
public AdminSQLManager(string connectionString) public AdminSQLManager(string connectionString)
{ {
@@ -15,21 +15,39 @@ namespace CS2_SimpleAdmin
public async Task<List<dynamic>> GetAdminFlags(string steamId) public async Task<List<dynamic>> GetAdminFlags(string steamId)
{ {
await using var connection = _dbConnection; if (_adminCache.ContainsKey(steamId))
await connection.OpenAsync(); {
Console.WriteLine("From cache");
return _adminCache[steamId].Select(flag => (dynamic)flag).ToList();
}
else
{
await using var connection = _dbConnection;
await connection.OpenAsync();
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
string sql = "SELECT flags FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime)"; string sql = "SELECT flags FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime)";
List<dynamic> activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now })).ToList(); List<dynamic> activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now })).ToList();
return activeFlags; _adminCache[steamId] = new List<string>();
foreach (var flags in activeFlags)
{
if (flags == null) continue;
string flagsValue = flags.flags.ToString();
_adminCache[steamId].Add(flagsValue);
}
}
return _adminCache[steamId].Select(flag => (dynamic)flag).ToList();
} }
public async Task DeleteAdminBySteamId(string playerSteamId) public async Task DeleteAdminBySteamId(string playerSteamId)
{ {
if (string.IsNullOrEmpty(playerSteamId)) return; if (string.IsNullOrEmpty(playerSteamId)) return;
if (_adminCache.ContainsKey(playerSteamId))
_adminCache.Remove(playerSteamId);
await using var connection = _dbConnection; await using var connection = _dbConnection;
await connection.OpenAsync(); await connection.OpenAsync();

View File

@@ -31,7 +31,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin"; public override string ModuleName => "CS2-SimpleAdmin";
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"; public override string ModuleAuthor => "daffyy";
public override string ModuleVersion => "1.2.4a"; public override string ModuleVersion => "1.2.4b";
public CS2_SimpleAdminConfig Config { get; set; } = new(); public CS2_SimpleAdminConfig Config { get; set; } = new();

View File

@@ -222,7 +222,37 @@ public partial class CS2_SimpleAdmin
} }
} }
if (activeFlags != null && activeFlags.Count > 0) if (AdminSQLManager._adminCache.ContainsKey(playerInfo.SteamId!))
{
AddTimer(10, () =>
{
foreach (var flagsValue in AdminSQLManager._adminCache[playerInfo.SteamId!])
{
if (!string.IsNullOrEmpty(flagsValue))
{
string[] _flags = flagsValue.Split(',');
if (player == null) return;
foreach (var _flag in _flags)
{
if (_flag.StartsWith("@"))
{
AdminManager.AddPlayerPermissions(player, _flag);
}
if (_flag.StartsWith("#"))
{
AdminManager.AddPlayerToGroup(player, _flag);
}
}
}
}
});
}
/*
if (_adminManager._adminCache != null && _adminManager._adminCache.Count > 0)
{ {
foreach (var flags in activeFlags) foreach (var flags in activeFlags)
{ {
@@ -250,7 +280,8 @@ public partial class CS2_SimpleAdmin
}); });
} }
} }
} }
*/
}); });
}); });
} }
@@ -282,6 +313,14 @@ public partial class CS2_SimpleAdmin
GodPlayers.Remove((int)player.Index); GodPlayers.Remove((int)player.Index);
} }
if (player.AuthorizedSteamID != null)
{
if (AdminSQLManager._adminCache.ContainsKey(player.AuthorizedSteamID.SteamId64.ToString()))
{
AdminSQLManager._adminCache.Remove(player.AuthorizedSteamID.SteamId64.ToString());
}
}
if (TagsDetected) if (TagsDetected)
NativeAPI.IssueServerCommand($"css_tag_unmute {player!.Index.ToString()}"); NativeAPI.IssueServerCommand($"css_tag_unmute {player!.Index.ToString()}");
} }