diff options
Diffstat (limited to 'src')
8 files changed, 76 insertions, 60 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index 16cb5fc3..cf13e26e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -1,15 +1,17 @@ package me.xmrvizzy.skyblocker.chat.filters; -import me.xmrvizzy.skyblocker.chat.ChatListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import java.util.regex.Pattern; public class AdFilter extends ChatFilter { - private static final String regex; - + private static final Pattern[] AD_FILTERS = new Pattern[]{ + Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), + Pattern.compile("(.)\\1{7,}"), + Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), + }; public AdFilter() { - super(regex); + super("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$"); } @Override @@ -17,27 +19,11 @@ public class AdFilter extends ChatFilter { return SkyblockerConfig.get().messages.hideAds; } - static { - StringBuilder sb = new StringBuilder("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: "); - String[] inexact = new String[] { - "(?:on|in|check|at) my ah", - "(?>(.)\\2{7,})", - }; - String[] exact = new String[]{ - "(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|).*", - }; - sb.append("(?i:.*(?:"); - sb.append(inexact[0]); - for(int i = 1; i < inexact.length; i++) { - sb.append("|"); - sb.append(inexact[i]); - } - sb.append(").*"); - for (String s : exact) { - sb.append("|"); - sb.append(s); - } - sb.append(")$"); - regex = sb.toString(); + @Override + public boolean onMessage(String[] groups) { + for(Pattern adFilter : AD_FILTERS) + if(adFilter.matcher(groups[2]).find()) + return true; + return false; } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java index 78574c74..803f72d8 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java @@ -1,35 +1,34 @@ package me.xmrvizzy.skyblocker.chat; import java.util.regex.Matcher; -import java.util.regex.Pattern; import static org.junit.jupiter.api.Assertions.*; public abstract class ChatListenerTest<T extends ChatListener> { - private final Pattern pattern; + protected final T listener; - public ChatListenerTest(T chatListener) { - pattern = chatListener.getPattern(); + public ChatListenerTest(T listener) { + this.listener = listener; } - protected void assertMatches(String text) { - assertTrue(pattern.matcher(text).matches()); + protected boolean captures(String text) { + return listener.getPattern().matcher(text).matches(); } - - protected void assertNotMatches(String text) { - assertFalse(pattern.matcher(text).matches()); - } - protected String[] getGroups(String text) { - Matcher matcher = pattern.matcher(text); + Matcher matcher = listener.getPattern().matcher(text); assertTrue(matcher.matches()); String[] groups = new String[matcher.groupCount() + 1]; for (int i = 0; i < groups.length; i++) groups[i] = matcher.group(i); return groups; } - + protected void assertCaptures(String text) { + assertTrue(captures(text)); + } + protected void assertNotCaptures(String text) { + assertTrue(captures(text)); + } protected void assertGroup(String text, int group, String expect) { - assertEquals(getGroups(text)[group], expect); + assertEquals(expect, getGroups(text)[group]); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java index b8a5f9da..ec2db07b 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java @@ -3,18 +3,18 @@ package me.xmrvizzy.skyblocker.chat.filters; import me.xmrvizzy.skyblocker.chat.ChatListenerTest; import org.junit.jupiter.api.Test; -class AbilityFilterTest extends ChatListenerTest<AbilityFilter> { +class AbilityFilterTest extends ChatFilterTest<AbilityFilter> { public AbilityFilterTest() { super(new AbilityFilter()); } @Test void charges() { - assertMatches("No more charges, next one in 13.2s!"); + assertFilters("No more charges, next one in 13.2s!"); } @Test void cooldown() { - assertMatches("This ability is on cooldown for 42s."); + assertFilters("This ability is on cooldown for 42s."); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java index 54e1643d..639042fe 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java @@ -3,48 +3,53 @@ package me.xmrvizzy.skyblocker.chat.filters; import me.xmrvizzy.skyblocker.chat.ChatListenerTest; import org.junit.jupiter.api.Test; -class AdFilterTest extends ChatListenerTest<AdFilter> { +class AdFilterTest extends ChatFilterTest<AdFilter> { public AdFilterTest() { super(new AdFilter()); } @Test void noRank() { - assertMatches("§7Advertiser§7: buy"); + assertCaptures("§7Advertiser§7: advertisement"); } @Test void vip() { - assertMatches("§a[VIP] Advertiser§f: buy"); + assertCaptures("§a[VIP] Advertiser§f: advertisement"); } @Test void mvp() { - assertMatches("§b[MVP§c+§b] Advertiser§f: buy"); + assertCaptures("§b[MVP§c+§b] Advertiser§f: advertisement"); } @Test void plusPlus() { - assertMatches("§6[MVP§c++§6] Advertiser§f: buy"); + assertCaptures("§6[MVP§c++§6] Advertiser§f: advertisement"); + } + + @Test + void capturesMessage() { + assertGroup("§b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump"); } @Test void simpleAd() { - assertMatches("§b[MVP§c+§b] b2dderr§f: buying prismapump"); + assertFilters("§b[MVP§c+§b] b2dderr§f: buying prismapump"); } @Test void uppercaseAd() { - assertMatches("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); + assertFilters("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); } @Test void characterSpam() { - assertMatches("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); + assertFilters("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); } @Test void notAd() { - assertNotMatches("§a[VIP] NotMatching§f: This message shouldn't match!"); + assertNotFilters("§a[VIP] NotMatching§f: This message shouldn't match!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java index 52ab5fe9..2aa14e1c 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java @@ -3,13 +3,13 @@ package me.xmrvizzy.skyblocker.chat.filters; import me.xmrvizzy.skyblocker.chat.ChatListenerTest; import org.junit.jupiter.api.Test; -class AoteFilterTest extends ChatListenerTest<AoteFilter> { +class AoteFilterTest extends ChatFilterTest<AoteFilter> { public AoteFilterTest() { super(new AoteFilter()); } @Test void testRegex() { - assertMatches("There are blocks in the way!"); + assertFilters("There are blocks in the way!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java new file mode 100644 index 00000000..ff3399a7 --- /dev/null +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.chat.filters; + +import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatListenerTest; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class ChatFilterTest<T extends ChatListener> extends ChatListenerTest<T> { + public ChatFilterTest(T listener) { + super(listener); + } + + protected boolean filters(String text) { + if(!captures(text)) + return false; + String[] groups = getGroups(text); + return listener.onMessage(groups); + } + protected void assertFilters(String text) { + assertTrue(filters(text)); + } + protected void assertNotFilters(String text) { + assertFalse(filters(text)); + } +} diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java index 49ceadb3..f7b4d59b 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java @@ -3,18 +3,18 @@ package me.xmrvizzy.skyblocker.chat.filters; import me.xmrvizzy.skyblocker.chat.ChatListenerTest; import org.junit.jupiter.api.Test; -class HealFilterTest extends ChatListenerTest<HealFilter> { +class HealFilterTest extends ChatFilterTest<HealFilter> { public HealFilterTest() { super(new HealFilter()); } @Test void healSelf() { - assertMatches("You healed yourself for 18.3 health!"); + assertFilters("You healed yourself for 18.3 health!"); } @Test void healedYou() { - assertMatches("H3aler_ healed you for 56 health!"); + assertFilters("H3aler_ healed you for 56 health!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java index 8ee58564..a6526925 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java @@ -3,18 +3,18 @@ package me.xmrvizzy.skyblocker.chat.filters; import me.xmrvizzy.skyblocker.chat.ChatListenerTest; import org.junit.jupiter.api.Test; -class ImplosionFilterTest extends ChatListenerTest<ImplosionFilter> { +class ImplosionFilterTest extends ChatFilterTest<ImplosionFilter> { public ImplosionFilterTest() { super(new ImplosionFilter()); } @Test void oneEnemy() { - assertMatches("Your Implosion hit 1 enemy for 636,116.8 damage."); + assertFilters("Your Implosion hit 1 enemy for 636,116.8 damage."); } @Test void multipleEnemies() { - assertMatches("Your Implosion hit 7 enemies for 4,452,817.4 damage."); + assertFilters("Your Implosion hit 7 enemies for 4,452,817.4 damage."); } }
\ No newline at end of file |