From cbfc834d013bb27464b51ff27350e9022b92f364 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:16:25 -0400 Subject: [PATCH 01/25] remove useless data storage --- .../chatguard/listener/player/PlayerJoinListener.java | 3 --- 1 file changed, 3 deletions(-) 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 2fed789..b7b10d8 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,7 +2,6 @@ import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; import io.github.aleksandarharalanov.chatguard.core.security.filter.FilterHandler; -import io.github.aleksandarharalanov.chatguard.core.config.PenaltyConfig; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerJoinEvent; @@ -19,7 +18,5 @@ public void onPlayerJoin(PlayerJoinEvent event) { player.kickPlayer(ColorUtil.translateColorCodes("&cName contains bad words.")); return; } - - PenaltyConfig.setDefaultStrikeTier(player); } } From 5f24aa29b2bb763aeec899564dbaa15147ed2eb7 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:17:01 -0400 Subject: [PATCH 02/25] remove strike limit --- .../chatguard/core/config/PenaltyConfig.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index 7df925d..10a6ab3 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -36,20 +36,18 @@ public static void setPlayerStrike(Player player, int newStrike) { } public static void incrementPlayerStrike(Player player) { - if (ChatGuard.getStrikes().getInt(player.getName(), 0) <= 4) { - ChatGuard.getStrikes().setProperty(player.getName(), ChatGuard.getStrikes().getInt(player.getName(), 0) + 1); - ChatGuard.getStrikes().save(); - } - } - - public static void setDefaultStrikeTier(Player player) { - if (ChatGuard.getStrikes().getInt(player.getName(), -1) == -1) { - ChatGuard.getStrikes().setProperty(player.getName(), 0); - ChatGuard.getStrikes().save(); - } + ChatGuard.getStrikes().setProperty(player.getName(), ChatGuard.getStrikes().getInt(player.getName(), 0) + 1); + ChatGuard.getStrikes().save(); } public static String getAutoMuteDuration(Player player) { - return FilterConfig.getAutoMuteDurations().get(ChatGuard.getStrikes().getInt(player.getName(), 0)); + final List penalties = FilterConfig.getAutoMuteDurations(); + final int maxPenalty = penalties.size() - 1; + + final int playerPenalty = ChatGuard.getStrikes().getInt(player.getName(), 0); + if (playerPenalty > maxPenalty) + return penalties.get(maxPenalty); + + return penalties.get(playerPenalty); } } From 2d6c5b16adb6685c8f781e7be8ac7e580b407acb Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:18:09 -0400 Subject: [PATCH 03/25] readability this was only changed because LogUtil was not printing stack traces. temporary change that is being kept since readability is always welcomed, and who doesnt love stack traces. --- .../core/security/penalty/PenaltyEnforcer.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index 87ee22b..e409a01 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -46,11 +46,13 @@ public static void processMute(LogType logType, Player player) { } try { - muteHandler.setPlayerMuteTimeout( - player.getName(), - TimeFormatter.parseDateDiff(PenaltyConfig.getAutoMuteDuration(player), true)); + String duration = PenaltyConfig.getAutoMuteDuration(player); + + long timeStamp = TimeFormatter.parseDateDiff(duration, true); + + muteHandler.setPlayerMuteTimeout(player.getName(), timeStamp); } catch (Exception e) { - LogUtil.logConsoleSevere(e.getMessage()); + e.printStackTrace(); return; } From 3a4aa3112fd325e88a0a6d537d5d117ef288f98a Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:19:31 -0400 Subject: [PATCH 04/25] change default config --- src/main/resources/config.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 15c4af4..ef325d2 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -34,7 +34,20 @@ filter: local-file: true auto-mute: enabled: true - duration: ["30m", "1h", "2h", "4h", "8h", "24h"] + duration: + - 10s + - 2m + - 10m + - 30m + - 30m + - 30m + - 1h + - 1h + - 1h + - 2h + - 4h + - 8h + - 24h rules: whitelist: terms: [] From d0c98723285b5e10c339933280e42b36467dc7b2 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:35:42 -0400 Subject: [PATCH 05/25] update discord embeds untested, but i cant imagine that i messed anything up --- .../chatguard/core/config/PenaltyConfig.java | 4 ---- .../chatguard/core/log/embed/ChatEmbed.java | 19 +++++-------------- .../core/log/embed/DiscordEmbed.java | 2 +- .../chatguard/core/log/embed/SignEmbed.java | 16 ++++------------ 4 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index 10a6ab3..c67a433 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -21,10 +21,6 @@ public static int getPlayerStrike(Player player) { return ChatGuard.getStrikes().getInt(player.getName(), 0); } - public static boolean isPlayerOnFinalStrike(Player player) { - return ChatGuard.getStrikes().getInt(player.getName(), 0) == 5; - } - public static void setPlayerStrike(String playerName, int newStrike) { ChatGuard.getStrikes().setProperty(playerName, newStrike); ChatGuard.getStrikes().save(); 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 b83cf22..cfa120e 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 @@ -20,20 +20,11 @@ public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigge @Override protected void setupEmbedDetails() { - if (PenaltyConfig.isPlayerOnFinalStrike(player)) { - embed.setDescription(String.format( - "S%d (Max) ・ Mute Duration: %s", - PenaltyConfig.getPlayerStrike(player), - PenaltyConfig.getAutoMuteDuration(player) - )); - } else { - embed.setDescription(String.format( - "S%d ► S%d ・ Mute Duration: %s", - PenaltyConfig.getPlayerStrike(player), - PenaltyConfig.getPlayerStrike(player) + 1, - PenaltyConfig.getAutoMuteDuration(player) - )); - } + embed.setDescription(String.format( + "Strike: %d - Mute Duration: %s", + PenaltyConfig.getPlayerStrike(player) + 1, + PenaltyConfig.getAutoMuteDuration(player) + )); embed.setTitle("Chat Filter") .addField("Content:", content, false) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/DiscordEmbed.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/DiscordEmbed.java index 92e59bf..c422665 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/DiscordEmbed.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/embed/DiscordEmbed.java @@ -36,7 +36,7 @@ protected void setupBaseEmbed() { } embed.setFooter( - String.format("ChatGuard v%s ・ Logger", pluginVersion), + String.format("ChatGuard v%s - Logger", pluginVersion), "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" ); } 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 0f995d4..c845e79 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 @@ -20,18 +20,10 @@ public SignEmbed(JavaPlugin plugin, Player player, String content, String trigge @Override protected void setupEmbedDetails() { - if (PenaltyConfig.isPlayerOnFinalStrike(player)) { - embed.setDescription(String.format( - "S%d (Max)", - PenaltyConfig.getPlayerStrike(player) - )); - } else { - embed.setDescription(String.format( - "S%d ► S%d", - PenaltyConfig.getPlayerStrike(player), - PenaltyConfig.getPlayerStrike(player) + 1 - )); - } + embed.setDescription(String.format( + "Strike: %d", + PenaltyConfig.getPlayerStrike(player) + 1 + )); embed.setTitle("Sign Filter") .addField("Content:", content, false) From a36a816618b9cce962714980f3a0119772e4c23d Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:38:17 -0400 Subject: [PATCH 06/25] remove more forgotten strike limitations --- .../chatguard/command/subcommand/StrikeCommand.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java index 023c040..0c0b042 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java @@ -50,8 +50,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St try { int newStrike = Integer.parseInt(args[2]); - if (newStrike < 0 || newStrike > 5) { - sender.sendMessage(ColorUtil.translateColorCodes("&c[ChatGuard] Invalid range. Choose from &e0 &cto &e5&c.")); + if (newStrike < 0) { + sender.sendMessage(ColorUtil.translateColorCodes("&c[ChatGuard] Must be greater than &e0.")); return true; } @@ -69,7 +69,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St foundKey, playerStrikeTier, newStrike )); } catch (NumberFormatException e) { - sender.sendMessage(ColorUtil.translateColorCodes("&c[ChatGuard] Invalid input. Enter a number from &e0 &cto &e5&c.")); + sender.sendMessage(ColorUtil.translateColorCodes("&c[ChatGuard] Invalid input. Enter a number.")); } return true; From e41b398e01f476da8dbe71b2bb85d87f67bc1a68 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 19:48:38 -0400 Subject: [PATCH 07/25] change strikes format for the future this is done in preparation for strike decay --- .../chatguard/core/config/PenaltyConfig.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index c67a433..05333af 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -13,26 +13,24 @@ public static List getStrikesKeys() { return ChatGuard.getStrikes().getKeys(); } - public static int getPlayerStrike(String playerName) { - return ChatGuard.getStrikes().getInt(playerName, 0); - } - public static int getPlayerStrike(Player player) { - return ChatGuard.getStrikes().getInt(player.getName(), 0); + return getPlayerStrike(player.getName()); } - public static void setPlayerStrike(String playerName, int newStrike) { - ChatGuard.getStrikes().setProperty(playerName, newStrike); - ChatGuard.getStrikes().save(); + public static int getPlayerStrike(String playerName) { + return ChatGuard.getStrikes().getInt(playerName + ".strikes", 0); } public static void setPlayerStrike(Player player, int newStrike) { - ChatGuard.getStrikes().setProperty(player.getName(), newStrike); - ChatGuard.getStrikes().save(); + setPlayerStrike(player.getName(), newStrike); } public static void incrementPlayerStrike(Player player) { - ChatGuard.getStrikes().setProperty(player.getName(), ChatGuard.getStrikes().getInt(player.getName(), 0) + 1); + setPlayerStrike(player, getPlayerStrike(player) + 1); + } + + public static void setPlayerStrike(String playerName, int newStrike) { + ChatGuard.getStrikes().setProperty(playerName + ".strikes", newStrike); ChatGuard.getStrikes().save(); } @@ -40,7 +38,8 @@ public static String getAutoMuteDuration(Player player) { final List penalties = FilterConfig.getAutoMuteDurations(); final int maxPenalty = penalties.size() - 1; - final int playerPenalty = ChatGuard.getStrikes().getInt(player.getName(), 0); + int playerPenalty = getPlayerStrike(player); + if (playerPenalty > maxPenalty) return penalties.get(maxPenalty); From 5db437e2407f032bbce6dba8039829c8b520f72d Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 22:31:43 -0400 Subject: [PATCH 08/25] replace LogUtil for console printing for some reason this doesnt work, and i cant be asked to fix it when system.out looks identical in server console --- .../io/github/aleksandarharalanov/chatguard/ChatGuard.java | 4 ++-- .../chatguard/command/subcommand/CaptchaCommand.java | 2 +- .../chatguard/command/subcommand/HelpCommand.java | 2 +- .../chatguard/command/subcommand/ReloadCommand.java | 2 +- .../chatguard/command/subcommand/StrikeCommand.java | 2 +- .../chatguard/core/log/logger/ConsoleLogger.java | 2 +- .../chatguard/core/log/logger/DiscordLogger.java | 4 ++-- .../chatguard/core/security/filter/FilterDetector.java | 2 +- .../chatguard/core/security/penalty/PenaltyEnforcer.java | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java b/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java index b2c4e96..8cee804 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java @@ -64,13 +64,13 @@ public void onEnable() { final ChatGuardCommand command = new ChatGuardCommand(this); getCommand("chatguard").setExecutor(command); - LogUtil.logConsoleInfo(String.format("[%s] v%s Enabled.", + System.out.println(String.format("[%s] v%s Enabled.", getDescription().getName(), getDescription().getVersion())); } @Override public void onDisable() { - LogUtil.logConsoleInfo(String.format("[%s] v%s Disabled.", + System.out.println(String.format("[%s] v%s Disabled.", getDescription().getName(), getDescription().getVersion())); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java index b537ba7..18b97f5 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java @@ -49,7 +49,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St CaptchaConfig.removePlayerCaptcha(player.getName()); AudioCuePlayer.play(LogType.CAPTCHA, player, true); - LogUtil.logConsoleInfo(String.format("[ChatGuard] Player '%s' passed captcha verification.", player.getName())); + System.out.println(String.format("[ChatGuard] Player '%s' passed captcha verification.", player.getName())); return true; } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java index ee2c5c4..b08acc7 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java @@ -23,7 +23,7 @@ public static void sendHelp(CommandSender sender) { if (sender instanceof Player) { sender.sendMessage(ColorUtil.translateColorCodes(message)); } else { - LogUtil.logConsoleInfo(message.replaceAll("&.", "")); + System.out.println(message.replaceAll("&.", "")); } } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java index d412403..ee7d3d9 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java @@ -20,7 +20,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (sender instanceof Player) { sender.sendMessage(ColorUtil.translateColorCodes("&a[ChatGuard] Configurations reloaded.")); } - LogUtil.logConsoleInfo("[ChatGuard] Configurations reloaded."); + System.out.println("[ChatGuard] Configurations reloaded."); ChatGuard.getConfig().loadAndLog(); ChatGuard.getDiscord().loadAndLog(); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java index 0c0b042..b1806e4 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java @@ -64,7 +64,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St ))); } - LogUtil.logConsoleInfo(String.format( + System.out.println(String.format( "[ChatGuard] Player '%s' set from strike %d to %d.", foundKey, playerStrikeTier, newStrike )); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java index bab5ac0..0d739ab 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java @@ -32,7 +32,7 @@ public static void log(LogType logType, Player player, String content) { return; } - LogUtil.logConsoleInfo(logMessage); + System.out.println(logMessage); } private static boolean shouldConsoleLogEnabled(LogType logType) { 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 9dee813..ae21988 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 @@ -43,7 +43,7 @@ public static void log(LogType logType, Player player, String content, String tr embed = new CaptchaEmbed(ChatGuard.getInstance(), player, content); break; default: - LogUtil.logConsoleWarning("[ChatGuard] Something went wrong when constructing webhook embed to log."); + System.out.println("[ChatGuard] Something went wrong when constructing webhook embed to log."); return; } webhook.addEmbed(embed.getEmbed()); @@ -52,7 +52,7 @@ public static void log(LogType logType, Player player, String content, String tr try { webhook.execute(); } catch (IOException e) { - LogUtil.logConsoleWarning(e.getMessage()); + System.out.println(e.getMessage()); } }, 1L); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java index 17a5363..7b008e6 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java @@ -34,7 +34,7 @@ private static String checkRegexPatterns(String sanitizedContent) { return regex.replace("\\", "\\\\").replace("\"", "\\\""); } } catch (RuntimeException e) { - LogUtil.logConsoleWarning(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); + System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); } } return null; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index e409a01..d59bfb7 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -33,7 +33,7 @@ private PenaltyEnforcer() {} public static void processMute(LogType logType, Player player) { if (muteHandler == null) { - LogUtil.logConsoleWarning("[ChatGuard] No compatible plugin found for auto mute feature. Please disable in config."); + System.out.println("[ChatGuard] No compatible plugin found for auto mute feature. Please disable in config."); return; } From 86aa107c857eb70738016e7e15d23bc4d14d7b60 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Thu, 10 Apr 2025 22:41:57 -0400 Subject: [PATCH 09/25] add severity levels to filters --- .../chatguard/core/config/FilterConfig.java | 35 ++++++++---- .../chatguard/core/config/FilterTerm.java | 56 +++++++++++++++++++ .../chatguard/core/config/PenaltyConfig.java | 4 +- .../core/security/common/ContentHandler.java | 18 +++++- .../core/security/filter/FilterDetector.java | 24 ++------ .../core/security/filter/FilterFinalizer.java | 9 ++- .../core/security/filter/FilterHandler.java | 5 +- .../security/penalty/PenaltyEnforcer.java | 4 +- src/main/resources/config.yml | 8 +-- 9 files changed, 120 insertions(+), 43 deletions(-) create mode 100644 src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index 10298fe..8ad9ba7 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -43,19 +43,34 @@ public static List getAutoMuteDurations() { return ChatGuard.getConfig().getStringList("filter.auto-mute.duration", def); } - public static List getTermsWhitelist() { - return ChatGuard.getConfig().getStringList("filter.rules.whitelist.terms", new ArrayList<>()); + public static List getWhitelist() { + return ChatGuard.getConfig().getStringList("filter.rules.whitelist", new ArrayList<>()); } - public static List getRegexWhitelist() { - return ChatGuard.getConfig().getStringList("filter.rules.whitelist.regex", new ArrayList<>()); - } + public static List getBlacklist() { + List entries = ChatGuard.getConfig().getList("filter.rules.blacklist"); - public static List getTermsBlacklist() { - return ChatGuard.getConfig().getStringList("filter.rules.blacklist.terms", new ArrayList<>()); - } + List output = new ArrayList<>(); + for (Object entry : entries) { + final FilterTerm filterTerm; + + if (entry instanceof List) { + List pair = (List) entry; + + final String filter = (String) pair.get(0); + final int severity = (int) pair.get(1); + + filterTerm = new FilterTerm(filter, severity); + } + else if (entry instanceof String) { + filterTerm = new FilterTerm((String) entry); + } + else + throw new RuntimeException("unknown type in config for blacklist. use either (String, Int) or String.\nif confused, ask RitzKid76"); + + output.add(filterTerm); + } - public static List getRegexBlacklist() { - return ChatGuard.getConfig().getStringList("filter.rules.blacklist.regex", new ArrayList<>()); + return output; } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java new file mode 100644 index 0000000..8c9104a --- /dev/null +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java @@ -0,0 +1,56 @@ +package io.github.aleksandarharalanov.chatguard.core.config; + +public class FilterTerm { + private String filter = ""; + private int severity = 1; + + public FilterTerm(String filter) { + this.filter = filter; + } + + public FilterTerm(String filter, int severity) { + this.filter = filter; + this.severity = severity; + } + + public void setFilter(String filter) { + this.filter = filter; + } + + public String getFilter() { + return filter; + } + + public void setSeverity(int severity) { + this.severity = severity; + } + + public int getSeverity() { + return severity; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + + if(o == null) + return false; + + if(o instanceof String) + return equalsString((String) o); + if(o instanceof FilterTerm) + return equalsFilterTerm((FilterTerm) o); + + return false; + } + + private boolean equalsString(String s) { + final FilterTerm that = new FilterTerm(s, 1); + return equalsFilterTerm(that); + } + + private boolean equalsFilterTerm(FilterTerm that) { + return filter == that.getFilter(); + } +} diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index 05333af..9c46e0b 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -25,8 +25,8 @@ public static void setPlayerStrike(Player player, int newStrike) { setPlayerStrike(player.getName(), newStrike); } - public static void incrementPlayerStrike(Player player) { - setPlayerStrike(player, getPlayerStrike(player) + 1); + public static void incrementPlayerStrike(Player player, int amount) { + setPlayerStrike(player, getPlayerStrike(player) + amount); } public static void setPlayerStrike(String playerName, int newStrike) { diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java index 1bdfbfe..8778ef1 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java @@ -25,7 +25,23 @@ public static String sanitizeContent(String content, List termsWhitelist Matcher matcher = pattern.matcher(sanitizedContent); sanitizedContent = matcher.replaceAll(""); } catch (RuntimeException e) { - LogUtil.logConsoleWarning(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); + System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); + } + } + + return sanitizedContent.trim(); + } + + public static String sanitizeContent(String content, List whiteList) { + String sanitizedContent = content.toLowerCase(); + + for (String regex : whiteList) { + try { + Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(sanitizedContent); + sanitizedContent = matcher.replaceAll(""); + } catch (RuntimeException e) { + System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java index 7b008e6..9e54c41 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java @@ -1,7 +1,7 @@ package io.github.aleksandarharalanov.chatguard.core.security.filter; import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; +import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -10,28 +10,16 @@ public final class FilterDetector { private FilterDetector() {} - public static String getTrigger(String sanitizedContent) { - String trigger = checkBlacklistedTerms(sanitizedContent); - return (trigger != null) ? trigger : checkRegexPatterns(sanitizedContent); - } - - private static String checkBlacklistedTerms(String sanitizedContent) { - String[] contentTerms = sanitizedContent.split("\\s+"); - for (String term : contentTerms) { - if (FilterConfig.getTermsBlacklist().contains(term)) { - return term; - } - } - return null; - } + public static FilterTerm checkFilters(String sanitizedContent) { + for (FilterTerm filter : FilterConfig.getBlacklist()) { //TODO get blacklist should be cached so its not running each time someone sends a message in chat. this is not something that should run every time + String regex = filter.getFilter(); - private static String checkRegexPatterns(String sanitizedContent) { - for (String regex : FilterConfig.getRegexBlacklist()) { try { Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(sanitizedContent); if (matcher.find()) { - return regex.replace("\\", "\\\\").replace("\"", "\\\""); + final String cleanedFilter = regex.replace("\\", "\\\\").replace("\"", "\\\""); + return new FilterTerm(cleanedFilter, filter.getSeverity()); } } catch (RuntimeException e) { System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); 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 54bff03..d9cf2db 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 @@ -1,6 +1,7 @@ package io.github.aleksandarharalanov.chatguard.core.security.filter; import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; +import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; import io.github.aleksandarharalanov.chatguard.core.log.LogAttribute; import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.log.logger.ConsoleLogger; @@ -15,17 +16,19 @@ public final class FilterFinalizer { private FilterFinalizer() {} - public static void finalizeActions(LogType logType, Player player, String content, String trigger) { + public static void finalizeActions(LogType logType, Player player, String content, FilterTerm trigger) { if (shouldWarnPlayer(logType)) { player.sendMessage(ColorUtil.translateColorCodes(getWarningMessage(logType))); } + final String triggerFilter = trigger.getFilter(); + AudioCuePlayer.play(logType, player, false); ConsoleLogger.log(logType, player, content); FileLogger.log(logType, player, content); - DiscordLogger.log(logType, player, content, trigger); + DiscordLogger.log(logType, player, content, triggerFilter); PenaltyEnforcer.processMute(logType, player); - PenaltyEnforcer.incrementStrikeTier(logType, player); + PenaltyEnforcer.incrementStrikeTier(logType, player, trigger.getSeverity()); } private static boolean shouldWarnPlayer(LogType logType) { 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 c40bc08..fb34ccc 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 @@ -1,6 +1,7 @@ package io.github.aleksandarharalanov.chatguard.core.security.filter; import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; +import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.security.common.ContentHandler; import org.bukkit.entity.Player; @@ -22,8 +23,8 @@ public static boolean isPlayerNameBlocked(Player player) { } private static boolean isBlocked(LogType logType, Player player, String content) { - String sanitizedContent = ContentHandler.sanitizeContent(content, FilterConfig.getTermsWhitelist(), FilterConfig.getRegexWhitelist()); - String trigger = FilterDetector.getTrigger(sanitizedContent); + String sanitizedContent = ContentHandler.sanitizeContent(content, FilterConfig.getWhitelist()); + FilterTerm trigger = FilterDetector.checkFilters(sanitizedContent); if (trigger == null) { return false; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index d59bfb7..b99d11c 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -62,12 +62,12 @@ public static void processMute(LogType logType, Player player) { ))); } - public static void incrementStrikeTier(LogType logType, Player player) { + public static void incrementStrikeTier(LogType logType, Player player, int severity) { if (!logType.hasAttribute(LogAttribute.STRIKE)) { return; } - PenaltyConfig.incrementPlayerStrike(player); + PenaltyConfig.incrementPlayerStrike(player, severity); } public static IMuteHandler getMuteHandler() { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ef325d2..186f525 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -49,9 +49,7 @@ filter: - 8h - 24h rules: - whitelist: - terms: [] - regex: [] + whitelist: [] blacklist: - terms: [] - regex: [] \ No newline at end of file + - [\bexample filter\b, 1] + - \banother example\b \ No newline at end of file From f685549f41b0f0e9258e0cd6a7aa8f32cc076d61 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 00:32:41 -0400 Subject: [PATCH 10/25] add strike decay --- .../chatguard/core/config/FilterConfig.java | 17 +++++++++ .../chatguard/core/config/PenaltyConfig.java | 36 ++++++++++++++++++- .../security/penalty/PenaltyEnforcer.java | 20 +++++++++++ .../listener/player/PlayerJoinListener.java | 3 ++ src/main/resources/config.yml | 3 ++ 5 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index 8ad9ba7..fc4c872 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -1,6 +1,7 @@ package io.github.aleksandarharalanov.chatguard.core.config; import io.github.aleksandarharalanov.chatguard.ChatGuard; +import io.github.aleksandarharalanov.chatguard.core.security.common.TimeFormatter; import java.util.ArrayList; import java.util.Arrays; @@ -38,6 +39,22 @@ public static boolean getAutoMuteEnabled() { return ChatGuard.getConfig().getBoolean("filter.auto-mute.enabled", true); } + public static boolean getStrikeDecayEnabled() { + return ChatGuard.getConfig().getBoolean("filter.auto-mute.strike-decay.enabled", true); + } + + public static long getStrikeDecayPeriod() { + final String configString = ChatGuard.getConfig().getString("filter.auto-mute.strike-decay.period"); + + try { + final long futureTime = TimeFormatter.parseDateDiff(configString, true); + + return futureTime - System.currentTimeMillis(); + } catch(Exception e) { + throw new RuntimeException(e); + } + } + public static List getAutoMuteDurations() { List def = Arrays.asList("30m", "1h", "2h", "4h", "8h", "24h"); return ChatGuard.getConfig().getStringList("filter.auto-mute.duration", def); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index 9c46e0b..81d8074 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -1,6 +1,8 @@ package io.github.aleksandarharalanov.chatguard.core.config; import io.github.aleksandarharalanov.chatguard.ChatGuard; +import io.github.aleksandarharalanov.chatguard.util.config.ConfigUtil; + import org.bukkit.entity.Player; import java.util.List; @@ -25,12 +27,28 @@ public static void setPlayerStrike(Player player, int newStrike) { setPlayerStrike(player.getName(), newStrike); } + public static void decrementPlayerStrike(Player player, int amount, long updateTime) { + setPlayerStrike(player.getName(), getPlayerStrike(player) - amount, updateTime); + } + public static void incrementPlayerStrike(Player player, int amount) { setPlayerStrike(player, getPlayerStrike(player) + amount); } public static void setPlayerStrike(String playerName, int newStrike) { - ChatGuard.getStrikes().setProperty(playerName + ".strikes", newStrike); + setPlayerStrike(playerName, newStrike, System.currentTimeMillis()); + } + + public static void setPlayerStrike(String playerName, int newStrike, long updateTime) { + ConfigUtil strikes = ChatGuard.getStrikes(); + + if(newStrike <= 0) + strikes.removeProperty(playerName); + else { + strikes.setProperty(playerName + ".strikes", newStrike); + strikes.setProperty(playerName + ".updated", updateTime); + } + ChatGuard.getStrikes().save(); } @@ -45,4 +63,20 @@ public static String getAutoMuteDuration(Player player) { return penalties.get(playerPenalty); } + + public static long getLastMuteTime(Player player) { + return getLastMuteTime(player.getName()); + } + + public static long getLastMuteTime(String playerName) { + final String lastUpdatedString = ChatGuard.getStrikes().getString(playerName + ".updated"); + if(lastUpdatedString == null) + return -1; + + try { + return Long.parseLong(lastUpdatedString); + } catch (NumberFormatException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index b99d11c..b6f9bbc 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -73,4 +73,24 @@ public static void incrementStrikeTier(LogType logType, Player player, int sever public static IMuteHandler getMuteHandler() { return muteHandler; } + + public static void updatePlayerStrikes(Player player) { + if(!FilterConfig.getStrikeDecayEnabled()) + return; + + final long lastMuteTime = PenaltyConfig.getLastMuteTime(player); + if(lastMuteTime == -1) // player has no strikes + return; + + final long timePassed = System.currentTimeMillis() - lastMuteTime; + final long decayPeriod = FilterConfig.getStrikeDecayPeriod(); + + final int strikesToRevoke = (int) (timePassed / decayPeriod); + + // this is only really done to prevent longer decay times than would normally happen under the config + final long totalRevokePeriod = strikesToRevoke * decayPeriod; + final long newPlayerUpdatedTime = lastMuteTime + totalRevokePeriod; + + PenaltyConfig.decrementPlayerStrike(player, strikesToRevoke, newPlayerUpdatedTime); + } } 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 b7b10d8..eb1de18 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.penalty.PenaltyEnforcer; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerJoinEvent; @@ -18,5 +19,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { player.kickPlayer(ColorUtil.translateColorCodes("&cName contains bad words.")); return; } + + PenaltyEnforcer.updatePlayerStrikes(player); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 186f525..e215330 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -48,6 +48,9 @@ filter: - 4h - 8h - 24h + strike-decay: + enabled: true + period: 1w rules: whitelist: [] blacklist: From 50ef9ecd131d435e52d0864547574e9832dad6f1 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 00:35:31 -0400 Subject: [PATCH 11/25] drop uneeded LogUtil import --- .../chatguard/command/subcommand/CaptchaCommand.java | 1 - .../chatguard/command/subcommand/HelpCommand.java | 1 - .../chatguard/command/subcommand/ReloadCommand.java | 1 - .../chatguard/command/subcommand/StrikeCommand.java | 1 - .../chatguard/core/log/logger/ConsoleLogger.java | 1 - .../chatguard/core/log/logger/DiscordLogger.java | 1 - .../chatguard/core/security/common/ContentHandler.java | 2 -- .../chatguard/core/security/penalty/PenaltyEnforcer.java | 1 - 8 files changed, 9 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java index 18b97f5..b781e6b 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/CaptchaCommand.java @@ -6,7 +6,6 @@ import io.github.aleksandarharalanov.chatguard.util.auth.AccessUtil; import io.github.aleksandarharalanov.chatguard.core.misc.AudioCuePlayer; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java index b08acc7..d4837c7 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/HelpCommand.java @@ -1,6 +1,5 @@ package io.github.aleksandarharalanov.chatguard.command.subcommand; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java index ee7d3d9..eef8bb2 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java @@ -2,7 +2,6 @@ import io.github.aleksandarharalanov.chatguard.ChatGuard; import io.github.aleksandarharalanov.chatguard.util.auth.AccessUtil; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java index b1806e4..c9bf08b 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java @@ -3,7 +3,6 @@ import io.github.aleksandarharalanov.chatguard.core.config.PenaltyConfig; import io.github.aleksandarharalanov.chatguard.util.auth.AccessUtil; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java index 0d739ab..0ef1bbc 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/log/logger/ConsoleLogger.java @@ -4,7 +4,6 @@ import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; import io.github.aleksandarharalanov.chatguard.core.log.LogAttribute; import io.github.aleksandarharalanov.chatguard.core.log.LogType; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import org.bukkit.entity.Player; public final class ConsoleLogger { 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 ae21988..35f52fa 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 @@ -5,7 +5,6 @@ import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.log.embed.*; import io.github.aleksandarharalanov.chatguard.util.log.DiscordUtil; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java index 8778ef1..76ccff6 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java @@ -1,7 +1,5 @@ package io.github.aleksandarharalanov.chatguard.core.security.common; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; - import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index b6f9bbc..68a1369 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -8,7 +8,6 @@ import io.github.aleksandarharalanov.chatguard.core.security.common.TimeFormatter; import io.github.aleksandarharalanov.chatguard.core.security.penalty.plugin.EssentialsMuteHandler; import io.github.aleksandarharalanov.chatguard.core.security.penalty.plugin.ZCoreMuteHandler; -import io.github.aleksandarharalanov.chatguard.util.log.LogUtil; import io.github.aleksandarharalanov.chatguard.util.misc.ColorUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; From 575ef95dcc3cf215c9aa8c6d75a57cab439686df Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 00:36:19 -0400 Subject: [PATCH 12/25] yet another forgotten strike limit removal --- .../chatguard/command/subcommand/StrikeCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java index c9bf08b..8d7dc97 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/StrikeCommand.java @@ -19,7 +19,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } if (args.length < 2) { - sender.sendMessage(ColorUtil.translateColorCodes("&cUsage: /cg strike [0-5]")); + sender.sendMessage(ColorUtil.translateColorCodes("&cUsage: /cg strike [strikes]")); return true; } From 41504bf4a1924bf7bc9129769abe74ec30f7d7ff Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 02:01:52 -0400 Subject: [PATCH 13/25] add player warning system --- .../chatguard/core/config/FilterConfig.java | 8 ++++ .../chatguard/core/config/PenaltyConfig.java | 24 ++++++++++- .../core/security/filter/FilterFinalizer.java | 42 +++++++++++++------ .../security/penalty/PenaltyEnforcer.java | 7 ++++ src/main/resources/config.yml | 3 ++ 5 files changed, 70 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index fc4c872..f46706b 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -55,6 +55,14 @@ public static long getStrikeDecayPeriod() { } } + public static int getWarningcount() { + return ChatGuard.getConfig().getInt("filter.auto-mute.warnings.warning-count", 0); + } + + public static int getWarningBypassThreashold() { + return ChatGuard.getConfig().getInt("filter.auto-mute.warnings.severity-bypass-threashold", 3); + } + public static List getAutoMuteDurations() { List def = Arrays.asList("30m", "1h", "2h", "4h", "8h", "24h"); return ChatGuard.getConfig().getStringList("filter.auto-mute.duration", def); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java index 81d8074..5dd6079 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/PenaltyConfig.java @@ -23,6 +23,14 @@ public static int getPlayerStrike(String playerName) { return ChatGuard.getStrikes().getInt(playerName + ".strikes", 0); } + public static int getPlayerWarnings(Player player) { + return getPlayerWarnings(player.getName()); + } + + public static int getPlayerWarnings(String playerName) { + return ChatGuard.getStrikes().getInt(playerName + ".warnings", 0); + } + public static void setPlayerStrike(Player player, int newStrike) { setPlayerStrike(player.getName(), newStrike); } @@ -42,7 +50,9 @@ public static void setPlayerStrike(String playerName, int newStrike) { public static void setPlayerStrike(String playerName, int newStrike, long updateTime) { ConfigUtil strikes = ChatGuard.getStrikes(); - if(newStrike <= 0) + newStrike = Math.max(newStrike, 0); + + if(newStrike == 0 && getPlayerWarnings(playerName) <= 0) strikes.removeProperty(playerName); else { strikes.setProperty(playerName + ".strikes", newStrike); @@ -52,6 +62,18 @@ public static void setPlayerStrike(String playerName, int newStrike, long update ChatGuard.getStrikes().save(); } + public static void incrementPlayerWarnings(Player player) { + setPlayerWarnings(player, getPlayerWarnings(player) + 1); + } + + public static void setPlayerWarnings(Player player, int warnings) { + setPlayerWarnings(player.getName(), warnings); + } + + public static void setPlayerWarnings(String playerName, int warnings) { + ChatGuard.getStrikes().setProperty(playerName + ".warnings", warnings); + } + public static String getAutoMuteDuration(Player player) { final List penalties = FilterConfig.getAutoMuteDurations(); final int maxPenalty = penalties.size() - 1; 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 d9cf2db..a54f8c9 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 @@ -2,6 +2,7 @@ import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; +import io.github.aleksandarharalanov.chatguard.core.config.PenaltyConfig; import io.github.aleksandarharalanov.chatguard.core.log.LogAttribute; import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.log.logger.ConsoleLogger; @@ -17,29 +18,44 @@ public final class FilterFinalizer { private FilterFinalizer() {} public static void finalizeActions(LogType logType, Player player, String content, FilterTerm trigger) { - if (shouldWarnPlayer(logType)) { - player.sendMessage(ColorUtil.translateColorCodes(getWarningMessage(logType))); - } - final String triggerFilter = trigger.getFilter(); - + AudioCuePlayer.play(logType, player, false); ConsoleLogger.log(logType, player, content); FileLogger.log(logType, player, content); DiscordLogger.log(logType, player, content, triggerFilter); + + if (shouldWarn(logType, player, trigger.getSeverity())) { + PenaltyEnforcer.handleWarning(player); + return; + } + + if (shouldSendFeedback(logType)) { + final String feedbackMessage = ColorUtil.translateColorCodes("&cBad words censored. Please follow the server rules"); + player.sendMessage(feedbackMessage); + } + PenaltyEnforcer.processMute(logType, player); PenaltyEnforcer.incrementStrikeTier(logType, player, trigger.getSeverity()); } - private static boolean shouldWarnPlayer(LogType logType) { - return logType.hasAttribute(LogAttribute.WARN) && FilterConfig.getWarnPlayerEnabled(); + private static boolean shouldWarn(LogType logType, Player player, int severity) { + if (!logType.hasAttribute(LogAttribute.MUTE)) + return false; + + final int warningBypassThreashold = FilterConfig.getWarningBypassThreashold(); + if(severity >= warningBypassThreashold) + return false; + + final int playerWarnings = PenaltyConfig.getPlayerWarnings(player); + final int maxWarnings = FilterConfig.getWarningcount(); + if(playerWarnings >= maxWarnings) + return false; + + return true; } - private static String getWarningMessage(LogType logType) { - if (logType == LogType.SIGN) { - return "&cSign censored due to bad words."; - } else { - return "&cMessage cancelled due to bad words."; - } + private static boolean shouldSendFeedback(LogType logType) { + return logType.hasAttribute(LogAttribute.WARN) && FilterConfig.getWarnPlayerEnabled(); } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index 68a1369..bd9f51e 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -92,4 +92,11 @@ public static void updatePlayerStrikes(Player player) { PenaltyConfig.decrementPlayerStrike(player, strikesToRevoke, newPlayerUpdatedTime); } + + public static void handleWarning(Player player) { + PenaltyConfig.incrementPlayerWarnings(player); + + final String coloredMessage = ColorUtil.translateColorCodes("&cYou have been warned for bad words. Warning number: " + PenaltyConfig.getPlayerWarnings(player)); + player.sendMessage(coloredMessage); + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e215330..444ddcf 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -51,6 +51,9 @@ filter: strike-decay: enabled: true period: 1w + warnings: + warning-count: 3 + severity-bypass-threshold: 3 rules: whitelist: [] blacklist: From 6d095ed31dd6f4eed2d3e88cd283d3fb94d9d747 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 02:39:46 -0400 Subject: [PATCH 14/25] fix some strike bugs --- .../chatguard/core/log/embed/ChatEmbed.java | 6 ++++-- .../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 | 6 ++---- 5 files changed, 21 insertions(+), 12 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 cfa120e..f57093e 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,10 +11,12 @@ public final class ChatEmbed extends DiscordEmbed { private final String trigger; + private final int severity; - public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigger) { + public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity) { super(plugin, player, content); this.trigger = trigger; + this.severity = severity; setupBaseEmbed(); } @@ -22,7 +24,7 @@ public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigge protected void setupEmbedDetails() { embed.setDescription(String.format( "Strike: %d - Mute Duration: %s", - PenaltyConfig.getPlayerStrike(player) + 1, + PenaltyConfig.getPlayerStrike(player) + severity, 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 9c4ed84..e9cdf08 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,10 +11,12 @@ public final class NameEmbed extends DiscordEmbed { private final String trigger; + private final int severity; - public NameEmbed(JavaPlugin plugin, Player player, String content, String trigger) { + public NameEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity) { 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 c845e79..d56bd6e 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,10 +11,12 @@ public final class SignEmbed extends DiscordEmbed { private final String trigger; + private final int severity; - public SignEmbed(JavaPlugin plugin, Player player, String content, String trigger) { + public SignEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity) { 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 35f52fa..3f82695 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 @@ -2,6 +2,7 @@ import io.github.aleksandarharalanov.chatguard.ChatGuard; import io.github.aleksandarharalanov.chatguard.core.config.DiscordConfig; +import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.log.embed.*; import io.github.aleksandarharalanov.chatguard.util.log.DiscordUtil; @@ -14,7 +15,11 @@ public final class DiscordLogger { private DiscordLogger() {} - public static void log(LogType logType, Player player, String content, String trigger) { + public static void log(LogType logType, Player player, String content, FilterTerm triggerFilter) + { + final String trigger = triggerFilter.getFilter(); + final int severity = triggerFilter.getSeverity(); + if (!DiscordConfig.getDiscordLogEnabled(logType)) { return; } @@ -30,13 +35,13 @@ public static void log(LogType logType, Player player, String content, String tr DiscordEmbed embed; switch (logType) { case CHAT: - embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger); + embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger, severity); break; case SIGN: - embed = new SignEmbed(ChatGuard.getInstance(), player, content, trigger); + embed = new SignEmbed(ChatGuard.getInstance(), player, content, trigger, severity); break; case NAME: - embed = new NameEmbed(ChatGuard.getInstance(), player, content, trigger); + embed = new NameEmbed(ChatGuard.getInstance(), player, content, trigger, severity); 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 a54f8c9..6cd7cb0 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 @@ -18,12 +18,10 @@ public final class FilterFinalizer { private FilterFinalizer() {} public static void finalizeActions(LogType logType, Player player, String content, FilterTerm trigger) { - final String triggerFilter = trigger.getFilter(); - AudioCuePlayer.play(logType, player, false); ConsoleLogger.log(logType, player, content); FileLogger.log(logType, player, content); - DiscordLogger.log(logType, player, content, triggerFilter); + DiscordLogger.log(logType, player, content, trigger); if (shouldWarn(logType, player, trigger.getSeverity())) { PenaltyEnforcer.handleWarning(player); @@ -35,8 +33,8 @@ public static void finalizeActions(LogType logType, Player player, String conten player.sendMessage(feedbackMessage); } - PenaltyEnforcer.processMute(logType, player); PenaltyEnforcer.incrementStrikeTier(logType, player, trigger.getSeverity()); + PenaltyEnforcer.processMute(logType, player); } private static boolean shouldWarn(LogType logType, Player player, int severity) { From 1e5c69429921a96405bd02ca4eacba9096186ad2 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 13:00:27 -0400 Subject: [PATCH 15/25] drop useless maven repo --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index a80ebcb..6f76818 100644 --- a/pom.xml +++ b/pom.xml @@ -17,11 +17,6 @@ - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - johnymuffin-nexus-releases https://repository.johnymuffin.com/repository/maven-public/ From cc35265c9c20be5dd98116e2118037ccbdfe4127 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 15:51:39 -0400 Subject: [PATCH 16/25] distinguish warnings from mutes on discord --- .../chatguard/core/log/embed/ChatEmbed.java | 16 +++++++++++++--- .../chatguard/core/log/logger/DiscordLogger.java | 4 ++-- .../core/security/filter/FilterFinalizer.java | 8 +++++--- 3 files changed, 20 insertions(+), 8 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 f57093e..7cfb444 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 @@ -12,21 +12,31 @@ 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) { + public ChatEmbed(JavaPlugin plugin, Player player, String content, String trigger, int severity, boolean warned) { super(plugin, player, content); this.trigger = trigger; this.severity = severity; + this.warned = warned; setupBaseEmbed(); } @Override protected void setupEmbedDetails() { - embed.setDescription(String.format( + if(warned) { + embed.setDescription(String.format( + "Warning: %d", + PenaltyConfig.getPlayerWarnings(player) + 1 + )); + } + else { + embed.setDescription(String.format( "Strike: %d - Mute Duration: %s", PenaltyConfig.getPlayerStrike(player) + severity, PenaltyConfig.getAutoMuteDuration(player) - )); + )); + } embed.setTitle("Chat Filter") .addField("Content:", content, false) 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 3f82695..c005aaa 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 @@ -15,7 +15,7 @@ public final class DiscordLogger { private DiscordLogger() {} - public static void log(LogType logType, Player player, String content, FilterTerm triggerFilter) + public static void log(LogType logType, Player player, String content, FilterTerm triggerFilter, boolean warned) { final String trigger = triggerFilter.getFilter(); final int severity = triggerFilter.getSeverity(); @@ -35,7 +35,7 @@ public static void log(LogType logType, Player player, String content, FilterTer DiscordEmbed embed; switch (logType) { case CHAT: - embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger, severity); + embed = new ChatEmbed(ChatGuard.getInstance(), player, content, trigger, severity, warned); break; case SIGN: embed = new SignEmbed(ChatGuard.getInstance(), player, content, trigger, severity); 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 6cd7cb0..2d7189b 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 @@ -18,12 +18,14 @@ public final class FilterFinalizer { private FilterFinalizer() {} public static void finalizeActions(LogType logType, Player player, String content, FilterTerm trigger) { + final boolean shouldWarn = shouldWarn(logType, player, trigger.getSeverity()); + AudioCuePlayer.play(logType, player, false); ConsoleLogger.log(logType, player, content); FileLogger.log(logType, player, content); - DiscordLogger.log(logType, player, content, trigger); - - if (shouldWarn(logType, player, trigger.getSeverity())) { + DiscordLogger.log(logType, player, content, trigger, shouldWarn); + + if (shouldWarn) { PenaltyEnforcer.handleWarning(player); return; } From f465c3d3246c193e36f56fcbad41525385f044f9 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 16:01:05 -0400 Subject: [PATCH 17/25] add blacklist caching this was done to stop regeneration of the blacklist FilterTerms list on every event processed --- .../github/aleksandarharalanov/chatguard/ChatGuard.java | 7 +++++++ .../chatguard/command/subcommand/ReloadCommand.java | 2 +- .../chatguard/core/config/FilterConfig.java | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java b/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java index 8cee804..162497e 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/ChatGuard.java @@ -1,6 +1,7 @@ package io.github.aleksandarharalanov.chatguard; import io.github.aleksandarharalanov.chatguard.command.ChatGuardCommand; +import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; import io.github.aleksandarharalanov.chatguard.listener.block.SignChangeListener; import io.github.aleksandarharalanov.chatguard.listener.player.*; import io.github.aleksandarharalanov.chatguard.util.config.ConfigUtil; @@ -93,4 +94,10 @@ public static ConfigUtil getStrikes() { public static ConfigUtil getCaptchas() { return captchas; } + + public static void reloadConfig() { + getConfig().loadAndLog(); + + FilterConfig.generateBlackListCache(); + } } \ No newline at end of file diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java index eef8bb2..0c523f6 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/command/subcommand/ReloadCommand.java @@ -21,7 +21,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } System.out.println("[ChatGuard] Configurations reloaded."); - ChatGuard.getConfig().loadAndLog(); + ChatGuard.reloadConfig(); ChatGuard.getDiscord().loadAndLog(); ChatGuard.getStrikes().loadAndLog(); ChatGuard.getCaptchas().loadAndLog(); diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index f46706b..80f65fd 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -9,6 +9,8 @@ public final class FilterConfig { + private static List blacklist; + private FilterConfig() {} public static boolean getChatEnabled() { @@ -73,6 +75,13 @@ public static List getWhitelist() { } public static List getBlacklist() { + if (blacklist == null) + generateBlackListCache(); + + return blacklist; + } + + public static List generateBlackListCache() { List entries = ChatGuard.getConfig().getList("filter.rules.blacklist"); List output = new ArrayList<>(); From a03a4ac68fe53ac85173899f62559d8ffc266448 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 16:17:02 -0400 Subject: [PATCH 18/25] fix bug with captcha discord logging --- .../chatguard/core/log/logger/DiscordLogger.java | 16 +++++++++++++--- .../core/security/captcha/CaptchaHandler.java | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) 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 c005aaa..6591f6b 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 @@ -15,11 +15,12 @@ public final class DiscordLogger { private DiscordLogger() {} + public static void log(LogType logType, Player player, String content) { + log(logType, player, content, null, false); + } + public static void log(LogType logType, Player player, String content, FilterTerm triggerFilter, boolean warned) { - final String trigger = triggerFilter.getFilter(); - final int severity = triggerFilter.getSeverity(); - if (!DiscordConfig.getDiscordLogEnabled(logType)) { return; } @@ -32,6 +33,15 @@ public static void log(LogType logType, Player player, String content, FilterTer webhook.setUsername(webhookName); webhook.setAvatarUrl(webhookIcon); + + String trigger = ""; + int severity = 0; + + if(triggerFilter != null) { + trigger = triggerFilter.getFilter(); + severity = triggerFilter.getSeverity(); + } + DiscordEmbed embed; switch (logType) { case CHAT: diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/captcha/CaptchaHandler.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/captcha/CaptchaHandler.java index f6e290c..31afc56 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/captcha/CaptchaHandler.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/captcha/CaptchaHandler.java @@ -38,7 +38,7 @@ public static void processCaptchaTrigger(Player player, String content) { AudioCuePlayer.play(LogType.CAPTCHA, player, false); ConsoleLogger.log(LogType.CAPTCHA, player, content); - DiscordLogger.log(LogType.CAPTCHA, player, content, null); + DiscordLogger.log(LogType.CAPTCHA, player, content); for (Player p : Bukkit.getServer().getOnlinePlayers()) { if (AccessUtil.senderHasPermission(p, "chatguard.captcha")) { From 0517b623fa4e0e76e5ac27763a52a12fcd8c323f Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 16:19:01 -0400 Subject: [PATCH 19/25] fix bug with blacklist generation --- .../chatguard/core/config/FilterConfig.java | 8 +++----- .../chatguard/core/security/filter/FilterDetector.java | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index 80f65fd..15e87c3 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -81,10 +81,10 @@ public static List getBlacklist() { return blacklist; } - public static List generateBlackListCache() { + public static void generateBlackListCache() { List entries = ChatGuard.getConfig().getList("filter.rules.blacklist"); - List output = new ArrayList<>(); + blacklist = new ArrayList<>(); for (Object entry : entries) { final FilterTerm filterTerm; @@ -102,9 +102,7 @@ else if (entry instanceof String) { else throw new RuntimeException("unknown type in config for blacklist. use either (String, Int) or String.\nif confused, ask RitzKid76"); - output.add(filterTerm); + blacklist.add(filterTerm); } - - return output; } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java index 9e54c41..386b1bb 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java @@ -11,7 +11,7 @@ public final class FilterDetector { private FilterDetector() {} public static FilterTerm checkFilters(String sanitizedContent) { - for (FilterTerm filter : FilterConfig.getBlacklist()) { //TODO get blacklist should be cached so its not running each time someone sends a message in chat. this is not something that should run every time + for (FilterTerm filter : FilterConfig.getBlacklist()) { String regex = filter.getFilter(); try { From 173b4357fc20199a148eebf103928f4d8371d247 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:12:21 -0400 Subject: [PATCH 20/25] add filter names for discord discord previously used the regex as the trigger reason, but to most staff that is useless --- .../chatguard/core/config/FilterConfig.java | 37 ++++++++++++------- .../chatguard/core/config/FilterTerm.java | 22 +++++------ .../core/log/logger/DiscordLogger.java | 2 +- .../core/security/filter/FilterDetector.java | 2 +- src/main/resources/config.yml | 4 +- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index 15e87c3..8007e17 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -84,25 +84,36 @@ public static List getBlacklist() { public static void generateBlackListCache() { List entries = ChatGuard.getConfig().getList("filter.rules.blacklist"); - blacklist = new ArrayList<>(); - for (Object entry : entries) { - final FilterTerm filterTerm; + List newBlackList = new ArrayList<>(); + + try { + for (Object entry : entries) { + final FilterTerm filterTerm; - if (entry instanceof List) { List pair = (List) entry; + if (pair.size() == 2) { + final String name = (String) pair.get(0); + final String filter = (String) pair.get(1); - final String filter = (String) pair.get(0); - final int severity = (int) pair.get(1); + filterTerm = new FilterTerm(name, filter); + } else { + final String name = (String) pair.get(0); + final String filter = (String) pair.get(1); - filterTerm = new FilterTerm(filter, severity); - } - else if (entry instanceof String) { - filterTerm = new FilterTerm((String) entry); + final int severity = (int) pair.get(2); + + filterTerm = new FilterTerm(name, filter, severity); + } + + newBlackList.add(filterTerm); } - else - throw new RuntimeException("unknown type in config for blacklist. use either (String, Int) or String.\nif confused, ask RitzKid76"); - blacklist.add(filterTerm); + blacklist = newBlackList; + } + catch( + ClassCastException e + ) { + throw new RuntimeException("unknown type in config for blacklist. use either (String, String, Int) or (String, String).\nif confused, ask RitzKid76"); } } } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java index 8c9104a..8ab3500 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterTerm.java @@ -1,30 +1,30 @@ package io.github.aleksandarharalanov.chatguard.core.config; public class FilterTerm { - private String filter = ""; + private String name; + private String filter; + private int severity = 1; - public FilterTerm(String filter) { + public FilterTerm(String name, String filter) { + this.name = name; this.filter = filter; } + + public FilterTerm(String name, String filter, int severity) { + this(name, filter); - public FilterTerm(String filter, int severity) { - this.filter = filter; this.severity = severity; } - public void setFilter(String filter) { - this.filter = filter; + public String getName() { + return name; } public String getFilter() { return filter; } - public void setSeverity(int severity) { - this.severity = severity; - } - public int getSeverity() { return severity; } @@ -46,7 +46,7 @@ public boolean equals(Object o) { } private boolean equalsString(String s) { - final FilterTerm that = new FilterTerm(s, 1); + final FilterTerm that = new FilterTerm("", s); return equalsFilterTerm(that); } 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 6591f6b..54b7c96 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 @@ -38,7 +38,7 @@ public static void log(LogType logType, Player player, String content, FilterTer int severity = 0; if(triggerFilter != null) { - trigger = triggerFilter.getFilter(); + trigger = triggerFilter.getName(); severity = triggerFilter.getSeverity(); } diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java index 386b1bb..04fbe00 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java @@ -19,7 +19,7 @@ public static FilterTerm checkFilters(String sanitizedContent) { Matcher matcher = pattern.matcher(sanitizedContent); if (matcher.find()) { final String cleanedFilter = regex.replace("\\", "\\\\").replace("\"", "\\\""); - return new FilterTerm(cleanedFilter, filter.getSeverity()); + return new FilterTerm(filter.getName(), cleanedFilter, filter.getSeverity()); } } catch (RuntimeException e) { System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 444ddcf..4a1d2b7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -57,5 +57,5 @@ filter: rules: whitelist: [] blacklist: - - [\bexample filter\b, 1] - - \banother example\b \ No newline at end of file + - [name, \bexample filter\b, 2] + - [anothername, \banother example\b] \ No newline at end of file From f1d832986bccf3e0deab8d7a6c5442f6e5623daf Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:20:41 -0400 Subject: [PATCH 21/25] remove color codes from blacklist checks previously prepending an &f to any bad word would cause it to fail the filter check --- .../chatguard/core/security/common/ContentHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java index 76ccff6..a8c53bb 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/common/ContentHandler.java @@ -32,6 +32,8 @@ public static String sanitizeContent(String content, List termsWhitelist public static String sanitizeContent(String content, List whiteList) { String sanitizedContent = content.toLowerCase(); + sanitizedContent = sanitizedContent.trim(); + sanitizedContent = decolorize(sanitizedContent); for (String regex : whiteList) { try { @@ -46,6 +48,14 @@ public static String sanitizeContent(String content, List whiteList) { return sanitizedContent.trim(); } + private static String decolorize(String input) { + // there is a method for this already in ChatColor for bukkit, but it only removes § and not & + input = input.replaceAll("(?i)§[0-F]", ""); + input = input.replaceAll("(?i)&[0-F]", ""); + + return input; + } + public static String mergeContent(String[] content) { return Stream.of(content) .map(String::toLowerCase) From 6b9d84bd676b79f19d1da93c3f5ccc031dff37f5 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:47:08 -0400 Subject: [PATCH 22/25] change error message --- .../aleksandarharalanov/chatguard/core/config/FilterConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java index 8007e17..96855d2 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/config/FilterConfig.java @@ -113,7 +113,7 @@ public static void generateBlackListCache() { catch( ClassCastException e ) { - throw new RuntimeException("unknown type in config for blacklist. use either (String, String, Int) or (String, String).\nif confused, ask RitzKid76"); + throw new RuntimeException("unknown type in config for blacklist. use either (String, String, Int) or (String, String). if confused, ask RitzKid76"); } } } From 032d26d06771a6d456bc26ef8f8adc7aef2f0b2b Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:51:26 -0400 Subject: [PATCH 23/25] added player flag explanation any message flagged will now tell the player which part of their message was flagged and what word was interpreted. --- .../core/security/filter/FilterDetector.java | 9 ++++-- .../core/security/filter/FilterFinalizer.java | 29 ++++++++++++------- .../core/security/filter/FilterHandler.java | 2 +- .../core/security/filter/FilterTrigger.java | 21 ++++++++++++++ .../security/penalty/PenaltyEnforcer.java | 2 +- 5 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterTrigger.java diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java index 04fbe00..a582198 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterDetector.java @@ -10,16 +10,21 @@ public final class FilterDetector { private FilterDetector() {} - public static FilterTerm checkFilters(String sanitizedContent) { + public static FilterTrigger checkFilters(String sanitizedContent) { for (FilterTerm filter : FilterConfig.getBlacklist()) { String regex = filter.getFilter(); try { Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(sanitizedContent); + if (matcher.find()) { + final String flaggedSection = matcher.group(); + final String cleanedFilter = regex.replace("\\", "\\\\").replace("\"", "\\\""); - return new FilterTerm(filter.getName(), cleanedFilter, filter.getSeverity()); + final FilterTerm filterTerm = new FilterTerm(filter.getName(), cleanedFilter, filter.getSeverity()); + + return new FilterTrigger(flaggedSection, filterTerm); } } catch (RuntimeException e) { System.out.println(String.format("[ChatGuard] Invalid regex pattern '%s' in config: %s", regex, e.getMessage())); 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 2d7189b..a1e687b 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 @@ -17,25 +17,34 @@ public final class FilterFinalizer { private FilterFinalizer() {} - public static void finalizeActions(LogType logType, Player player, String content, FilterTerm trigger) { - final boolean shouldWarn = shouldWarn(logType, player, trigger.getSeverity()); + public static void finalizeActions(LogType logType, Player player, String content, FilterTrigger trigger) { + final FilterTerm filterTerm = trigger.getFilterTerm(); + 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, trigger, shouldWarn); + DiscordLogger.log(logType, player, content, filterTerm, shouldWarn); - if (shouldWarn) { - PenaltyEnforcer.handleWarning(player); - return; + if (shouldSendFeedback(logType)) { + final String badWord = filterTerm.getName(); + final String flaggedSection = trigger.getSection(); + + player.sendMessage(ColorUtil.translateColorCodes( + String.format("&cYour message contains the flagged word: '%s'.", badWord) + )); + player.sendMessage(ColorUtil.translateColorCodes( + String.format("&cSection flagged: '%s'.", flaggedSection) + )); } - if (shouldSendFeedback(logType)) { - final String feedbackMessage = ColorUtil.translateColorCodes("&cBad words censored. Please follow the server rules"); - player.sendMessage(feedbackMessage); + if (shouldWarn) { + PenaltyEnforcer.handleWarning(player); + return; // prevent the mute from being issued } - PenaltyEnforcer.incrementStrikeTier(logType, player, trigger.getSeverity()); + PenaltyEnforcer.incrementStrikeTier(logType, player, severity); PenaltyEnforcer.processMute(logType, player); } 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 fb34ccc..ba20580 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 @@ -24,7 +24,7 @@ public static boolean isPlayerNameBlocked(Player player) { private static boolean isBlocked(LogType logType, Player player, String content) { String sanitizedContent = ContentHandler.sanitizeContent(content, FilterConfig.getWhitelist()); - FilterTerm trigger = FilterDetector.checkFilters(sanitizedContent); + FilterTrigger trigger = FilterDetector.checkFilters(sanitizedContent); if (trigger == null) { return false; diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterTrigger.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterTrigger.java new file mode 100644 index 0000000..7285dda --- /dev/null +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/filter/FilterTrigger.java @@ -0,0 +1,21 @@ +package io.github.aleksandarharalanov.chatguard.core.security.filter; + +import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; + +public class FilterTrigger { + private final String section; + private final FilterTerm filterTerm; + + public FilterTrigger(String section, FilterTerm filterTerm) { + this.section = section; + this.filterTerm = filterTerm; + } + + public String getSection() { + return section; + } + + public FilterTerm getFilterTerm() { + return filterTerm; + } +} diff --git a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java index bd9f51e..ffc5f3c 100644 --- a/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java +++ b/src/main/java/io/github/aleksandarharalanov/chatguard/core/security/penalty/PenaltyEnforcer.java @@ -96,7 +96,7 @@ public static void updatePlayerStrikes(Player player) { public static void handleWarning(Player player) { PenaltyConfig.incrementPlayerWarnings(player); - final String coloredMessage = ColorUtil.translateColorCodes("&cYou have been warned for bad words. Warning number: " + PenaltyConfig.getPlayerWarnings(player)); + final String coloredMessage = ColorUtil.translateColorCodes("&cWarning number: " + PenaltyConfig.getPlayerWarnings(player)); player.sendMessage(coloredMessage); } } From a3dec7be7bf75f74952d92f5f33e762d6b63cd72 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:52:04 -0400 Subject: [PATCH 24/25] remove unused import --- .../chatguard/core/security/filter/FilterHandler.java | 1 - 1 file changed, 1 deletion(-) 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 ba20580..8ca3185 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 @@ -1,7 +1,6 @@ package io.github.aleksandarharalanov.chatguard.core.security.filter; import io.github.aleksandarharalanov.chatguard.core.config.FilterConfig; -import io.github.aleksandarharalanov.chatguard.core.config.FilterTerm; import io.github.aleksandarharalanov.chatguard.core.log.LogType; import io.github.aleksandarharalanov.chatguard.core.security.common.ContentHandler; import org.bukkit.entity.Player; From 57a45e80bc5d176a245a2039c9fe7a3ec1de5ad2 Mon Sep 17 00:00:00 2001 From: RitzKid76 Date: Fri, 11 Apr 2025 18:56:09 -0400 Subject: [PATCH 25/25] disable action workflow --- .github/workflows/build-and-test.yaml | 46 ++++++++++++++------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index 93c1363..017c4f1 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -1,28 +1,30 @@ -name: build-and-test -on: - pull_request: - branches: - - master +### COMMENTED OUT FOR NOW SINCE THIS BUILD NO LONGER USES GRADLE ### -jobs: - build-and-test: - runs-on: ubuntu-latest +# name: build-and-test +# on: +# pull_request: +# branches: +# - master - steps: - - name: Checkout - uses: actions/checkout@v4 +# jobs: +# build-and-test: +# runs-on: ubuntu-latest - - name: Set up JDK 1.8 - uses: actions/setup-java@v2 - with: - java-version: 8 - distribution: 'temurin' +# steps: +# - name: Checkout +# uses: actions/checkout@v4 - - name: Set up Gradle - uses: gradle/actions/setup-gradle@v3 +# - name: Set up JDK 1.8 +# uses: actions/setup-java@v2 +# with: +# java-version: 8 +# distribution: 'temurin' - - name: Build with Gradle - run: ./gradlew build +# - name: Set up Gradle +# uses: gradle/actions/setup-gradle@v3 - - name: Test with Gradle - run: ./gradlew test +# - name: Build with Gradle +# run: ./gradlew build + +# - name: Test with Gradle +# run: ./gradlew test