- 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 MySqlConnector;
using System.Collections.Generic;
namespace CS2_SimpleAdmin
{
internal class AdminSQLManager
{
private readonly MySqlConnection _dbConnection;
public static readonly Dictionary<string, List<string>> _adminCache = new Dictionary<string, List<string>>();
public AdminSQLManager(string connectionString)
{
@@ -14,6 +14,13 @@ namespace CS2_SimpleAdmin
}
public async Task<List<dynamic>> GetAdminFlags(string steamId)
{
if (_adminCache.ContainsKey(steamId))
{
Console.WriteLine("From cache");
return _adminCache[steamId].Select(flag => (dynamic)flag).ToList();
}
else
{
await using var connection = _dbConnection;
await connection.OpenAsync();
@@ -23,13 +30,24 @@ namespace CS2_SimpleAdmin
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();
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)
{
if (string.IsNullOrEmpty(playerSteamId)) return;
if (_adminCache.ContainsKey(playerSteamId))
_adminCache.Remove(playerSteamId);
await using var connection = _dbConnection;
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 ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
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();

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)
{
@@ -251,6 +281,7 @@ public partial class CS2_SimpleAdmin
}
}
}
*/
});
});
}
@@ -282,6 +313,14 @@ public partial class CS2_SimpleAdmin
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)
NativeAPI.IssueServerCommand($"css_tag_unmute {player!.Index.ToString()}");
}