Better logging for blocked spam messages.
This commit is contained in:
parent
c781eca5c5
commit
80c0f55a88
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user