ChatLoggingManager.java
package dev.aura.bungeechat.chatlog;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.enums.ChannelType;
import dev.aura.bungeechat.api.placeholder.BungeeChatContext;
import dev.aura.bungeechat.api.utils.RegexUtil;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.experimental.UtilityClass;
@UtilityClass
public class ChatLoggingManager {
private static final List<ChatLogger> loggers = new LinkedList<>();
private static List<Pattern> filteredCommands = new LinkedList<>();
public static void addLogger(ChatLogger logger) {
loggers.add(logger);
}
public static void removeLogger(ChatLogger logger) {
loggers.remove(logger);
}
public static void logMessage(String channel, BungeeChatAccount sender, String message) {
BungeeChatContext context = new BungeeChatContext(sender, message);
context.setChannel(channel);
logMessage(context);
}
public static void logMessage(ChannelType channel, BungeeChatContext context) {
logMessage(channel.name(), context);
}
public static void logMessage(String channel, BungeeChatContext context) {
context.setChannel(channel);
logMessage(context);
}
public static void logMessage(BungeeChatContext context) {
context.require(
BungeeChatContext.HAS_SENDER, BungeeChatContext.HAS_MESSAGE, BungeeChatContext.HAS_CHANNEL);
getStream().forEach(logger -> logger.log(context));
}
public static void logCommand(BungeeChatAccount account, String command) {
for (Pattern pattern : filteredCommands) {
if (pattern.matcher(command).find()) return;
}
logMessage("COMMAND", account, command);
}
public static void loadFilteredCommands(List<String> commands) {
filteredCommands =
commands.stream().map(RegexUtil::parseWildcardToPattern).collect(Collectors.toList());
}
private static Stream<ChatLogger> getStream() {
return loggers.stream();
}
}