From 3051d44b0d4577d602530ebe19a49fc43317cc4b Mon Sep 17 00:00:00 2001 From: RaidMax Date: Thu, 8 Aug 2019 15:30:06 -0500 Subject: [PATCH] show trigger regex for profanity determent plugin --- Application/IW4MServer.cs | 1 - Plugins/ProfanityDeterment/Plugin.cs | 39 +++++++++++--------- SharedLibraryCore/Services/ClientService.cs | 17 +++++++++ SharedLibraryCore/Services/PenaltyService.cs | 2 +- 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/Application/IW4MServer.cs b/Application/IW4MServer.cs index cc6b3e87e..3d1352860 100644 --- a/Application/IW4MServer.cs +++ b/Application/IW4MServer.cs @@ -1050,7 +1050,6 @@ namespace IW4MAdmin Offense = reason, Punisher = originClient, Link = targetClient.AliasLink, - AutomatedOffense = originClient.AdministeredPenalties?.FirstOrDefault()?.AutomatedOffense, IsEvadedOffense = isEvade }; diff --git a/Plugins/ProfanityDeterment/Plugin.cs b/Plugins/ProfanityDeterment/Plugin.cs index 4f601fd3d..66836025b 100644 --- a/Plugins/ProfanityDeterment/Plugin.cs +++ b/Plugins/ProfanityDeterment/Plugin.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using SharedLibraryCore; @@ -31,13 +32,18 @@ namespace IW4MAdmin.Plugins.ProfanityDeterment var objectionalWords = Settings.Configuration().OffensiveWords; bool containsObjectionalWord = objectionalWords.FirstOrDefault(w => E.Origin.Name.ToLower().Contains(w)) != null; + var matchedFilters = new List(); // we want to run regex against it just incase if (!containsObjectionalWord) { foreach (string word in objectionalWords) { - containsObjectionalWord |= Regex.IsMatch(E.Origin.Name.ToLower(), word, RegexOptions.IgnoreCase); + if (Regex.IsMatch(E.Origin.Name.ToLower(), word, RegexOptions.IgnoreCase)) + { + containsObjectionalWord |= true; + matchedFilters.Add(word); + } } } @@ -48,7 +54,7 @@ namespace IW4MAdmin.Plugins.ProfanityDeterment { new EFPenalty() { - AutomatedOffense = E.Origin.Name + AutomatedOffense = $"{E.Origin.Name} - {string.Join(",", matchedFilters)}" } }; E.Origin.Kick(Settings.Configuration().ProfanityKickMessage, sender); @@ -64,15 +70,14 @@ namespace IW4MAdmin.Plugins.ProfanityDeterment { var objectionalWords = Settings.Configuration().OffensiveWords; bool containsObjectionalWord = false; + var matchedFilters = new List(); foreach (string word in objectionalWords) { - containsObjectionalWord |= Regex.IsMatch(E.Data.ToLower(), word, RegexOptions.IgnoreCase); - - // break out early because there's at least one objectional word - if (containsObjectionalWord) + if (Regex.IsMatch(E.Data.ToLower(), word, RegexOptions.IgnoreCase)) { - break; + containsObjectionalWord |= true; + matchedFilters.Add(word); } } @@ -80,23 +85,23 @@ namespace IW4MAdmin.Plugins.ProfanityDeterment { int profanityInfringments = E.Origin.GetAdditionalProperty("_profanityInfringements"); + var sender = Utilities.IW4MAdminClient(E.Owner); + sender.AdministeredPenalties = new List() + { + new EFPenalty() + { + AutomatedOffense = $"{E.Data} - {string.Join(",", matchedFilters)}" + } + }; + if (profanityInfringments >= Settings.Configuration().KickAfterInfringementCount) { - E.Origin.Kick(Settings.Configuration().ProfanityKickMessage, Utilities.IW4MAdminClient(E.Owner)); + E.Origin.Kick(Settings.Configuration().ProfanityKickMessage, sender); } else if (profanityInfringments < Settings.Configuration().KickAfterInfringementCount) { E.Origin.SetAdditionalProperty("_profanityInfringements", profanityInfringments + 1); - - var sender = Utilities.IW4MAdminClient(E.Owner); - sender.AdministeredPenalties = new List() - { - new EFPenalty() - { - AutomatedOffense = E.Data - } - }; E.Origin.Warn(Settings.Configuration().ProfanityWarningMessage, sender); } } diff --git a/SharedLibraryCore/Services/ClientService.cs b/SharedLibraryCore/Services/ClientService.cs index 7b1ac4afd..3d3cf3859 100644 --- a/SharedLibraryCore/Services/ClientService.cs +++ b/SharedLibraryCore/Services/ClientService.cs @@ -592,5 +592,22 @@ namespace SharedLibraryCore.Services } } #endregion + + /// + /// retrieves the number of time the given client id has been reported + /// + /// client id to search for report counts of + /// + public async Task GetClientReportCount(int clientId) + { + using (var ctx = new DatabaseContext(true)) + { + return await ctx.Penalties + .Where(_penalty => _penalty.Active) + .Where(_penalty => _penalty.OffenderId == clientId) + .Where(_penalty => _penalty.Type == EFPenalty.PenaltyType.Report) + .CountAsync(); + } + } } } diff --git a/SharedLibraryCore/Services/PenaltyService.cs b/SharedLibraryCore/Services/PenaltyService.cs index c51c3b1d3..424f25e8e 100644 --- a/SharedLibraryCore/Services/PenaltyService.cs +++ b/SharedLibraryCore/Services/PenaltyService.cs @@ -26,7 +26,7 @@ namespace SharedLibraryCore.Services Expires = newEntity.Expires, Offense = newEntity.Offense, When = DateTime.UtcNow, - AutomatedOffense = newEntity.AutomatedOffense, + AutomatedOffense = newEntity.AutomatedOffense ?? newEntity.Punisher.AdministeredPenalties?.FirstOrDefault()?.AutomatedOffense, IsEvadedOffense = newEntity.IsEvadedOffense };