SwearWordsFilter.java
package dev.aura.bungeechat.filter;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.filter.BungeeChatFilter;
import dev.aura.bungeechat.api.filter.FilterManager;
import dev.aura.bungeechat.api.utils.RegexUtil;
import dev.aura.bungeechat.permission.Permission;
import dev.aura.bungeechat.permission.PermissionManager;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class SwearWordsFilter implements BungeeChatFilter {
private final List<Pattern> swearWords;
private final String replacement;
public SwearWordsFilter(
List<String> swearWords,
String replacement,
boolean freeMatching,
boolean leetSpeak,
boolean ignoreSpaces,
boolean ignoreDuplicateLetters) {
this.swearWords =
swearWords.stream()
.map(
word ->
RegexUtil.parseWildcardToPattern(
word,
Pattern.CASE_INSENSITIVE,
freeMatching,
leetSpeak,
ignoreSpaces,
ignoreDuplicateLetters))
.collect(Collectors.toList());
this.replacement = replacement;
}
@Override
public String applyFilter(BungeeChatAccount sender, String message) {
if (PermissionManager.hasPermission(sender, Permission.BYPASS_ANTI_SWEAR)) return message;
for (Pattern p : swearWords) {
message = p.matcher(message).replaceAll(replacement);
}
return message;
}
@Override
public int getPriority() {
return FilterManager.SWEAR_FILTER_PRIORITY;
}
}