Add console regex filter for discord module (#4534)

This commit is contained in:
Josh Roy 2021-10-24 12:12:42 -04:00 committed by GitHub
parent 2ed94f1048
commit 9601687190
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 12 deletions

View File

@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import java.io.File;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -30,10 +31,11 @@ public class DiscordSettings implements IConf {
private OnlineStatus status;
private Activity statusActivity;
private Pattern discordFilter;
private List<Pattern> discordFilter;
private MessageFormat consoleFormat;
private Level consoleLogLevel;
private List<Pattern> consoleFilter;
private MessageFormat discordToMcFormat;
private MessageFormat tempMuteFormat;
@ -109,7 +111,7 @@ public class DiscordSettings implements IConf {
return config.getBoolean("chat.filter-newlines", true);
}
public Pattern getDiscordFilter() {
public List<Pattern> getDiscordFilters() {
return discordFilter;
}
@ -153,6 +155,10 @@ public class DiscordSettings implements IConf {
return consoleLogLevel;
}
public List<Pattern> getConsoleFilters() {
return consoleFilter;
}
public boolean isShowAvatar() {
return config.getBoolean("show-avatar", false);
}
@ -388,20 +394,60 @@ public class DiscordSettings implements IConf {
statusActivity = Activity.of(activityType, config.getString("presence.message", "Minecraft"));
}
final String filter = config.getString("chat.discord-filter", null);
if (filter != null && !filter.trim().isEmpty()) {
if (config.isList("chat.discord-filter")) {
final List<Pattern> filters = new ArrayList<>();
for (final String chatFilterString : config.getList("chat.discord-filter", String.class)) {
if (chatFilterString != null && !chatFilterString.trim().isEmpty()) {
try {
filters.add(Pattern.compile(chatFilterString));
} catch (PatternSyntaxException e) {
plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"chat.discord-filter\": " + e.getMessage());
}
}
}
discordFilter = Collections.unmodifiableList(filters);
} else {
try {
discordFilter = Pattern.compile(filter);
final String chatFilter = config.getString("chat.discord-filter", null);
if (chatFilter != null && !chatFilter.trim().isEmpty()) {
discordFilter = Collections.singletonList(Pattern.compile(chatFilter));
} else {
discordFilter = Collections.emptyList();
}
} catch (PatternSyntaxException e) {
plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"chat.discord-filter\": " + e.getMessage());
discordFilter = null;
discordFilter = Collections.emptyList();
}
} else {
discordFilter = null;
}
consoleLogLevel = Level.toLevel(config.getString("console.log-level", null), Level.INFO);
if (config.isList("console.console-filter")) {
final List<Pattern> filters = new ArrayList<>();
for (final String filterString : config.getList("console.console-filter", String.class)) {
if (filterString != null && !filterString.trim().isEmpty()) {
try {
filters.add(Pattern.compile(filterString));
} catch (PatternSyntaxException e) {
plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"console.log-level\": " + e.getMessage());
}
}
}
consoleFilter = Collections.unmodifiableList(filters);
} else {
try {
final String cFilter = config.getString("console.console-filter", null);
if (cFilter != null && !cFilter.trim().isEmpty()) {
consoleFilter = Collections.singletonList(Pattern.compile(cFilter));
} else {
consoleFilter = Collections.emptyList();
}
} catch (PatternSyntaxException e) {
plugin.getLogger().log(java.util.logging.Level.WARNING, "Invalid pattern for \"console.log-level\": " + e.getMessage());
consoleFilter = Collections.emptyList();
}
}
consoleFormat = generateMessageFormat(getFormatString(".console.format"), "[{timestamp} {level}] {message}", false,
"timestamp", "level", "message");

View File

@ -17,6 +17,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
public class DiscordListener extends ListenerAdapter {
private final static Logger logger = Logger.getLogger("EssentialsDiscord");
@ -51,11 +52,15 @@ public class DiscordListener extends ListenerAdapter {
final String effectiveName = member == null ? event.getAuthor().getName() : member.getEffectiveName();
final Message message = event.getMessage();
if (plugin.getSettings().getDiscordFilter() != null && plugin.getSettings().getDiscordFilter().matcher(message.getContentDisplay()).find()) {
if (plugin.isDebug()) {
logger.log(Level.INFO, "Skipping message " + message.getId() + " with content, \"" + message.getContentDisplay() + "\" as it matched the filter!");
if (!plugin.getSettings().getDiscordFilters().isEmpty()) {
for (final Pattern pattern : plugin.getSettings().getDiscordFilters()) {
if (pattern.matcher(message.getContentDisplay()).find()) {
if (plugin.isDebug()) {
logger.log(Level.INFO, "Skipping message " + message.getId() + " with content, \"" + message.getContentDisplay() + "\" as it matched the filter!");
}
return;
}
}
return;
}
final StringBuilder messageBuilder = new StringBuilder(message.getContentDisplay());

View File

@ -15,6 +15,7 @@ import org.bukkit.Bukkit;
import java.time.Instant;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.regex.Pattern;
import static com.earth2me.essentials.I18n.tl;
@ -67,6 +68,14 @@ public class ConsoleInjector extends AbstractAppender {
return;
}
if (!jda.getSettings().getConsoleFilters().isEmpty()) {
for (final Pattern pattern : jda.getSettings().getConsoleFilters()) {
if (pattern.matcher(entry).find()) {
return;
}
}
}
final String loggerName = event.getLoggerName();
if (!loggerName.isEmpty() && !loggerName.contains(".")) {
entry = "[" + event.getLoggerName() + "] " + entry;

View File

@ -100,6 +100,10 @@ console:
# - debug
# - trace
log-level: info
# Blocks any console message from sending to Discord if it matches this regex pattern.
# This is useful if you want to ignore certain messages from the console.
# Can also be a list of regex patterns in addition to a single regex pattern.
console-filter: ""
# Configure which Discord channels different messages will be sent to.
# You can either use the names of the channels listed above or just the id of a channel.