FilterManager.java
package dev.aura.bungeechat.api.filter;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import lombok.experimental.UtilityClass;
@UtilityClass
public class FilterManager {
public static final int SWEAR_FILTER_PRIORITY = 100;
public static final int ADVERTISING_FILTER_PRIORITY = 200;
public static final int CAPSLOCK_FILTER_PRIORITY = 300;
public static final int DUPLICATION_FILTER_PRIORITY = 400;
public static final int SPAM_FILTER_PRIORITY = 500;
public static final int LOCK_CHAT_FILTER_PRIORITY = 600;
private static Map<String, BungeeChatFilter> filters = new LinkedHashMap<>();
public static void addFilter(String name, BungeeChatFilter filter)
throws UnsupportedOperationException {
filters.put(name, filter);
sortFilters();
}
public static BungeeChatFilter removeFilter(String name) throws UnsupportedOperationException {
BungeeChatFilter out = filters.remove(name);
sortFilters();
return out;
}
public static String applyFilters(BungeeChatAccount sender, String message)
throws UnsupportedOperationException, BlockMessageException {
for (BungeeChatFilter filter : filters.values()) {
message = filter.applyFilter(sender, message);
}
return message;
}
private static void sortFilters() {
filters =
filters.entrySet().stream()
.sorted(Collections.reverseOrder(Entry.comparingByValue()))
.collect(
Collectors.toMap(
Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
}
}