From f85f6be5cf6d97b0bc053ad50915496d7a78eef2 Mon Sep 17 00:00:00 2001 From: Corey Forsyth Date: Fri, 22 May 2020 14:44:36 -0400 Subject: [PATCH] chatfilter: add option to block repeated public messages Co-authored-by: Adam --- .../plugins/chatfilter/ChatFilterConfig.java | 11 +++++++++++ .../plugins/chatfilter/ChatFilterPlugin.java | 4 +++- .../plugins/chatfilter/ChatFilterPluginTest.java | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java index d5592318b6..86eff01756 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java @@ -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; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index ee74245a59..607d50d3f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -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; } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java index 3964273a92..de4c104e3d 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java @@ -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]); + } } \ No newline at end of file