chatfilter: add option to block repeated public messages
Co-authored-by: Adam <Adam@sigterm.info>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user