Better logging for blocked spam messages.

This commit is contained in:
ryanhamshire 2015-03-18 16:02:12 -07:00
parent c781eca5c5
commit 80c0f55a88

View File

@ -176,7 +176,7 @@ class PlayerEventHandler implements Listener
if(player.hasPermission("griefprevention.spam")) return false; if(player.hasPermission("griefprevention.spam")) return false;
boolean spam = false; boolean spam = false;
boolean muted = false; String mutedReason = null;
//prevent bots from chatting - require movement before talking for any newish players //prevent bots from chatting - require movement before talking for any newish players
PlayerData playerData = this.dataStore.getPlayerData(player.getUniqueId()); PlayerData playerData = this.dataStore.getPlayerData(player.getUniqueId());
@ -188,7 +188,7 @@ class PlayerEventHandler implements Listener
{ {
GriefPrevention.sendMessage(player, TextMode.Err, Messages.NoChatUntilMove, 10L); GriefPrevention.sendMessage(player, TextMode.Err, Messages.NoChatUntilMove, 10L);
spam = true; spam = true;
muted = true; mutedReason = "pre-movement chat";
} }
else else
{ {
@ -208,11 +208,11 @@ class PlayerEventHandler implements Listener
//always mute an exact match to the last chat message //always mute an exact match to the last chat message
long now = new Date().getTime(); long now = new Date().getTime();
if(message.equals(this.lastChatMessage) && now - this.lastChatMessageTimestamp < 750) if(mutedReason != null && message.equals(this.lastChatMessage) && now - this.lastChatMessageTimestamp < 750)
{ {
playerData.spamCount += ++this.duplicateMessageCount; playerData.spamCount += ++this.duplicateMessageCount;
spam = true; spam = true;
muted = true; mutedReason = "repeat message";
} }
else else
{ {
@ -236,32 +236,29 @@ class PlayerEventHandler implements Listener
} }
//if it's very similar to the last message from the same player and within 10 seconds of that message //if it's very similar to the last message from the same player and within 10 seconds of that message
if(!muted && this.stringsAreSimilar(message, playerData.lastMessage) && now - playerData.lastMessageTimestamp.getTime() < 10000) if(mutedReason == null && this.stringsAreSimilar(message, playerData.lastMessage) && now - playerData.lastMessageTimestamp.getTime() < 10000)
{ {
playerData.spamCount++; playerData.spamCount++;
spam = true; spam = true;
muted = true; mutedReason = "similar message";
} }
//filter IP addresses //filter IP addresses
if(!muted) if(mutedReason == null)
{ {
if(GriefPrevention.instance.containsBlockedIP(message)) if(GriefPrevention.instance.containsBlockedIP(message))
{ {
//log entry
GriefPrevention.AddLogEntry("Muted IP address from " + player.getName() + ": " + message);
//spam notation //spam notation
playerData.spamCount+=5; playerData.spamCount+=5;
spam = true; spam = true;
//block message //block message
muted = true; mutedReason = "IP address";
} }
} }
//if the message was mostly non-alpha-numerics or doesn't include much whitespace, consider it a spam (probably ansi art or random text gibberish) //if the message was mostly non-alpha-numerics or doesn't include much whitespace, consider it a spam (probably ansi art or random text gibberish)
if(!muted && message.length() > 5) if(mutedReason == null && message.length() > 5)
{ {
int symbolsCount = 0; int symbolsCount = 0;
int whitespaceCount = 0; int whitespaceCount = 0;
@ -282,13 +279,13 @@ class PlayerEventHandler implements Listener
if(symbolsCount > message.length() / 2 || (message.length() > 15 && whitespaceCount < message.length() / 10)) if(symbolsCount > message.length() / 2 || (message.length() > 15 && whitespaceCount < message.length() / 10))
{ {
spam = true; spam = true;
if(playerData.spamCount > 0) muted = true; if(playerData.spamCount > 0) mutedReason = "gibberish";
playerData.spamCount++; playerData.spamCount++;
} }
} }
//very short messages close together are spam //very short messages close together are spam
if(!muted && message.length() < 5 && millisecondsSinceLastMessage < 3000) if(mutedReason == null && message.length() < 5 && millisecondsSinceLastMessage < 3000)
{ {
spam = true; spam = true;
playerData.spamCount++; playerData.spamCount++;
@ -326,7 +323,10 @@ class PlayerEventHandler implements Listener
//anything above level 2, mute and warn //anything above level 2, mute and warn
if(playerData.spamCount >= 4) if(playerData.spamCount >= 4)
{ {
muted = true; if(mutedReason == null)
{
mutedReason = "too-frequent text";
}
if(!playerData.spamWarned) if(!playerData.spamWarned)
{ {
GriefPrevention.sendMessage(player, TextMode.Warn, GriefPrevention.instance.config_spam_warningMessage, 10L); GriefPrevention.sendMessage(player, TextMode.Warn, GriefPrevention.instance.config_spam_warningMessage, 10L);
@ -335,10 +335,10 @@ class PlayerEventHandler implements Listener
} }
} }
if(muted) if(mutedReason != null)
{ {
//make a log entry //make a log entry
GriefPrevention.AddLogEntry("Muted spam from " + player.getName() + ": " + message); GriefPrevention.AddLogEntry("Muted " + mutedReason + " from " + player.getName() + ": " + message);
//cancelling the event guarantees other players don't receive the message //cancelling the event guarantees other players don't receive the message
return true; return true;