From c9603c016e9318d2bd6190349bf3d54a8036d3ca Mon Sep 17 00:00:00 2001 From: obvWolf Date: Tue, 17 Oct 2023 22:04:38 -0500 Subject: [PATCH] Decided the moment before update that some of my code could be simplified into generics so that will come first --- .../sentinel/{server => data}/Action.java | 4 +- .../sentinel/{server => data}/ActionType.java | 2 +- .../github/thetrouper/sentinel/data/FAT.java | 50 ++++++++ .../sentinel/data/FilterAction.java | 105 ++++++++++++++++ .../sentinel/discord/WebhookSender.java | 54 -------- .../sentinel/events/CMDBlockPlace.java | 4 +- .../sentinel/events/CMDBlockUse.java | 4 +- .../sentinel/events/CMDMinecartPlace.java | 4 +- .../sentinel/events/CMDMinecartUse.java | 4 +- .../sentinel/events/CommandEvent.java | 4 +- .../thetrouper/sentinel/events/NBTEvents.java | 7 +- .../sentinel/server/FilterAction.java | 119 ------------------ .../server/functions/ProfanityFilter.java | 42 ++++--- src/main/resources/lang/en_us.json | 4 +- 14 files changed, 197 insertions(+), 210 deletions(-) rename src/main/java/io/github/thetrouper/sentinel/{server => data}/Action.java (98%) rename src/main/java/io/github/thetrouper/sentinel/{server => data}/ActionType.java (97%) create mode 100644 src/main/java/io/github/thetrouper/sentinel/data/FAT.java create mode 100644 src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java delete mode 100644 src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java diff --git a/src/main/java/io/github/thetrouper/sentinel/server/Action.java b/src/main/java/io/github/thetrouper/sentinel/data/Action.java similarity index 98% rename from src/main/java/io/github/thetrouper/sentinel/server/Action.java rename to src/main/java/io/github/thetrouper/sentinel/data/Action.java index 526a01c..ff7e7de 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/Action.java +++ b/src/main/java/io/github/thetrouper/sentinel/data/Action.java @@ -1,9 +1,7 @@ -package io.github.thetrouper.sentinel.server; +package io.github.thetrouper.sentinel.data; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.discord.DiscordWebhook; import io.github.thetrouper.sentinel.server.util.FileUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/ActionType.java b/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java similarity index 97% rename from src/main/java/io/github/thetrouper/sentinel/server/ActionType.java rename to src/main/java/io/github/thetrouper/sentinel/data/ActionType.java index 7dcbf4a..16bd7c4 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/ActionType.java +++ b/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.sentinel.server; +package io.github.thetrouper.sentinel.data; import java.awt.*; diff --git a/src/main/java/io/github/thetrouper/sentinel/data/FAT.java b/src/main/java/io/github/thetrouper/sentinel/data/FAT.java new file mode 100644 index 0000000..7fab4ba --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/data/FAT.java @@ -0,0 +1,50 @@ +package io.github.thetrouper.sentinel.data; + +import java.awt.*; + +public enum FAT { + // I couldn't miss the opportunity to call the "Filter Action Type" FAT + // Its rly just to make the tab completion of FilterAction easier + BLOCK_SWEAR("Sentinel Profanity Filter",null,"swear-block-warn", "swear-block-notification", null,null), + BLOCK_SPAM("Sentinel Anti-Spam", null, "spam-warning", "spam-notification",null,null), + SWEAR("Sentinel Anti-Swear Log","Anti-Swear", "profanity-mute-warn", "profanity-mute-notification", Config.swearPunishCommand, Color.orange), + SLUR("Sentinel Anti-Slur Log", "Anti-Slur", "slur-mute-warn", "slur-mute-notification", Config.strictPunishCommand, Color.red), + SPAM("Sentinel Anti-Spam Log", "Anti-Spam", "spam-mute-warn", "spam-mute-notification", Config.spamPunishCommand, Color.pink); + + private final String title; + private final String name; + private final String warnTranslationKey; + private final String notifTranslationKey; + private final String executedCommand; + private final Color embedColor; + + FAT(String title, String name, String warnTranslationKey, String notifTranslationKey, String executedCommand, Color embedColor) { + this.title = title; + this.name = name; + this.warnTranslationKey = warnTranslationKey; + this.notifTranslationKey = notifTranslationKey; + this.executedCommand = executedCommand; + this.embedColor = embedColor; + } + public String getTitle() { + return title; + } + public String getName() { + return name; + } + public String getWarnTranslationKey() { + return warnTranslationKey; + } + + public String getNotifTranslationKey() { + return notifTranslationKey; + } + + public String getExecutedCommand() { + return executedCommand; + } + public Color getColor() { + return embedColor; + } +} + diff --git a/src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java b/src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java new file mode 100644 index 0000000..855bb1f --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java @@ -0,0 +1,105 @@ +package io.github.thetrouper.sentinel.data; + +import io.github.thetrouper.sentinel.Sentinel; +import io.github.thetrouper.sentinel.discord.DiscordWebhook; +import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; +import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives; +import io.github.thetrouper.sentinel.server.util.ServerUtils; +import io.github.thetrouper.sentinel.server.util.Text; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.entity.Player; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +import java.awt.*; +import java.io.IOException; + +import static io.github.thetrouper.sentinel.server.functions.ProfanityFilter.fullSimplify; +import static io.github.thetrouper.sentinel.server.functions.ProfanityFilter.scoreMap; + +public class FilterAction { + + public static void filterAction(Player offender, AsyncPlayerChatEvent e, String highlighted, String severity, FAT type) { + String report = ReportFalsePositives.generateReport(e); + + TextComponent warn = new TextComponent(); + warn.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Sentinel.dict.get("action-automatic-reportable")))); + warn.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sentinelcallback fpreport " + report)); + + TextComponent notif = new TextComponent(); + notif.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Sentinel.dict.get("severity-notification-hover").formatted(e.getMessage(), highlighted, severity)))); + notif.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sentinelcallback fpreport " + report)); + + warn.setText(Text.prefix(Sentinel.dict.get(type.getWarnTranslationKey()))); + offender.spigot().sendMessage(warn); + + notif.setText(Text.prefix(Sentinel.dict.get(type.getNotifTranslationKey()).formatted(offender.getName(), scoreMap.get(offender), Config.punishScore))); + ServerUtils.forEachStaff(staffmember -> { + staffmember.spigot().sendMessage(notif); + }); + + if (type.getExecutedCommand() != null) { + ServerUtils.sendCommand(type.getExecutedCommand().replace("%player%", offender.getName())); + } + + if (type == FAT.SWEAR && Config.logSwear) { + sendDiscordLog(offender,e,type); + sendConsoleLog(offender,e,type); + } + + if (type == FAT.SLUR && Config.logSwear) { + sendDiscordLog(offender, e, type); + sendConsoleLog(offender, e, type); + } + if (type == FAT.SPAM && Config.logSpam) { + // BOOKMARK + // STATE: (bool?t:f) imp spam log for console & discord for prev/curr||Mess/Redu + } + } + public static void sendConsoleLog(Player offender, AsyncPlayerChatEvent e, FAT type) { + String log = "]=-" + type.getTitle() + "-=[\n" + + "Player: " + offender.getName() + + "> Score: (" + scoreMap.get(offender) + "/" + Config.punishScore + ")\n" + + "> UUID: " + offender.getUniqueId() + "\n" + + "Message: " + e.getMessage() + "\n" + + "Reduced: " + fullSimplify(e.getMessage()) + "\n" + + (type.getExecutedCommand() != null ? "Executed: " + type.getExecutedCommand() : "Executed: Nothing, its a standard flag. You shouldn't be seeing this, please report it."); + Sentinel.log.info(log); + } + + private static void sendDiscordLog(Player offender, AsyncPlayerChatEvent e, FAT type) { + String supertitle = type.getTitle(); + String title = offender.getName() + " has triggered the " + type.getName() + "!"; + Color color = Color.white; + String executed = type.getExecutedCommand() != null ? type.getExecutedCommand() : "Nothing, its a standard flag. You shouldn't be seeing this, please report it."; + + DiscordWebhook webhook = new DiscordWebhook(Config.webhook); + webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); + webhook.setUsername("Sentinel Anti-Nuke | Logs"); + + DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject() + .setAuthor(supertitle, "", "") + .setTitle(title) + .setDescription( + Emojis.rightSort + "Player: " + offender.getName() + " " + Emojis.target + "\n" + + Emojis.space + Emojis.arrowRight + "Score: `" + scoreMap.get(offender) + "/" + Config.punishScore + "`\n" + + Emojis.space + Emojis.arrowRight + "UUID: `" + offender.getUniqueId() + "`\n" + + Emojis.rightSort + "Executed: " + executed + " " + Emojis.mute + "\n" + ) + .addField("Original Message", "||" + e.getMessage() + "|| " + Emojis.alarm, false) + .addField("Reduced Message", ProfanityFilter.highlightProfanity(e.getMessage(), "||", "||") + " " + Emojis.noDM, false) + .setColor(color) + .setThumbnail("https://crafatar.com/avatars/" + offender.getUniqueId() + "?size=64&&overlay"); + + webhook.addEmbed(embed); + + try { + ServerUtils.sendDebugMessage("Executing webhook..."); + webhook.execute(); + } catch (IOException ex) { + ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); + Sentinel.log.info(ex.toString()); + } + } +} diff --git a/src/main/java/io/github/thetrouper/sentinel/discord/WebhookSender.java b/src/main/java/io/github/thetrouper/sentinel/discord/WebhookSender.java index bdfc703..e2fba75 100644 --- a/src/main/java/io/github/thetrouper/sentinel/discord/WebhookSender.java +++ b/src/main/java/io/github/thetrouper/sentinel/discord/WebhookSender.java @@ -41,58 +41,4 @@ public class WebhookSender { Sentinel.log.info(e.toString()); } } - public static void sendSwearLog(Player player, String message, int finalScore) { - ServerUtils.sendDebugMessage("Creating swearLog Webhook..."); - DiscordWebhook webhook = new DiscordWebhook(Config.webhook); - webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); - webhook.setUsername("Sentinel Anti-Nuke | Logs"); - DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject() - .setAuthor("Anti-Swear Punishment","","") - .setTitle(player.getName() + " has triggered the anti-slur!") - .setDescription( - Emojis.rightSort + "Player: " + player.getName() + " " + Emojis.target + "\\n" + - Emojis.space + Emojis.arrowRight + "Score: `" + finalScore + "/" + Config.punishScore + "`\\n" + - Emojis.space + Emojis.arrowRight + "UUID: `" + player.getUniqueId() + "`\\n" + - Emojis.rightSort + "Executed: " + Config.swearPunishCommand + " " + Emojis.mute + "\\n" - ) - .addField("Original Message", "||" + message + "|| " + Emojis.alarm, false) - .addField("Sanitized Message", ProfanityFilter.highlightProfanity(message,"||", "||") + " " + Emojis.noDM, false) - .setColor(Color.orange) - .setThumbnail("https://crafatar.com/avatars/" + player.getUniqueId() + "?size=64&&overlay"); - webhook.addEmbed(embed); - try { - ServerUtils.sendDebugMessage("Executing webhook..."); - webhook.execute(); - } catch (IOException e) { - ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); - Sentinel.log.info(e.toString()); - } - } - public static void sendSlurLog(Player player, String message, int finalScore) { - ServerUtils.sendDebugMessage("Creating swearLog Webhook..."); - DiscordWebhook webhook = new DiscordWebhook(Config.webhook); - webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); - webhook.setUsername("Sentinel Anti-Nuke | Logs"); - DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject() - .setAuthor("Anti-Slur Punishment","","") - .setTitle(player.getName() + " has triggered the anti-slur!") - .setDescription( - Emojis.rightSort + "Player: " + player.getName() + " " + Emojis.target + "\\n" + - Emojis.space + Emojis.arrowRight + "Score: `" + finalScore + "/" + Config.punishScore + "`\\n" + - Emojis.space + Emojis.arrowRight + "UUID: `" + player.getUniqueId() + "`\\n" + - Emojis.rightSort + "Executed: " + Config.strictPunishCommand + " " + Emojis.mute + "\\n" - ) - .addField("Original Message", "||" + message + "|| " + Emojis.alarm, false) - .addField("Sanitized Message", ProfanityFilter.highlightProfanity(message,"||", "||") + " " + Emojis.noDM, false) - .setColor(Color.orange) - .setThumbnail("https://crafatar.com/avatars/" + player.getUniqueId() + "?size=64&&overlay"); - webhook.addEmbed(embed); - try { - ServerUtils.sendDebugMessage("Executing webhook..."); - webhook.execute(); - } catch (IOException e) { - ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); - Sentinel.log.info(e.toString()); - } - } } diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java index 6f7fe59..f497e32 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java index 41a184c..3efd252 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java index d3058ac..e1f9293 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java index 18e8a5a..3501b9a 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java b/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java index fbfe65d..4e8a7a5 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; import org.bukkit.entity.Player; diff --git a/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java b/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java index b3ae342..b40f59d 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java @@ -2,8 +2,8 @@ package io.github.thetrouper.sentinel.events; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.Action; -import io.github.thetrouper.sentinel.server.ActionType; +import io.github.thetrouper.sentinel.data.Action; +import io.github.thetrouper.sentinel.data.ActionType; import org.bukkit.Bukkit; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; @@ -13,9 +13,6 @@ import org.bukkit.event.inventory.InventoryCreativeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; import java.util.Map; public class NBTEvents implements Listener { diff --git a/src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java b/src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java deleted file mode 100644 index 7d3c4ff..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java +++ /dev/null @@ -1,119 +0,0 @@ -package io.github.thetrouper.sentinel.server; - -import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Emojis; -import io.github.thetrouper.sentinel.discord.DiscordWebhook; -import io.github.thetrouper.sentinel.discord.WebhookSender; -import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; -import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives; -import io.github.thetrouper.sentinel.server.util.ServerUtils; -import io.github.thetrouper.sentinel.server.util.Text; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.entity.Player; -import org.bukkit.event.player.AsyncPlayerChatEvent; - -import java.awt.Color; -import java.io.IOException; - -import static io.github.thetrouper.sentinel.server.functions.ProfanityFilter.scoreMap; - -public class FilterAction { - - public static void filterAction(Player offender, AsyncPlayerChatEvent e, String highlighted, String severity,String type) { - String report = ReportFalsePositives.generateReport(e); - - TextComponent warn = new TextComponent(); - warn.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Sentinel.dict.get("action-automatic-reportable")))); - warn.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sentinelcallback fpreport " + report)); - - TextComponent notif = new TextComponent(); - notif.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Sentinel.dict.get("severity-notification-hover").formatted(e.getMessage(),highlighted,severity)))); - notif.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/sentinelcallback fpreport " + report)); - switch (type) { - case "BLOCK" -> { - warn.setText(Text.prefix((Sentinel.dict.get("swear-block-warn")))); - offender.spigot().sendMessage(warn); - - notif.setText(Text.prefix(Sentinel.dict.get("swear-block-notification").formatted(offender.getName(),scoreMap.get(offender),Config.punishScore))); - ServerUtils.forEachStaff(staffmember -> { - staffmember.spigot().sendMessage(notif); - }); - } - case "SWEAR" -> { - ServerUtils.sendCommand(Config.swearPunishCommand.replace("%player%", offender.getName())); - warn.setText(Text.prefix(Sentinel.dict.get("profanity-mute-warn"))); - - offender.spigot().sendMessage(warn); - - notif.setText(Text.prefix(Sentinel.dict.get("profanity-mute-notification").formatted(offender.getName(),scoreMap.get(offender),Config.punishScore))); - ServerUtils.forEachStaff(staff -> { - staff.spigot().sendMessage(notif); - }); - if (Config.logSwear) WebhookSender.sendSwearLog(offender,e.getMessage(),scoreMap.get(offender)); - } - case "SLUR" -> { - ServerUtils.sendCommand(Config.strictPunishCommand.replace("%player%", offender.getName())); - warn.setText(Text.prefix((Sentinel.dict.get("slur-mute-warn")))); - - offender.spigot().sendMessage(warn); - - notif.setText(Text.prefix(Sentinel.dict.get("slur-mute-notification").formatted(offender.getName(),scoreMap.get(offender),Config.punishScore))); - ServerUtils.forEachStaff(staff -> { - staff.spigot().sendMessage(notif); - }); - if (Config.logSwear) { - sendLog(offender,e,type); - } - } - } - } - - private static void sendLog(Player offender, AsyncPlayerChatEvent e, String type) { - String supertitle = "Chat filter Punishment"; - String title = offender.getName() + " has triggered the chat filter auto-punish!"; - Color color = Color.white; - String executed = "Generic mute command not implemented yet! (report this please, you shouldn't be seeing this)"; - switch (type) { - case "SWEAR" -> { - supertitle = "Anti-Swear Punishment"; - title = offender.getName() + " has triggered the anti-swear!"; - color = Color.orange; - executed = Config.swearPunishCommand; - } - case "SLUR" -> { - supertitle = "Anti-Slur Punishment"; - title = offender.getName() + " has triggered the anti-slur!"; - color = Color.red; - executed = Config.strictPunishCommand; - } - - } - DiscordWebhook webhook = new DiscordWebhook(Config.webhook); - webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); - webhook.setUsername("Sentinel Anti-Nuke | Logs"); - DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject() - .setAuthor(supertitle,"","") - .setTitle(title) - .setDescription( - Emojis.rightSort + "Player: " + offender.getName() + " " + Emojis.target + "\\n" + - Emojis.space + Emojis.arrowRight + "Score: `" + scoreMap.get(offender) + "/" + Config.punishScore + "`\\n" + - Emojis.space + Emojis.arrowRight + "UUID: `" + offender.getUniqueId() + "`\\n" + - Emojis.rightSort + "Executed: " + executed + " " + Emojis.mute + "\\n" - ) - .addField("Original Message", "||" + e.getMessage() + "|| " + Emojis.alarm, false) - .addField("Sanitized Message", ProfanityFilter.highlightProfanity(e.getMessage(),"||", "||") + " " + Emojis.noDM, false) - .setColor(color) - .setThumbnail("https://crafatar.com/avatars/" + offender.getUniqueId() + "?size=64&&overlay"); - webhook.addEmbed(embed); - try { - ServerUtils.sendDebugMessage("Executing webhook..."); - webhook.execute(); - } catch (IOException ex) { - ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); - Sentinel.log.info(ex.toString()); - } - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java b/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java index e4df159..e5a6280 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java @@ -1,12 +1,9 @@ package io.github.thetrouper.sentinel.server.functions; -import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.discord.WebhookSender; +import io.github.thetrouper.sentinel.data.FilterAction; +import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; @@ -26,49 +23,60 @@ public class ProfanityFilter { public static void handleProfanityFilter(AsyncPlayerChatEvent e) { Player p = e.getPlayer(); String message = Text.removeFirstColor(e.getMessage()); - if (!scoreMap.containsKey(p)) scoreMap.put(p, 0); - if (scoreMap.get(p) > Config.punishScore) punishSwear(p,highlightProfanity(message),message,e); + String highlighted = highlightProfanity(message); String severity = ProfanityFilter.checkSeverity(message); + if (!scoreMap.containsKey(p)) scoreMap.put(p, 0); + // Old: if (scoreMap.get(p) > Config.punishScore) punishSwear(p,highlighted,message,e); + if (scoreMap.get(p) > Config.punishScore) FilterAction.filterAction(p,e,highlighted,severity, FAT.SWEAR); + switch (severity) { case "low" -> { ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.lowScore); scoreMap.put(p, scoreMap.get(p) + Config.lowScore); e.setCancelled(true); - blockSwear(p,highlightProfanity(message),message,severity,e); + // Old: blockSwear(p,highlighted,message,severity,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.BLOCK_SWEAR); } case "medium-low" -> { ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumLowScore); scoreMap.put(p, scoreMap.get(p) + Config.mediumLowScore); e.setCancelled(true); - blockSwear(p,highlightProfanity(message),message,severity,e); + // Old: blockSwear(p,highlighted,message,severity,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.BLOCK_SWEAR); } case "medium" -> { ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumScore); scoreMap.put(p, scoreMap.get(p) + Config.mediumScore); e.setCancelled(true); - blockSwear(p,highlightProfanity(message),message,severity,e); + // Old: blockSwear(p,highlighted,message,severity,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.BLOCK_SWEAR); } case "medium-high" -> { ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumHighScore); scoreMap.put(p, scoreMap.get(p) + Config.mediumHighScore); e.setCancelled(true); - blockSwear(p,highlightProfanity(message),message,severity,e); + // Old: blockSwear(p,highlighted,message,severity,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.BLOCK_SWEAR); } case "high" -> { ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.highScore); scoreMap.put(p, scoreMap.get(p) + Config.highScore); e.setCancelled(true); - blockSwear(p,highlightProfanity(message),message,severity,e); + // Old: blockSwear(p,highlighted,message,severity,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.BLOCK_SWEAR); } case "slur" -> { // Insta-Punish ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.highScore); scoreMap.put(p, scoreMap.get(p) + Config.highScore); e.setCancelled(true); - punishSlur(p,highlightProfanity(message),message,e); + // Old: punishSlur(p,highlighted,message,e); + FilterAction.filterAction(p,e,highlighted,severity, FAT.SLUR); } } } + + /* public static void punishSwear(Player player, String highlightedMSG, String origMessage, AsyncPlayerChatEvent e) { ServerUtils.sendCommand(Config.swearPunishCommand.replace("%player%", player.getName())); String fpreport = ReportFalsePositives.generateReport(e); @@ -89,6 +97,8 @@ public class ProfanityFilter { }); if (Config.logSwear) WebhookSender.sendSwearLog(player,origMessage,scoreMap.get(player)); } + + public static void punishSlur(Player player, String highlightedMSG, String origMessage, AsyncPlayerChatEvent e) { if (!Config.strictInstaPunish) return; @@ -128,7 +138,7 @@ public class ProfanityFilter { staffmember.spigot().sendMessage(staff); }); } - +*/ public static String highlightProfanity(String text) { String highlightedSwears = highlightSwears(fullSimplify(text), "\u00a7e", "\u00a7f"); String highlightedText = highlightSlurs(highlightedSwears, "\u00a7c", "\u00a7f"); @@ -234,14 +244,14 @@ public class ProfanityFilter { return containsSwears(text) || containsSlurs(text); } private static boolean containsSwears(String text) { - ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for swears: " + swearBlacklist.toString()); + ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for swears"); for (String swear : swearBlacklist) { if (text.contains(swear)) return true; } return false; } private static boolean containsSlurs(String text) { - ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for slurs: " + slurs.toString()); + ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for slurs"); for (String slur : slurs) { if (text.contains(slur)) return true; } diff --git a/src/main/resources/lang/en_us.json b/src/main/resources/lang/en_us.json index 1c81a5a..f1173b9 100644 --- a/src/main/resources/lang/en_us.json +++ b/src/main/resources/lang/en_us.json @@ -16,10 +16,10 @@ "spy-disabled" : "SocialSpy is now disabled.", "spam-warning" : "Do not spam in chat! Please wait before sending another message.", "action-automatic" : "§7This action was preformed automatically\n§7by the §bSentinel Anti-Spam§7 algorithm.", - "spam-notification" : "§b§n%1$s§7 might be spamming! §8(§c%2$s§7/§4%3$s§&8)", + "spam-notification" : "§b§n%1$s§7 might be spamming! §8(§c%2$s§7/§4%3$s§8)", "spam-notification-hover" : "§8]==-- §d§lSentinel §8--==[\n§bPrevious: §f%1$s\n§bCurrent: §f%2$s\n§bSimilarity §f%3$s", "spam-punished" : "§cYou have been auto-punished for violating the anti-spam repetitively!", - "spam-punish-notification" : "§b§n%1$s§7 has been auto-muted by the anti spam! §8(§c%2$s§7/§4%3$s§&8)", + "spam-punish-notification" : "§b§n%1$s§7 has been auto-muted by the anti spam! §8(§c%2$s§7/§4%3$s§8)", "unicode-warn" : "§cDo not send non standard unicode in chat!", "message-sent" : "§d§lMessage §8» §b[§fYou §e>§f %1$s§b] §7%2$s", "message-received" : "§d§lMessage §8» §b[§f%1$s §e>§f You§b] §7%2$s",