From b9aecae3f07cda444f41cd4c6d3ca2fd0e61c0e2 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Sun, 27 Apr 2025 13:46:25 -0400 Subject: [PATCH 1/4] allow signs to issue mutes --- .../github/aleksandarharalanov/chatguard/core/log/LogType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/LogType.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/LogType.java index 05619fa..50aa8b3 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/LogType.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/LogType.java @@ -5,7 +5,7 @@ public enum LogType { CHAT(EnumSet.of(LogAttribute.FILTER, LogAttribute.STRIKE, LogAttribute.MUTE, LogAttribute.WARN, LogAttribute.AUDIO)), - SIGN(EnumSet.of(LogAttribute.FILTER, LogAttribute.STRIKE, LogAttribute.WARN, LogAttribute.AUDIO)), + SIGN(EnumSet.of(LogAttribute.FILTER, LogAttribute.STRIKE, LogAttribute.MUTE, LogAttribute.WARN, LogAttribute.AUDIO)), NAME(EnumSet.of(LogAttribute.FILTER)), CAPTCHA(EnumSet.of(LogAttribute.AUDIO)); From 51f34cfea32d22648c08926e1fdbf7eb6a7efb35 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Sun, 27 Apr 2025 13:48:53 -0400 Subject: [PATCH 2/4] fix embeds using the wrong information --- .../chatguard/core/log/embed/ChatEmbed.java | 8 +++----- .../chatguard/core/log/embed/NameEmbed.java | 4 +--- .../chatguard/core/log/embed/SignEmbed.java | 4 +--- .../chatguard/core/log/logger/DiscordLogger.java | 13 +++++-------- .../core/security/filter/FilterFinalizer.java | 15 +++++++-------- 5 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java index 49b2fdb..2b5037b 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java @@ -11,13 +11,11 @@ public final class ChatEmbed extends DiscordEmbed { private final String trigger; - private final int severity; private final boolean warned; - public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity, boolean warned) { + public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigger, boolean warned) { super(plugin, player, content); this.trigger = trigger; - this.severity = severity; this.warned = warned; setupBaseEmbed(); } @@ -27,13 +25,13 @@ protected void setupEmbedDetails() { if(warned) { embed.setDescription(String.format( "Warning: %d", - PenaltyConfig.getPlayerWarnings(player) + 1 + PenaltyConfig.getPlayerWarnings(player) )); } else { embed.setDescription(String.format( "Strike: %d - Mute Duration: %s", - PenaltyConfig.getPlayerStrikes(player) + severity, + PenaltyConfig.getPlayerStrikes(player), PenaltyConfig.getAutoMuteDuration(player) )); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java index e9cdf08..9c4ed84 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java @@ -11,12 +11,10 @@ public final class NameEmbed extends DiscordEmbed { private final String trigger; - private final int severity; - public NameEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity) { + public NameEmbed(JavaPlugin plugin, Player player, String content, String trigger) { super(plugin, player, content); this.trigger = trigger; - this.severity = severity; setupBaseEmbed(); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java index 5a635c6..348d835 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java @@ -11,12 +11,10 @@ public final class SignEmbed extends DiscordEmbed { private final String trigger; - private final int severity; - public SignEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity) { + public SignEmbed(JavaPlugin plugin, Player player, String content, String trigger) { super(plugin, player, content); this.trigger = trigger; - this.severity = severity; setupBaseEmbed(); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/DiscordLogger.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/DiscordLogger.java index 54b7c96..4758c82 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/DiscordLogger.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/DiscordLogger.java @@ -34,24 +34,21 @@ public static void log(LogType logType, Player player, String content, FilterTer webhook.setAvatarUrl(webhookIcon); - String trigger = ""; - int severity = 0; + String trigger = ""; - if(triggerFilter != null) { + if(triggerFilter != null) trigger = triggerFilter.getName(); - severity = triggerFilter.getSeverity(); - } DiscordEmbed embed; switch (logType) { case CHAT: - embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger, severity, warned); + embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger, warned); break; case SIGN: - embed = new SignEmbed(ChatGuard.getInstance(), player, content, trigger, severity); + embed = new SignEmbed(ChatGuard.getInstance(), player, content, trigger); break; case NAME: - embed = new NameEmbed(ChatGuard.getInstance(), player, content, trigger, severity); + embed = new NameEmbed(ChatGuard.getInstance(), player, content, trigger); break; case CAPTCHA: embed = new CaptchaEmbed(ChatGuard.getInstance(), player, content); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterFinalizer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterFinalizer.java index 37f6f59..ed289b3 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterFinalizer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterFinalizer.java @@ -22,11 +22,6 @@ public static void finalizeActions(LogType logType, Player player, String conten final int severity = filterTerm.getSeverity(); final boolean shouldWarn = shouldWarn(logType, player, severity); - AudioCuePlayer.play(logType, player, false); - ConsoleLogger.log(logType, player, content); - FileLogger.log(logType, player, content); - DiscordLogger.log(logType, player, content, filterTerm, shouldWarn); - if (shouldSendFeedback(logType)) { final String badWord = filterTerm.getName(); final String flaggedSection = trigger.getSection(); @@ -41,11 +36,15 @@ public static void finalizeActions(LogType logType, Player player, String conten if (shouldWarn) { PenaltyEnforcer.handleWarning(player); - return; // prevent the mute from being issued + } else { + PenaltyEnforcer.incrementStrikeTier(logType, player, severity); + PenaltyEnforcer.processMute(logType, player); } - PenaltyEnforcer.incrementStrikeTier(logType, player, severity); - PenaltyEnforcer.processMute(logType, player); + AudioCuePlayer.play(logType, player, false); + ConsoleLogger.log(logType, player, content); + FileLogger.log(logType, player, content); + DiscordLogger.log(logType, player, content, filterTerm, shouldWarn); } private static boolean shouldWarn(LogType logType, Player player, int severity) { From 419796df251101917c5871503f39cbe2de2bad24 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Sun, 27 Apr 2025 13:49:30 -0400 Subject: [PATCH 3/4] make the censor config option only hide the IP --- .../aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java | 2 +- .../aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java | 2 +- .../aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java index 2b5037b..93a0f75 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/ChatEmbed.java @@ -38,7 +38,7 @@ protected void setupEmbedDetails() { embed.setTitle("Chat Filter") .addField("Content:", content, false) - .addField("Trigger:", String.format(DiscordConfig.getLogCensorEnabled() ? "||`%s`||" : "`%s`", trigger), true) + .addField("Trigger:", String.format("`%s`", trigger), true) .setColor(Color.decode(DiscordConfig.getEmbedColor(LogType.CHAT))); } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java index 9c4ed84..398fda7 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/NameEmbed.java @@ -21,7 +21,7 @@ public NameEmbed(JavaPlugin plugin, Player player, String content, String trigge @Override protected void setupEmbedDetails() { embed.setTitle("Name Filter") - .addField("Trigger:", String.format(DiscordConfig.getLogCensorEnabled() ? "||`%s`||" : "`%s`", trigger), true) + .addField("Trigger:", String.format("`%s`", trigger), true) .setColor(Color.decode(DiscordConfig.getEmbedColor(LogType.NAME))); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java index 348d835..9d2e05c 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/SignEmbed.java @@ -27,7 +27,7 @@ protected void setupEmbedDetails() { embed.setTitle("Sign Filter") .addField("Content:", content, false) - .addField("Trigger:", String.format(DiscordConfig.getLogCensorEnabled() ? "||`%s`||" : "`%s`", trigger), true) + .addField("Trigger:", String.format("`%s`", trigger), true) .setColor(Color.decode(DiscordConfig.getEmbedColor(LogType.SIGN))); } } From 88e717b27bf611b1da1e002af12e5a95736306b9 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Sun, 27 Apr 2025 13:50:00 -0400 Subject: [PATCH 4/4] allow players to see why they couldnt join pretty garbage solution, but i cant be asked at this point --- .../core/security/filter/FilterHandler.java | 17 ++++++++++++----- .../listener/player/PlayerJoinListener.java | 12 +++++++++++- .../listener/player/PlayerLoginListener.java | 14 ++++++++++++-- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterHandler.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterHandler.java index 8ca3185..e2427db 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterHandler.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterHandler.java @@ -22,14 +22,21 @@ public static boolean isPlayerNameBlocked(Player player) { } private static boolean isBlocked(LogType logType, Player player, String content) { - String sanitizedContent = ContentHandler.sanitizeContent(content, FilterConfig.getWhitelist()); - FilterTrigger trigger = FilterDetector.checkFilters(sanitizedContent); - - if (trigger == null) { + FilterTrigger trigger = GetBlockedTrigger(content); + if(trigger == null) return false; - } FilterFinalizer.finalizeActions(logType, player, content, trigger); return true; } + + public static FilterTrigger GetBlockedTrigger(String content) { + String sanitizedContent = ContentHandler.sanitizeContent(content, FilterConfig.getWhitelist()); + FilterTrigger trigger = FilterDetector.checkFilters(sanitizedContent); + + if (trigger == null) + return null; + + return trigger; + } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerJoinListener.java b/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerJoinListener.java index f68901c..1571892 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerJoinListener.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerJoinListener.java @@ -2,6 +2,7 @@ import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; import io.github.aleksandarharalanov.chatguard.core.security.filter.FilterHandler; +import io.github.aleksandarharalanov.chatguard.core.security.filter.FilterTrigger; import io.github.aleksandarharalanov.chatguard.core.security.penalty.PenaltyEnforcer; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.entity.Player; @@ -16,7 +17,16 @@ public void onPlayerJoin(PlayerJoinEvent event) { // Fallback if PlayerLoginEvent fails if (FilterConfig.getNameEnabled() && FilterHandler.isPlayerNameBlocked(player)) { - player.kickPlayer(ColorUtil.translateColorCodes("&cName contains bad words.")); + // this is pretty garbage, but i cant be asked to do this properly... + FilterTrigger trigger = FilterHandler.GetBlockedTrigger(player.getName()); + String filterName = trigger.getFilterTerm().getName(); + + player.kickPlayer(ColorUtil.translateColorCodes( + String.format( + "&cYour name contains the bad word '%s'.", + filterName + ) + )); return; } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerLoginListener.java b/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerLoginListener.java index a99e586..7a69ff6 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerLoginListener.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/listener/player/PlayerLoginListener.java @@ -1,6 +1,7 @@ package io.github.aleksandarharalanov.chatguard.listener.player; import io.github.aleksandarharalanov.chatguard.core.security.filter.FilterHandler; +import io.github.aleksandarharalanov.chatguard.core.security.filter.FilterTrigger; import io.github.aleksandarharalanov.chatguard.core.data.IPData; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.entity.Player; @@ -17,9 +18,18 @@ public void onPlayerLogin(PlayerLoginEvent event) { } if (FilterHandler.isPlayerNameBlocked(player)) { + // this is pretty garbage, but i cant be asked to do this properly... + FilterTrigger trigger = FilterHandler.GetBlockedTrigger(player.getName()); + String filterName = trigger.getFilterTerm().getName(); + event.disallow( - PlayerLoginEvent.Result.KICK_OTHER, - ColorUtil.translateColorCodes("&cName contains bad words.") + PlayerLoginEvent.Result.KICK_OTHER, + ColorUtil.translateColorCodes( + String.format( + "&cYour name contains the bad word '%s'.", + filterName + ) + ) ); } }