From 5ebd570fdfc8f962868aff4700d30c362d31c7f0 Mon Sep 17 00:00:00 2001 From: ryanhamshire Date: Mon, 3 Nov 2014 15:56:43 -0800 Subject: [PATCH] Tweak for team bot spam. Should be fewer false positives for uninteresting but innocent chat patterns. --- .../ryanhamshire/GriefPrevention/PlayerEventHandler.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index d83a4f5..dc9b7f3 100644 --- a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -81,7 +81,7 @@ class PlayerEventHandler implements Listener } //when a player chats, monitor for spam - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) synchronized void onPlayerChat (AsyncPlayerChatEvent event) { Player player = event.getPlayer(); @@ -125,6 +125,7 @@ class PlayerEventHandler implements Listener //last chat message shown, regardless of who sent it private String lastChatMessage = ""; + private long lastChatMessageTimestamp = 0; //number of identical messages in a row private int duplicateMessageCount = 0; @@ -181,7 +182,8 @@ class PlayerEventHandler implements Listener } //always mute an exact match to the last chat message - if(message.equals(this.lastChatMessage)) + long now = new Date().getTime(); + if(message.equals(this.lastChatMessage) && now - this.lastChatMessageTimestamp < 750) { playerData.spamCount += ++this.duplicateMessageCount; spam = true; @@ -190,6 +192,7 @@ class PlayerEventHandler implements Listener else { this.lastChatMessage = message; + this.lastChatMessageTimestamp = now; this.duplicateMessageCount = 0; } @@ -197,7 +200,7 @@ class PlayerEventHandler implements Listener message = message.toLowerCase(); //check message content and timing - long millisecondsSinceLastMessage = (new Date()).getTime() - playerData.lastMessageTimestamp.getTime(); + long millisecondsSinceLastMessage = now - playerData.lastMessageTimestamp.getTime(); //if the message came too close to the last one if(millisecondsSinceLastMessage < 1500)