- Full AdminManager integration
This commit is contained in:
Dawid Bepierszcz
2024-04-27 01:44:12 +02:00
parent 516d9d9014
commit e1650df72e
4 changed files with 151 additions and 13 deletions

View File

@@ -37,7 +37,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 & Dliix66";
public override string ModuleVersion => "1.4.0b";
public override string ModuleVersion => "1.4.1a";
public CS2_SimpleAdminConfig Config { get; set; } = new();
@@ -124,6 +124,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
Config = config;
Helper.UpdateConfig(config);
if (!Directory.Exists(ModuleDirectory + "/data"))
{
Directory.CreateDirectory(ModuleDirectory + "/data");
}
_localizer = Localizer;
if (!string.IsNullOrEmpty(Config.Discord.DiscordLogWebhook))

View File

@@ -324,8 +324,19 @@ namespace CS2_SimpleAdmin
}
AdminSQLManager _adminManager = new(_database);
_ = _adminManager.GiveAllGroupsFlags();
_ = _adminManager.GiveAllFlags();
Task.Run(async () =>
{
await _adminManager.CrateGroupsJsonFile();
await _adminManager.CreateAdminsJsonFile();
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
});
//_ = _adminManager.GiveAllGroupsFlags();
//_ = _adminManager.GiveAllFlags();
}
[ConsoleCommand("css_stealth")]

View File

@@ -422,8 +422,14 @@ public partial class CS2_SimpleAdmin
}
}
await _adminManager.GiveAllGroupsFlags();
await _adminManager.GiveAllFlags();
//await _adminManager.GiveAllGroupsFlags();
//await _adminManager.GiveAllFlags();
await _adminManager.CrateGroupsJsonFile();
await _adminManager.CreateAdminsJsonFile();
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
});
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}

View File

@@ -2,7 +2,9 @@
using Dapper;
using Microsoft.Extensions.Logging;
using MySqlConnector;
using Newtonsoft.Json;
using System.Collections.Concurrent;
using static Dapper.SqlMapper;
namespace CS2_SimpleAdmin;
@@ -57,7 +59,7 @@ public class AdminSQLManager(Database database)
}
*/
public async Task<List<(string, List<string>, int, DateTime?)>> GetAllPlayersFlags()
public async Task<List<(string, string, List<string>, int, DateTime?)>> GetAllPlayersFlags()
{
DateTime now = DateTime.UtcNow.ToLocalTime();
@@ -66,7 +68,7 @@ public class AdminSQLManager(Database database)
await using MySqlConnection connection = await _database.GetConnectionAsync();
string sql = @"
SELECT sa_admins.player_steamid, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends
SELECT sa_admins.player_steamid, sa_admins.player_name, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends
FROM sa_admins_flags
JOIN sa_admins ON sa_admins_flags.admin_id = sa_admins.id
WHERE (sa_admins.ends IS NULL OR sa_admins.ends > @CurrentTime)
@@ -80,8 +82,9 @@ public class AdminSQLManager(Database database)
return [];
}
List<(string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = [];
List<(string, string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = [];
string currentSteamId = string.Empty;
string currentPlayerName = string.Empty;
List<string> currentFlags = [];
int immunityValue = 0;
DateTime? ends = null;
@@ -94,6 +97,7 @@ public class AdminSQLManager(Database database)
}
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))
@@ -102,6 +106,7 @@ public class AdminSQLManager(Database database)
}
if (steamIdObj is not string steamId ||
playerNameObj is not string playerName ||
flagObj is not string flag ||
!int.TryParse(immunityValueObj.ToString(), out immunityValue))
{
@@ -115,17 +120,18 @@ public class AdminSQLManager(Database database)
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
{
filteredFlagsWithImmunity.Add((currentSteamId, currentFlags, immunityValue, ends));
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
currentFlags = [];
}
currentSteamId = steamId;
currentPlayerName = playerName;
currentFlags.Add(flag);
}
if (!string.IsNullOrEmpty(currentSteamId))
{
filteredFlagsWithImmunity.Add((currentSteamId, currentFlags, immunityValue, ends));
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
}
return filteredFlagsWithImmunity;
@@ -136,6 +142,7 @@ public class AdminSQLManager(Database database)
}
}
/*
public async Task<Dictionary<int, Tuple<List<string>, List<Tuple<string, DateTime?>>, int>>> GetAllGroupsFlags()
{
try
@@ -174,7 +181,7 @@ public class AdminSQLManager(Database database)
}
sql = @"
SELECT a.group_id, a.player_steamid, a.ends, g.immunity
SELECT a.group_id, a.player_steamid, a.ends, g.immunity, g.name
FROM sa_admins a
JOIN sa_groups g ON a.group_id = g.id
WHERE a.group_id IN @groupIds";
@@ -198,9 +205,79 @@ public class AdminSQLManager(Database database)
return [];
}
*/
public async Task<Dictionary<string, (List<string>, int)>> GetAllGroupsData()
{
try
{
await using MySqlConnection connection = await _database.GetConnectionAsync();
string sql = "SELECT group_id FROM sa_groups_servers WHERE server_id = @serverid";
var groupDataSql = connection.Query<int>(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
sql = @"
SELECT g.group_id, sg.name AS group_name, sg.immunity, f.flag
FROM sa_groups_flags f
JOIN sa_groups_servers g ON f.group_id = g.group_id
JOIN sa_groups sg ON sg.id = g.group_id
WHERE g.server_id = @serverid";
var groupData = connection.Query(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
if (groupDataSql.Count == 0 || groupData.Count == 0)
{
return [];
}
var groupInfoDictionary = new Dictionary<string, (List<string>, int)>();
foreach (var row in groupData)
{
var groupName = (string)row.group_name;
var flag = (string)row.flag;
var immunity = (int)row.immunity;
// Check if the group name already exists in the dictionary
if (!groupInfoDictionary.TryGetValue(groupName, out (List<string>, int) value))
{
value = (new List<string>(), immunity);
// If it doesn't exist, add a new entry with an empty list of flags and immunity
groupInfoDictionary[groupName] = value;
}
value.Item1.Add(flag);
}
return groupInfoDictionary;
}
catch { }
return [];
}
public async Task CrateGroupsJsonFile()
{
Dictionary<string, (List<string>, int)> groupsData = await GetAllGroupsData();
var jsonStructure = new Dictionary<string, object>();
foreach (var kvp in groupsData)
{
var groupData = new Dictionary<string, object>
{
["flags"] = kvp.Value.Item1,
["immunity"] = kvp.Value.Item2
};
jsonStructure[kvp.Key] = groupData;
}
string json = JsonConvert.SerializeObject(jsonStructure, Formatting.Indented);
File.WriteAllText(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/groups.json", json);
}
/*
public async Task GiveAllGroupsFlags()
{
Dictionary<int, Tuple<List<string>, List<Tuple<string, DateTime?>>, int>> groupFlags = await GetAllGroupsFlags();
@@ -230,10 +307,11 @@ public class AdminSQLManager(Database database)
}
}
}
*/
/*
public async Task GiveAllFlags()
{
List<(string, List<string>, int, DateTime?)> allPlayers = await GetAllPlayersFlags();
List<(string, string, List<string>, int, DateTime?)> allPlayers = await GetAllPlayersFlags();
foreach (var record in allPlayers)
{
@@ -257,6 +335,44 @@ public class AdminSQLManager(Database database)
}
}
}
*/
public async Task CreateAdminsJsonFile()
{
List<(string identity, string name, List<string> flags, int immunity, DateTime? ends)> allPlayers = await GetAllPlayersFlags();
var jsonData = allPlayers
.Select(player =>
{
SteamID? steamId = null;
if (!string.IsNullOrEmpty(player.identity) && SteamID.TryParse(player.identity, out var id) && id != null)
{
steamId = id;
}
if (steamId != null && !_adminCache.ContainsKey(steamId))
{
_adminCache.TryAdd(steamId, player.ends);
}
return new
{
playerName = player.name,
playerData = new
{
player.identity,
player.immunity,
flags = player.flags.Where(flag => flag.StartsWith("@")).ToList(),
groups = player.flags.Where(flag => flag.StartsWith("#")).ToList()
}
};
})
.ToDictionary(item => item.playerName, item => item.playerData);
string json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
File.WriteAllText(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/admins.json", json);
}
public async Task DeleteAdminBySteamId(string playerSteamId, bool globalDelete = false)
{