Skip to content

Commit ab7c87c

Browse files
Merge pull request #28 from ExternalTime/simplify-ad-filter
Simplified ad filter implementation
2 parents 6699625 + e3a6542 commit ab7c87c

File tree

8 files changed

+76
-60
lines changed

8 files changed

+76
-60
lines changed
Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,29 @@
11
package me.xmrvizzy.skyblocker.chat.filters;
22

3-
import me.xmrvizzy.skyblocker.chat.ChatListener;
43
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
54

65
import java.util.regex.Pattern;
76

87
public class AdFilter extends ChatFilter {
9-
private static final String regex;
10-
8+
private static final Pattern[] AD_FILTERS = new Pattern[]{
9+
Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE),
10+
Pattern.compile("(.)\\1{7,}"),
11+
Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE),
12+
};
1113
public AdFilter() {
12-
super(regex);
14+
super("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$");
1315
}
1416

1517
@Override
1618
public boolean isEnabled() {
1719
return SkyblockerConfig.get().messages.hideAds;
1820
}
1921

20-
static {
21-
StringBuilder sb = new StringBuilder("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: ");
22-
String[] inexact = new String[] {
23-
"(?:on|in|check|at) my ah",
24-
"(?>(.)\\2{7,})",
25-
};
26-
String[] exact = new String[]{
27-
"(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|).*",
28-
};
29-
sb.append("(?i:.*(?:");
30-
sb.append(inexact[0]);
31-
for(int i = 1; i < inexact.length; i++) {
32-
sb.append("|");
33-
sb.append(inexact[i]);
34-
}
35-
sb.append(").*");
36-
for (String s : exact) {
37-
sb.append("|");
38-
sb.append(s);
39-
}
40-
sb.append(")$");
41-
regex = sb.toString();
22+
@Override
23+
public boolean onMessage(String[] groups) {
24+
for(Pattern adFilter : AD_FILTERS)
25+
if(adFilter.matcher(groups[2]).find())
26+
return true;
27+
return false;
4228
}
4329
}
Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
11
package me.xmrvizzy.skyblocker.chat;
22

33
import java.util.regex.Matcher;
4-
import java.util.regex.Pattern;
54

65
import static org.junit.jupiter.api.Assertions.*;
76

87
public abstract class ChatListenerTest<T extends ChatListener> {
9-
private final Pattern pattern;
8+
protected final T listener;
109

11-
public ChatListenerTest(T chatListener) {
12-
pattern = chatListener.getPattern();
10+
public ChatListenerTest(T listener) {
11+
this.listener = listener;
1312
}
1413

15-
protected void assertMatches(String text) {
16-
assertTrue(pattern.matcher(text).matches());
14+
protected boolean captures(String text) {
15+
return listener.getPattern().matcher(text).matches();
1716
}
18-
19-
protected void assertNotMatches(String text) {
20-
assertFalse(pattern.matcher(text).matches());
21-
}
22-
2317
protected String[] getGroups(String text) {
24-
Matcher matcher = pattern.matcher(text);
18+
Matcher matcher = listener.getPattern().matcher(text);
2519
assertTrue(matcher.matches());
2620
String[] groups = new String[matcher.groupCount() + 1];
2721
for (int i = 0; i < groups.length; i++)
2822
groups[i] = matcher.group(i);
2923
return groups;
3024
}
31-
25+
protected void assertCaptures(String text) {
26+
assertTrue(captures(text));
27+
}
28+
protected void assertNotCaptures(String text) {
29+
assertTrue(captures(text));
30+
}
3231
protected void assertGroup(String text, int group, String expect) {
33-
assertEquals(getGroups(text)[group], expect);
32+
assertEquals(expect, getGroups(text)[group]);
3433
}
3534
}

src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
44
import org.junit.jupiter.api.Test;
55

6-
class AbilityFilterTest extends ChatListenerTest<AbilityFilter> {
6+
class AbilityFilterTest extends ChatFilterTest<AbilityFilter> {
77
public AbilityFilterTest() {
88
super(new AbilityFilter());
99
}
1010

1111
@Test
1212
void charges() {
13-
assertMatches("No more charges, next one in 13.2s!");
13+
assertFilters("No more charges, next one in 13.2s!");
1414
}
1515

1616
@Test
1717
void cooldown() {
18-
assertMatches("This ability is on cooldown for 42s.");
18+
assertFilters("This ability is on cooldown for 42s.");
1919
}
2020
}

src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,53 @@
33
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
44
import org.junit.jupiter.api.Test;
55

6-
class AdFilterTest extends ChatListenerTest<AdFilter> {
6+
class AdFilterTest extends ChatFilterTest<AdFilter> {
77
public AdFilterTest() {
88
super(new AdFilter());
99
}
1010

1111
@Test
1212
void noRank() {
13-
assertMatches("§7Advertiser§7: buy");
13+
assertCaptures("§7Advertiser§7: advertisement");
1414
}
1515

1616
@Test
1717
void vip() {
18-
assertMatches("§a[VIP] Advertiser§f: buy");
18+
assertCaptures("§a[VIP] Advertiser§f: advertisement");
1919
}
2020

2121
@Test
2222
void mvp() {
23-
assertMatches("§b[MVP§c+§b] Advertiser§f: buy");
23+
assertCaptures("§b[MVP§c+§b] Advertiser§f: advertisement");
2424
}
2525

2626
@Test
2727
void plusPlus() {
28-
assertMatches("§6[MVP§c++§6] Advertiser§f: buy");
28+
assertCaptures("§6[MVP§c++§6] Advertiser§f: advertisement");
29+
}
30+
31+
@Test
32+
void capturesMessage() {
33+
assertGroup("§b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump");
2934
}
3035

3136
@Test
3237
void simpleAd() {
33-
assertMatches("§b[MVP§c+§b] b2dderr§f: buying prismapump");
38+
assertFilters("§b[MVP§c+§b] b2dderr§f: buying prismapump");
3439
}
3540

3641
@Test
3742
void uppercaseAd() {
38-
assertMatches("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!");
43+
assertFilters("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!");
3944
}
4045

4146
@Test
4247
void characterSpam() {
43-
assertMatches("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<");
48+
assertFilters("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<");
4449
}
4550

4651
@Test
4752
void notAd() {
48-
assertNotMatches("§a[VIP] NotMatching§f: This message shouldn't match!");
53+
assertNotFilters("§a[VIP] NotMatching§f: This message shouldn't match!");
4954
}
5055
}

src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
44
import org.junit.jupiter.api.Test;
55

6-
class AoteFilterTest extends ChatListenerTest<AoteFilter> {
6+
class AoteFilterTest extends ChatFilterTest<AoteFilter> {
77
public AoteFilterTest() {
88
super(new AoteFilter());
99
}
1010

1111
@Test
1212
void testRegex() {
13-
assertMatches("There are blocks in the way!");
13+
assertFilters("There are blocks in the way!");
1414
}
1515
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package me.xmrvizzy.skyblocker.chat.filters;
2+
3+
import me.xmrvizzy.skyblocker.chat.ChatListener;
4+
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
5+
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
import static org.junit.jupiter.api.Assertions.assertFalse;
8+
9+
public class ChatFilterTest<T extends ChatListener> extends ChatListenerTest<T> {
10+
public ChatFilterTest(T listener) {
11+
super(listener);
12+
}
13+
14+
protected boolean filters(String text) {
15+
if(!captures(text))
16+
return false;
17+
String[] groups = getGroups(text);
18+
return listener.onMessage(groups);
19+
}
20+
protected void assertFilters(String text) {
21+
assertTrue(filters(text));
22+
}
23+
protected void assertNotFilters(String text) {
24+
assertFalse(filters(text));
25+
}
26+
}

src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
44
import org.junit.jupiter.api.Test;
55

6-
class HealFilterTest extends ChatListenerTest<HealFilter> {
6+
class HealFilterTest extends ChatFilterTest<HealFilter> {
77
public HealFilterTest() {
88
super(new HealFilter());
99
}
1010

1111
@Test
1212
void healSelf() {
13-
assertMatches("You healed yourself for 18.3 health!");
13+
assertFilters("You healed yourself for 18.3 health!");
1414
}
1515

1616
@Test
1717
void healedYou() {
18-
assertMatches("H3aler_ healed you for 56 health!");
18+
assertFilters("H3aler_ healed you for 56 health!");
1919
}
2020
}

src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import me.xmrvizzy.skyblocker.chat.ChatListenerTest;
44
import org.junit.jupiter.api.Test;
55

6-
class ImplosionFilterTest extends ChatListenerTest<ImplosionFilter> {
6+
class ImplosionFilterTest extends ChatFilterTest<ImplosionFilter> {
77
public ImplosionFilterTest() {
88
super(new ImplosionFilter());
99
}
1010

1111
@Test
1212
void oneEnemy() {
13-
assertMatches("Your Implosion hit 1 enemy for 636,116.8 damage.");
13+
assertFilters("Your Implosion hit 1 enemy for 636,116.8 damage.");
1414
}
1515

1616
@Test
1717
void multipleEnemies() {
18-
assertMatches("Your Implosion hit 7 enemies for 4,452,817.4 damage.");
18+
assertFilters("Your Implosion hit 7 enemies for 4,452,817.4 damage.");
1919
}
2020
}

0 commit comments

Comments
 (0)