Made debug mode better + fixed the anti-spam (I think)

This commit is contained in:
obvWolf
2023-10-20 23:29:46 -05:00
parent fd3b4367c1
commit 3851fbf97a
9 changed files with 49 additions and 35 deletions

View File

@@ -261,10 +261,10 @@ public class Action {
.setColor(action.getEmbedColor()); .setColor(action.getEmbedColor());
webhook.addEmbed(embed); webhook.addEmbed(embed);
try { try {
ServerUtils.sendDebugMessage("Executing webhook..."); ServerUtils.sendDebugMessage("ActionBuilder: Executing webhook...");
webhook.execute(); webhook.execute();
} catch (IOException e) { } catch (IOException e) {
ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); ServerUtils.sendDebugMessage("ActionBuilder: Epic webhook failure!!!");
Sentinel.log.info(e.toString()); Sentinel.log.info(e.toString());
} }
} }

View File

@@ -107,7 +107,7 @@ public class FilterAction {
ServerUtils.sendDebugMessage("Executing webhook..."); ServerUtils.sendDebugMessage("Executing webhook...");
webhook.execute(); webhook.execute();
} catch (IOException ex) { } catch (IOException ex) {
ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); ServerUtils.sendDebugMessage("Filter Actions: Epic webhook failure!!!");
Sentinel.log.info(ex.toString()); Sentinel.log.info(ex.toString());
} }
} }

View File

@@ -37,7 +37,7 @@ public class WebhookSender {
ServerUtils.sendDebugMessage("Executing webhook..."); ServerUtils.sendDebugMessage("Executing webhook...");
webhook.execute(); webhook.execute();
} catch (IOException e) { } catch (IOException e) {
ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); ServerUtils.sendDebugMessage("Epic webhook failure!!!");
Sentinel.log.info(e.toString()); Sentinel.log.info(e.toString());
} }
} }

View File

@@ -16,25 +16,25 @@ public class ChatEvent implements Listener {
@EventHandler @EventHandler
public static void onChat(AsyncPlayerChatEvent e) { public static void onChat(AsyncPlayerChatEvent e) {
if (e.isCancelled()) return; if (e.isCancelled()) return;
ServerUtils.sendDebugMessage(Text.prefix("Chat event detected!")); ServerUtils.sendDebugMessage("ChatEvent: Chat event detected!");
if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiunicode.bypass")) { if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiunicode.bypass")) {
ServerUtils.sendDebugMessage(Text.prefix("Permission bypass failed, checking for unicode")); ServerUtils.sendDebugMessage("ChatEvent: Permission bypass failed, checking for unicode");
if (Config.antiUnicode) { if (Config.antiUnicode) {
ServerUtils.sendDebugMessage(Text.prefix("Enabled, Continuing unicode check!")); ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing unicode check!"));
AntiUnicode.handleAntiUnicode(e); AntiUnicode.handleAntiUnicode(e);
} }
} }
if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiswear.bypass")) { if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiswear.bypass")) {
ServerUtils.sendDebugMessage(Text.prefix("Permission bypass failed, checking for swears")); ServerUtils.sendDebugMessage("ChatEvent: Permission bypass failed, checking for swears");
if (Config.antiSwearEnabled) { if (Config.antiSwearEnabled) {
ServerUtils.sendDebugMessage(Text.prefix("Enabled, Continuing swear check!")); ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing swear check!"));
ProfanityFilter.handleProfanityFilter(e); ProfanityFilter.handleProfanityFilter(e);
} }
} }
if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antispam.bypass")) { if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antispam.bypass")) {
ServerUtils.sendDebugMessage(Text.prefix("Permission bypass failed, checking for spam")); ServerUtils.sendDebugMessage(("ChatEvent: Permission bypass failed, checking for spam"));
if (Config.antiSpamEnabled) { if (Config.antiSpamEnabled) {
ServerUtils.sendDebugMessage(Text.prefix("Enabled, Continuing spam check!")); ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing spam check!"));
AntiSpam.handleAntiSpam(e); AntiSpam.handleAntiSpam(e);
} }
} }

View File

@@ -17,12 +17,12 @@ public class CommandEvent implements Listener {
private void onCommand(PlayerCommandPreprocessEvent e) { private void onCommand(PlayerCommandPreprocessEvent e) {
Player p = e.getPlayer(); Player p = e.getPlayer();
String command = e.getMessage().substring(1).split(" ")[0]; String command = e.getMessage().substring(1).split(" ")[0];
ServerUtils.sendDebugMessage(Text.prefix("Checking command")); ServerUtils.sendDebugMessage("CommandEvent: Checking command");
if (Sentinel.isDangerousCommand(command)) { if (Sentinel.isDangerousCommand(command)) {
ServerUtils.sendDebugMessage(Text.prefix( "Command is dangerous")); ServerUtils.sendDebugMessage("CommandEvent: Command is dangerous");
if (!Sentinel.isTrusted(p)) { if (!Sentinel.isTrusted(p)) {
e.setCancelled(true); e.setCancelled(true);
ServerUtils.sendDebugMessage(Text.prefix("Command is canceled")); ServerUtils.sendDebugMessage("CommandEvent: Command is canceled");
Action a = new Action.Builder() Action a = new Action.Builder()
.setAction(ActionType.DANGEROUS_COMMAND) .setAction(ActionType.DANGEROUS_COMMAND)
.setEvent(e) .setEvent(e)
@@ -38,12 +38,12 @@ public class CommandEvent implements Listener {
} }
} }
if (Config.blockSpecific) { if (Config.blockSpecific) {
ServerUtils.sendDebugMessage(Text.prefix("Checking command for specific")); ServerUtils.sendDebugMessage("CommandEvent: Checking command for specific");
if (command.contains(":")) { if (command.contains(":")) {
ServerUtils.sendDebugMessage(Text.prefix("Checking is specific")); ServerUtils.sendDebugMessage("CommandEvent: Checking is specific");
if (!Sentinel.isTrusted(p)) { if (!Sentinel.isTrusted(p)) {
e.setCancelled(true); e.setCancelled(true);
ServerUtils.sendDebugMessage(Text.prefix("Command is canceled")); ServerUtils.sendDebugMessage(("CommandEvent: Command is canceled"));
Action a = new Action.Builder() Action a = new Action.Builder()
.setAction(ActionType.SPECIFIC_COMMAND) .setAction(ActionType.SPECIFIC_COMMAND)
.setEvent(e) .setEvent(e)

View File

@@ -4,6 +4,7 @@ import io.github.thetrouper.sentinel.data.Config;
import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.data.FAT;
import io.github.thetrouper.sentinel.data.FilterAction; import io.github.thetrouper.sentinel.data.FilterAction;
import io.github.thetrouper.sentinel.server.util.GPTUtils; import io.github.thetrouper.sentinel.server.util.GPTUtils;
import io.github.thetrouper.sentinel.server.util.ServerUtils;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
@@ -19,23 +20,34 @@ public class AntiSpam {
heatMap = new HashMap<>(); heatMap = new HashMap<>();
lastMessageMap = new HashMap<>(); lastMessageMap = new HashMap<>();
} }
public static void handleAntiSpam(AsyncPlayerChatEvent e) { public static void handleAntiSpam(AsyncPlayerChatEvent e) {
Player p = e.getPlayer(); Player p = e.getPlayer();
String message = Text.removeFirstColor(e.getMessage()); String message = Text.removeFirstColor(e.getMessage());
if (!lastMessageMap.containsKey(p)) { if (!lastMessageMap.containsKey(p)) {
lastMessageMap.put(p,"/* Placeholder Message from Sentinel */"); lastMessageMap.put(p,"/* Placeholder Message from Sentinel */");
ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " did not have a previous message, setting to placeholder!");
} }
if (!heatMap.containsKey(p)) { if (!heatMap.containsKey(p)) {
heatMap.put(p,0); heatMap.put(p,0);
ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " did not have a heat, setting it to 0!");
} }
if (lastMessageMap.containsKey(p)) { if (lastMessageMap.containsKey(p)) {
String lastMessage = lastMessageMap.get(p); String lastMessage = lastMessageMap.get(p);
double similarity = GPTUtils.calcSim(message, lastMessage); double similarity = GPTUtils.calcSim(message, lastMessage);
if (similarity > 0.25) heatMap.put(p, heatMap.get(p) + Config.lowGain); ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " has a heat of " + heatMap.get(p) + "/" + Config.punishHeat + ". Current Message: \"" + message + "\" Last message: \"" + lastMessage + "\"");
if (similarity > 0.5) heatMap.put(p, heatMap.get(p) + Config.mediumGain); if (similarity > 90) {
if (similarity > 0.9) heatMap.put(p, heatMap.get(p) + Config.highGain); heatMap.put(p, heatMap.get(p) + Config.highGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 90% for " + p.getName() + ". Adding " + Config.highGain);
} else if (similarity > 50) {
heatMap.put(p, heatMap.get(p) + Config.mediumGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 50% for " + p.getName() + ". Adding " + Config.mediumGain);
} else if (similarity > 25) {
heatMap.put(p, heatMap.get(p) + Config.lowGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 25% for " + p.getName() + ". Adding " + Config.lowGain);
}
} }
if (heatMap.get(p) > Config.punishHeat) { if (heatMap.get(p) > Config.punishHeat) {
@@ -59,6 +71,7 @@ public class AntiSpam {
heat = heat - Config.heatDecay; heat = heat - Config.heatDecay;
heatMap.put(p, Math.max(0, heat)); heatMap.put(p, Math.max(0, heat));
} }
//ServerUtils.sendDebugMessage("AntiSpam: Decaying heat for " + p.getName() + ": " + heatMap.get(p));
} }
} }
/* /*

View File

@@ -194,11 +194,11 @@ public class ProfanityFilter {
public static String checkSeverity(String text) { public static String checkSeverity(String text) {
// 1: // 1:
String lowercasedText = text.toLowerCase(); String lowercasedText = text.toLowerCase();
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Lowercased: " + lowercasedText)); ServerUtils.sendDebugMessage("ProfanityFilter: Lowercased: " + lowercasedText);
// 2: // 2:
String cleanedText = removeFalsePositives(lowercasedText); String cleanedText = removeFalsePositives(lowercasedText);
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Removed False positives: " + cleanedText)); ServerUtils.sendDebugMessage(("ProfanityFilter: Removed False positives: " + cleanedText));
// 3: // 3:
if (containsSwears(cleanedText)) return "low"; if (containsSwears(cleanedText)) return "low";
@@ -206,7 +206,7 @@ public class ProfanityFilter {
// 4: // 4:
String convertedText = convertLeetSpeakCharacters(cleanedText); String convertedText = convertLeetSpeakCharacters(cleanedText);
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Leet Converted: " + convertedText)); ServerUtils.sendDebugMessage(("ProfanityFilter: Leet Converted: " + convertedText));
// 5: // 5:
if (containsSwears(convertedText)) return "medium-low"; if (containsSwears(convertedText)) return "medium-low";
@@ -214,7 +214,7 @@ public class ProfanityFilter {
// 6: // 6:
String strippedText = stripSpecialCharacters(convertedText); String strippedText = stripSpecialCharacters(convertedText);
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Specials Removed: " + strippedText)); ServerUtils.sendDebugMessage(("ProfanityFilter: Specials Removed: " + strippedText));
// 7: // 7:
if (containsSwears(strippedText)) return "medium"; if (containsSwears(strippedText)) return "medium";
@@ -222,7 +222,7 @@ public class ProfanityFilter {
// 8: // 8:
String simplifiedText = simplifyRepeatingLetters(strippedText); String simplifiedText = simplifyRepeatingLetters(strippedText);
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Removed Repeating: " + simplifiedText)); ServerUtils.sendDebugMessage(("ProfanityFilter: Removed Repeating: " + simplifiedText));
// 9: // 9:
if (containsSwears(simplifiedText)) return "medium-high"; if (containsSwears(simplifiedText)) return "medium-high";
@@ -230,7 +230,7 @@ public class ProfanityFilter {
// 10: // 10:
String finalText = removePeriodsAndSpaces(simplifiedText); String finalText = removePeriodsAndSpaces(simplifiedText);
ServerUtils.sendDebugMessage(Text.prefix("Debug: [AntiSwear] Remove Punctuation: " + finalText)); ServerUtils.sendDebugMessage(("ProfanityFilter: Remove Punctuation: " + finalText));
// 11: // 11:
if (containsSwears(finalText)) return "high"; if (containsSwears(finalText)) return "high";
@@ -244,14 +244,14 @@ public class ProfanityFilter {
return containsSwears(text) || containsSlurs(text); return containsSwears(text) || containsSlurs(text);
} }
private static boolean containsSwears(String text) { private static boolean containsSwears(String text) {
ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for swears"); ServerUtils.sendDebugMessage("ProfanityFilter: Checking for swears");
for (String swear : swearBlacklist) { for (String swear : swearBlacklist) {
if (text.contains(swear)) return true; if (text.contains(swear)) return true;
} }
return false; return false;
} }
private static boolean containsSlurs(String text) { private static boolean containsSlurs(String text) {
ServerUtils.sendDebugMessage("Debug: [AntiSwear] Checking for slurs"); ServerUtils.sendDebugMessage("ProfanityFilter: Checking for slurs");
for (String slur : slurs) { for (String slur : slurs) {
if (text.contains(slur)) return true; if (text.contains(slur)) return true;
} }

View File

@@ -21,12 +21,12 @@ public class ReportFalsePositives {
public static String generateReport(AsyncPlayerChatEvent e) { public static String generateReport(AsyncPlayerChatEvent e) {
final long reportLong = Randomizer.generateID(); final long reportLong = Randomizer.generateID();
final String reportID = Long.toString(reportLong); final String reportID = Long.toString(reportLong);
ServerUtils.sendDebugMessage(Text.prefix("DEBUG: Generating chat filter report")); ServerUtils.sendDebugMessage("FP Report: Generating chat filter report");
reportMap.put(reportID,e); reportMap.put(reportID,e);
ServerUtils.sendDebugMessage(Text.prefix("DEBUG: Generated chat filter report. ID:" + reportID + " Message: \"" + reportMap.get(reportID).getMessage() + "\" Expires in 60 seconds")); ServerUtils.sendDebugMessage(("FP Report: Generated chat filter report. ID:" + reportID + " Message: \"" + reportMap.get(reportID).getMessage() + "\" Expires in 60 seconds"));
Bukkit.getScheduler().runTaskLater(Sentinel.getInstance(),()->{ Bukkit.getScheduler().runTaskLater(Sentinel.getInstance(),()->{
reportMap.remove(reportID); reportMap.remove(reportID);
ServerUtils.sendDebugMessage(Text.prefix("DEBUG: Chat filter Report expired. ID: " + reportID)); ServerUtils.sendDebugMessage("FP Report: Chat filter Report expired. ID: " + reportID);
},60000); },60000);
return reportID; return reportID;
} }
@@ -75,10 +75,10 @@ public class ReportFalsePositives {
.setThumbnail("https://crafatar.com/avatars/" + player.getUniqueId() + "?size=64&&overlay"); .setThumbnail("https://crafatar.com/avatars/" + player.getUniqueId() + "?size=64&&overlay");
webhook.addEmbed(embed); webhook.addEmbed(embed);
try { try {
ServerUtils.sendDebugMessage("Executing webhook..."); ServerUtils.sendDebugMessage("FP Report: Executing webhook...");
webhook.execute(); webhook.execute();
} catch (IOException e) { } catch (IOException e) {
ServerUtils.sendDebugMessage(Text.prefix("Epic webhook failure!!!")); ServerUtils.sendDebugMessage("FP Report: Epic webhook failure!!!");
Sentinel.log.info(e.toString()); Sentinel.log.info(e.toString());
} }
} }

View File

@@ -28,10 +28,11 @@ public class ServerUtils {
} }
public static void sendDebugMessage(String message) { public static void sendDebugMessage(String message) {
if (SentinelCommand.debugmode) { if (SentinelCommand.debugmode) {
Sentinel.log.info(message); String log = "[Sentinel] [DEBUG]: " + message;
Sentinel.log.info(log);
for (Player trustedPlayer : Bukkit.getOnlinePlayers()) { for (Player trustedPlayer : Bukkit.getOnlinePlayers()) {
if (Sentinel.isTrusted(trustedPlayer)) { if (Sentinel.isTrusted(trustedPlayer)) {
trustedPlayer.sendMessage(message); trustedPlayer.sendMessage("§d§lSentinel §7[§bDEBUG§7] §8» §7" + message);
} }
} }
} }