Warns - last?

- Warn list + unwarn
This commit is contained in:
Dawid Bepierszcz
2024-08-12 01:57:30 +02:00
parent 4ef07c8bf7
commit f56e3f6fe9
19 changed files with 139 additions and 124 deletions

View File

@@ -11,7 +11,7 @@ using System.Collections.Concurrent;
namespace CS2_SimpleAdmin;
[MinimumApiVersion(246)]
[MinimumApiVersion(253)]
public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdminConfig>
{
public static CS2_SimpleAdmin Instance { get; private set; } = new();
@@ -41,7 +41,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.5.1a";
public override string ModuleVersion => "1.5.2a";
public CS2_SimpleAdminConfig Config { get; set; } = new();

View File

@@ -10,9 +10,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.247" />
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.255" />
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Discord.Net.Webhook" Version="3.15.2" />
<PackageReference Include="Discord.Net.Webhook" Version="3.15.3" />
<PackageReference Include="MySqlConnector" Version="2.3.7" />
<PackageReference Include="Newtonsoft.Json" Version="*" />
</ItemGroup>

View File

@@ -572,119 +572,4 @@ public partial class CS2_SimpleAdmin
Helper.LogCommand(caller, $"css_warn {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {time} {reason}");
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Warn, _localizer);
}
/*[ConsoleCommand("css_addwarn")]
[RequiresPermissions("@css/ban")]
[CommandHelper(minArgs: 1, usage: "<steamid> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
public void OnAddWarnCommand(CCSPlayerController? caller, CommandInfo command)
{
if (_database == null) return;
var callerName = caller == null ? "Console" : caller.PlayerName;
if (command.ArgCount < 2)
return;
if (string.IsNullOrEmpty(command.GetArg(1))) return;
if (!Helper.ValidateSteamId(command.GetArg(1), out var steamId) || steamId == null)
{
command.ReplyToCommand($"Invalid SteamID64.");
return;
}
var steamid = steamId.SteamId64.ToString();
var reason = _localizer?["sa_unknown"] ?? "Unknown";
int.TryParse(command.GetArg(2), out var time);
if (CheckValidBan(caller, time) == false)
return;
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
reason = command.GetArg(3);
var adminInfo = new PlayerInfo
{
SteamId = caller?.SteamID.ToString(),
Name = caller?.PlayerName,
IpAddress = caller?.IpAddress?.Split(":")[0]
};
var matches = Helper.GetPlayerFromSteamid64(steamid);
if (matches.Count == 1)
{
var player = matches.FirstOrDefault();
if (player != null && player.IsValid)
{
if (!caller!.CanTarget(player))
{
command.ReplyToCommand($"{player.PlayerName} is more powerful than you!");
return;
}
player.Pawn.Value!.Freeze();
if (player.UserId.HasValue)
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
if (time == 0)
{
if (!player.IsBot && !player.IsHLTV)
using (new WithTemporaryCulture(player.GetLanguage()))
{
player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
}
if (caller == null || !SilentPlayers.Contains(caller.Slot))
{
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{
if (_localizer != null)
controller.SendLocalizedMessage(_localizer,
"sa_admin_ban_message_perm",
callerName,
player.PlayerName ?? string.Empty,
reason);
}
}
}
else
{
if (player is { IsBot: false, IsHLTV: false })
using (new WithTemporaryCulture(player.GetLanguage()))
{
player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
}
if (caller == null || !SilentPlayers.Contains(caller.Slot))
{
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{
if (_localizer != null)
controller.SendLocalizedMessage(_localizer,
"sa_admin_ban_message_time",
callerName,
player.PlayerName ?? string.Empty,
reason,
time);
}
}
}
}
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _localizer);
}
Task.Run(async () =>
{
BanManager banManager = new(_database, Config);
await banManager.AddBanBySteamid(steamid, adminInfo, reason, time);
});
Helper.LogCommand(caller, command);
//Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer);
if (UnlockedCommands)
Server.ExecuteCommand($"banid 2 {steamId.SteamId3}");
command.ReplyToCommand($"Banned player with steamid {steamid}.");
}*/
}

View File

@@ -6,6 +6,7 @@ using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Menu;
using CounterStrikeSharp.API.Modules.Utils;
using CS2_SimpleAdmin.Menus;
using Microsoft.Extensions.Logging;
@@ -425,6 +426,63 @@ namespace CS2_SimpleAdmin
});
});
}
[ConsoleCommand("css_warns")]
[CommandHelper(minArgs: 1, usage: "<#userid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
[RequiresPermissions("@css/kick")]
public void OnWarnsCommand(CCSPlayerController? caller, CommandInfo command)
{
if (_database == null) return;
var targets = GetTarget(command);
if (targets == null) return;
Helper.LogCommand(caller, command);
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
if (playersToTarget.Count > 1)
return;
Database.Database database = new(_dbConnectionString);
WarnManager warnManager = new(database);
playersToTarget.ForEach(player =>
{
if (!player.UserId.HasValue) return;
if (!caller!.CanTarget(player)) return;
var steamid = player.SteamID.ToString();
BaseMenu warnsMenu = Config.UseChatMenu
? new ChatMenu(_localizer!["sa_admin_warns_menu_title", player.PlayerName])
: new CenterHtmlMenu(_localizer!["sa_admin_warns_menu_title", player.PlayerName], Instance);
Task.Run(async () =>
{
var warnsList = await warnManager.GetPlayerWarns(steamid, false);
var sortedWarns = warnsList
.OrderBy(warn => (string)warn.status == "ACTIVE" ? 0 : 1)
.ThenByDescending(warn => (int)warn.id)
.ToList();
sortedWarns.ForEach(w =>
{
warnsMenu.AddMenuOption($"[{((string)w.status == "ACTIVE" ? $"{ChatColors.LightRed}X" : $"{ChatColors.Lime}")}{ChatColors.Default}] {(string)w.reason}",
(controller, option) =>
{
_ = warnManager.UnwarnPlayer(steamid, (int)w.id);
player.PrintToChat(_localizer["sa_admin_warns_unwarn", player.PlayerName, (string)w.reason]);
});
});
await Server.NextFrameAsync(() =>
{
warnsMenu.Open(player);
});
});
});
}
[ConsoleCommand("css_players")]
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]

View File

@@ -211,10 +211,8 @@ namespace CS2_SimpleAdmin
[JsonPropertyName("WarnThreshold")]
public Dictionary<int, string> WarnThreshold { get; set; } = new()
{
{ 1, "" },
{ 2, "" },
{ 3, "" },
{ 4, "css_ban USERID 120 \"4/4 Warn\"" },
{ 998, "css_addban STEAMID64 60 \"3/4 Warn\"" },
{ 999, "css_ban #USERID 120 \"4/4 Warn\"" },
};
[JsonPropertyName("DisableDangerousCommands")]

View File

@@ -63,6 +63,38 @@ internal class WarnManager(Database.Database database)
}
catch { };
}
public async Task<IEnumerable<dynamic>> GetPlayerWarns(string steamId, bool active = true)
{
try
{
await using var connection = await database.GetConnectionAsync();
string sql;
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
{
sql = active
? "SELECT * FROM sa_warns WHERE player_steamid = @PlayerSteamID AND status = 'ACTIVE' ORDER BY id DESC"
: "SELECT * FROM sa_warns WHERE player_steamid = @PlayerSteamID ORDER BY id DESC";
}
else
{
sql = active
? "SELECT * FROM sa_warns WHERE player_steamid = @PlayerSteamID AND server_id = @serverid AND status = 'ACTIVE' ORDER BY id DESC"
: "SELECT * FROM sa_warns WHERE player_steamid = @PlayerSteamID AND server_id = @serverid ORDER BY id DESC";
}
var parameters = new { PlayerSteamID = steamId, serverid = CS2_SimpleAdmin.ServerId };
var warns = await connection.QueryAsync<dynamic>(sql, parameters);
return warns;
}
catch (Exception)
{
return [];
}
}
public async Task<int> GetPlayerWarnsCount(string steamId, bool active = true)
{
@@ -87,6 +119,24 @@ internal class WarnManager(Database.Database database)
}
}
public async Task UnwarnPlayer(string steamid, int warnId)
{
try
{
await using var connection = await database.GetConnectionAsync();
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
? "UPDATE sa_warns SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND player_steamid = @steamid AND id = @warnId"
: "UPDATE sa_warns SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND player_steamid = @steamid AND id = @warnId AND server_id = @serverid";
await connection.ExecuteAsync(sql, new { steamid, warnId, serverid = CS2_SimpleAdmin.ServerId });
}
catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogCritical($"Unable to remove warn + {ex}");
}
}
public async Task ExpireOldWarns()
{
try

View File

@@ -1 +1 @@
1.5.1a
1.5.2a

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "المسؤول {lightred}{0}{default} قام بالانتقال إلى {lightred}{1}{default}!",
"sa_admin_bring_message": "المسؤول {lightred}{0}{default} قام بنقل نفسه إلى {lightred}{1}{default}!",
"sa_admin_team_message": "المسؤول {lightred}{0}{default} قام بنقل {lightred}{1}{default} إلى {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}التحذيرات",
"sa_admin_warns_unwarn": "{lime}تم بنجاح{default} إزالة التحذير عن {gold}{0} {default}من {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}التصويت على {gold}{0}",
"sa_admin_vote_message": "المسؤول {lightred}{0}{default} بدأ التصويت على {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}نتائج التصويت على {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admin {lightred}{0}{default} hat sich zu {lightred}{1}{default} teleportiert!",
"sa_admin_bring_message": "Admin {lightred}{0}{default} hat zu sich {lightred}{1}{default} teleportiert!",
"sa_admin_team_message": "Admin {lightred}{0}{default} hat {lightred}{1}{default} zu {lightred}{2}{default} gewechselt!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}WARNUNGEN",
"sa_admin_warns_unwarn": "{lime}Erfolgreich{default} Warnung von {gold}{0} {default}von {gold}{1}{default} entfernt!",
"sa_admin_vote_menu_title": "{lime}ABSTIMMUNG FÜR {gold}{0}",
"sa_admin_vote_message": "Admin {lightred}{0}{default} hat eine Abstimmung für {lightred}{1}{default} gestartet",
"sa_admin_vote_message_results": "{lime}ABSTIMMUNGS ERGEBNISSE FÜR {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admin {lightred}{0}{default} teleported to {lightred}{1}{default}!",
"sa_admin_bring_message": "Admin {lightred}{0}{default} teleported to himself {lightred}{1}{default}!",
"sa_admin_team_message": "Admin {lightred}{0}{default} transfered {lightred}{1}{default} to {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}WARNS",
"sa_admin_warns_unwarn": "{lime}Successfully{default} unwarned {gold}{0} {default}for {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}VOTING FOR {gold}{0}",
"sa_admin_vote_message": "Admin {lightred}{0}{default} started voting for {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}VOTING RESULTS FOR {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "El administrador {lightred}{0}{default} se ha teletransportado a {lightred}{1}{default}!",
"sa_admin_bring_message": "El administrador {lightred}{0}{default} se ha teletransportado a sí mismo a {lightred}{1}{default}!",
"sa_admin_team_message": "El administrador {lightred}{0}{default} ha transferido a {lightred}{1}{default} a {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}ADVERTENCIAS",
"sa_admin_warns_unwarn": "{lime}Exitosamente{default} advertencia eliminada de {gold}{0} {default}de {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}VOTACIÓN PARA {gold}{0}",
"sa_admin_vote_message": "El administrador {lightred}{0}{default} ha iniciado una votación para {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}RESULTADOS DE LA VOTACIÓN PARA {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "مدیر {lightred}{0}{default} به {lightred}{1}{default} جابجا شد!",
"sa_admin_bring_message": "مدیر {lightred}{0}{default} خودش به {lightred}{1}{default} جابجا شد!",
"sa_admin_team_message": "مدیر {lightred}{0}{default} {lightred}{1}{default} را به {lightred}{2}{default} منتقل کرد!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}اخطارها",
"sa_admin_warns_unwarn": "{lime}با موفقیت{default} اخطار {gold}{0} {default}از {gold}{1}{default} حذف شد!",
"sa_admin_vote_menu_title": "{lime}رأی گیری برای {gold}{0}",
"sa_admin_vote_message": "مدیر {lightred}{0}{default} رأی گیری برای {lightred}{1}{default} را شروع کرد",
"sa_admin_vote_message_results": "{lime}نتایج رأی گیری برای {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admin {lightred}{0}{default} s'est téléporté à {lightred}{1}{default}!",
"sa_admin_bring_message": "Admin {lightred}{0}{default} s'est téléporté à lui-même à {lightred}{1}{default}!",
"sa_admin_team_message": "Admin {lightred}{0}{default} a transféré {lightred}{1}{default} à {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}AVERTISSEMENTS",
"sa_admin_warns_unwarn": "{lime}Réussi{default} à enlever l'avertissement de {gold}{0} {default}de {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}VOTE POUR {gold}{0}",
"sa_admin_vote_message": "Admin {lightred}{0}{default} a lancé un vote pour {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}RÉSULTATS DU VOTE POUR {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admins {lightred}{0}{default} teleported uz {lightred}{1}{default}!",
"sa_admin_bring_message": "Admins {lightred}{0}{default} teleportēja sevi uz {lightred}{1}{default}!",
"sa_admin_team_message": "Admins {lightred}{0}{default} pārveidoja {lightred}{1}{default} uz {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}BRĪDINĀJUMI",
"sa_admin_warns_unwarn": "{lime}Veiksmīgi{default} noņemts brīdinājums no {gold}{0} {default}no {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}BALSOŠANA PAR {gold}{0}",
"sa_admin_vote_message": "Admins {lightred}{0}{default} sāka balsošanu par {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}BALSOŠANAS REZULTĀTI PAR {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admin {lightred}{0}{default} teleportował się do {lightred}{1}{default}!",
"sa_admin_bring_message": "Admin {lightred}{0}{default} teleportował do siebie {lightred}{1}{default}!",
"sa_admin_team_message": "Admin {lightred}{0}{default} przerzucił {lightred}{1}{default} do {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{lime}OSTRZEŻENIA {gold}{0}",
"sa_admin_warns_unwarn": "{lime}Pomyślnie{default} usunięto ostrzeżenie dla {gold}{0} {default}za {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}GŁOSOWANIE NA {gold}{0}",
"sa_admin_vote_message": "Admin {lightred}{0}{default} rozpoczął głosowanie na {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}WYNIKI GŁOSOWANIA {gold}{0}",

View File

@@ -100,6 +100,8 @@
"sa_admin_tp_message": "Admin {lightred}{0}{default} teleportou para {lightred}{1}{default}!",
"sa_admin_bring_message": "Admin {lightred}{0}{default} teleportou {lightred}{1}{default} para si mesmo!",
"sa_admin_team_message": "Admin {lightred}{0}{default} transferiu {lightred}{1}{default} para o time {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}ADVERTÊNCIAS",
"sa_admin_warns_unwarn": "{lime}Removido com sucesso{default} o aviso de {gold}{0} {default}de {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}VOTAÇÃO PARA {gold}{0}",
"sa_admin_vote_message": "Admin {lightred}{0}{default} iniciou uma votação para {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}RESULTADOS DA VOTAÇÃO PARA {gold}{0}",

View File

@@ -99,6 +99,8 @@
"sa_admin_tp_message": "Администратор {lightred}{0}{default} телепортировался к {lightred}{1}{default}!",
"sa_admin_bring_message": "Администратор {lightred}{0}{default} телепортировал {lightred}{1}{default} к себе!",
"sa_admin_team_message": "Администратор {lightred}{0}{default} переместил {lightred}{1}{default} в команду {lightred}{2}{default}!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}ПРЕДУПРЕЖДЕНИЯ",
"sa_admin_warns_unwarn": "{lime}Успешно{default} удалено предупреждение у {gold}{0} {default}от {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}ГОЛОСОВАНИЕ ЗА {gold}{0}",
"sa_admin_vote_message": "Администратор {lightred}{0}{default} начал голосование за {lightred}{1}{default}",
"sa_admin_vote_message_results": "{lime}РЕЗУЛЬТАТЫ ГОЛОСОВАНИЯ ЗА {gold}{0}",

View File

@@ -99,6 +99,8 @@
"sa_admin_tp_message": "Yönetici {lightred}{0}{default}, {lightred}{1}{default}'e teleport edildi!",
"sa_admin_bring_message": "Yönetici {lightred}{0}{default}, {lightred}{1}{default}'yi kendine teleport etti!",
"sa_admin_team_message": "Yönetici {lightred}{0}{default}, {lightred}{1}{default} {lightred}{2}{default} takımına transfer edildi!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}UYARILAR",
"sa_admin_warns_unwarn": "{lime}Başarıyla{default} uyarı {gold}{0} {default}şu adresten {gold}{1}{default} kaldırıldı!",
"sa_admin_vote_menu_title": "{lime}{0} için OYLAMA",
"sa_admin_vote_message": "Yönetici {lightred}{0}{default}, {lightred}{1}{default} için oy vermeye başladı",
"sa_admin_vote_message_results": "{lime}{0} için OYLAMA SONUÇLARI",

View File

@@ -99,6 +99,8 @@
"sa_admin_tp_message": "管理员{lightred}{0}{default}传送到了{lightred}{1}{default}",
"sa_admin_bring_message": "管理员{lightred}{0}{default}将自己传送到了{lightred}{1}{default}",
"sa_admin_team_message": "管理员{lightred}{0}{default}将{lightred}{1}{default}转移到了{lightred}{2}{default}队伍!",
"sa_admin_warns_menu_title": "{gold}{0} {lime}警告",
"sa_admin_warns_unwarn": "{lime}成功{default} 取消了 {gold}{0} {default}的警告,来自 {gold}{1}{default}!",
"sa_admin_vote_menu_title": "{lime}投票选举{gold}{0}",
"sa_admin_vote_message": "管理员{lightred}{0}{default}开始对{lightred}{1}{default}进行投票",
"sa_admin_vote_message_results": "{lime}投票结果{gold}{0}",