chatfilter: add option to block repeated public messages

Co-authored-by: Adam <Adam@sigterm.info>
This commit is contained in:
Corey Forsyth
2020-05-22 14:44:36 -04:00
committed by Adam
parent 0715e3c9fc
commit f85f6be5cf
3 changed files with 28 additions and 1 deletions

View File

@@ -130,4 +130,15 @@ public interface ChatFilterConfig extends Config
{
return false;
}
@ConfigItem(
keyName = "maxRepeatedPublicChats",
name = "Max repeated public chats",
description = "Block player chat message if repeated this many times. 0 is off",
position = 11
)
default int maxRepeatedPublicChats()
{
return 0;
}
}

View File

@@ -195,7 +195,9 @@ public class ChatFilterPlugin extends Plugin
Duplicate duplicateCacheEntry = duplicateChatCache.get(name + ":" + message);
if (duplicateCacheEntry != null)
{
blockMessage = duplicateCacheEntry.messageId != messageId;
blockMessage = duplicateCacheEntry.messageId != messageId ||
((chatMessageType == PUBLICCHAT || chatMessageType == MODCHAT) &&
config.maxRepeatedPublicChats() > 0 && duplicateCacheEntry.count > config.maxRepeatedPublicChats());
duplicateCount = duplicateCacheEntry.count;
}
}

View File

@@ -368,4 +368,18 @@ public class ChatFilterPluginTest
assertEquals(1, client.getIntStack()[client.getIntStackSize() - 3]);
assertEquals("testMessage (4)", client.getStringStack()[client.getStringStackSize() - 1]);
}
@Test
public void publicChatFilteredOnDuplicate()
{
when(chatFilterConfig.collapsePlayerChat()).thenReturn(true);
when(chatFilterConfig.maxRepeatedPublicChats()).thenReturn(2);
chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0));
chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0));
chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0));
ScriptCallbackEvent event = createCallbackEvent("testName", "testMessage", ChatMessageType.PUBLICCHAT);
chatFilterPlugin.onScriptCallbackEvent(event);
assertEquals(0, client.getIntStack()[client.getIntStackSize() - 3]);
}
}