chat notifier: fix matching < and > in chat messages
This commit is contained in:
@@ -117,9 +117,12 @@ public class ChatNotificationsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
List<String> items = Text.fromCSV(config.highlightWordsString());
|
List<String> items = Text.fromCSV(config.highlightWordsString());
|
||||||
String joined = items.stream()
|
String joined = items.stream()
|
||||||
|
.map(Text::escapeJagex) // we compare these strings to the raw Jagex ones
|
||||||
.map(Pattern::quote)
|
.map(Pattern::quote)
|
||||||
.collect(Collectors.joining("|"));
|
.collect(Collectors.joining("|"));
|
||||||
highlightMatcher = Pattern.compile("\\b(" + joined + ")\\b", Pattern.CASE_INSENSITIVE);
|
// To match <word> \b doesn't work due to <> not being in \w,
|
||||||
|
// so match \b or \s
|
||||||
|
highlightMatcher = Pattern.compile("(?:\\b|(?<=\\s))(" + joined + ")(?:\\b|(?=\\s))", Pattern.CASE_INSENSITIVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +130,6 @@ public class ChatNotificationsPlugin extends Plugin
|
|||||||
public void onChatMessage(ChatMessage chatMessage)
|
public void onChatMessage(ChatMessage chatMessage)
|
||||||
{
|
{
|
||||||
MessageNode messageNode = chatMessage.getMessageNode();
|
MessageNode messageNode = chatMessage.getMessageNode();
|
||||||
String nodeValue = Text.removeTags(messageNode.getValue());
|
|
||||||
boolean update = false;
|
boolean update = false;
|
||||||
|
|
||||||
switch (chatMessage.getType())
|
switch (chatMessage.getType())
|
||||||
@@ -177,6 +179,7 @@ public class ChatNotificationsPlugin extends Plugin
|
|||||||
|
|
||||||
if (highlightMatcher != null)
|
if (highlightMatcher != null)
|
||||||
{
|
{
|
||||||
|
String nodeValue = messageNode.getValue();
|
||||||
Matcher matcher = highlightMatcher.matcher(nodeValue);
|
Matcher matcher = highlightMatcher.matcher(nodeValue);
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
StringBuffer stringBuffer = new StringBuffer();
|
StringBuffer stringBuffer = new StringBuffer();
|
||||||
|
|||||||
@@ -93,6 +93,44 @@ public class ChatNotificationsPluginTest
|
|||||||
verify(messageNode).setValue("<colHIGHLIGHT>Deathbeam<colNORMAL>, <colHIGHLIGHT>Deathbeam<colNORMAL> OSRS");
|
verify(messageNode).setValue("<colHIGHLIGHT>Deathbeam<colNORMAL>, <colHIGHLIGHT>Deathbeam<colNORMAL> OSRS");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLtGt()
|
||||||
|
{
|
||||||
|
when(config.highlightWordsString()).thenReturn("<test>");
|
||||||
|
|
||||||
|
String message = "test <lt>test<gt> test";
|
||||||
|
MessageNode messageNode = mock(MessageNode.class);
|
||||||
|
when(messageNode.getValue()).thenReturn(message);
|
||||||
|
|
||||||
|
ChatMessage chatMessage = new ChatMessage();
|
||||||
|
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||||
|
chatMessage.setMessageNode(messageNode);
|
||||||
|
|
||||||
|
chatNotificationsPlugin.startUp(); // load highlight config
|
||||||
|
chatNotificationsPlugin.onChatMessage(chatMessage);
|
||||||
|
|
||||||
|
verify(messageNode).setValue("test <colHIGHLIGHT><lt>test<gt><colNORMAL> test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFullStop()
|
||||||
|
{
|
||||||
|
when(config.highlightWordsString()).thenReturn("test");
|
||||||
|
|
||||||
|
String message = "foo test. bar";
|
||||||
|
MessageNode messageNode = mock(MessageNode.class);
|
||||||
|
when(messageNode.getValue()).thenReturn(message);
|
||||||
|
|
||||||
|
ChatMessage chatMessage = new ChatMessage();
|
||||||
|
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||||
|
chatMessage.setMessageNode(messageNode);
|
||||||
|
|
||||||
|
chatNotificationsPlugin.startUp(); // load highlight config
|
||||||
|
chatNotificationsPlugin.onChatMessage(chatMessage);
|
||||||
|
|
||||||
|
verify(messageNode).setValue("foo <colHIGHLIGHT>test<colNORMAL>. bar");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void highlightListTest()
|
public void highlightListTest()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user