mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-02-21 16:05:03 +00:00
Add console regex filter for discord module (#4534)
This commit is contained in:
parent
2ed94f1048
commit
9601687190
4 changed files with 76 additions and 12 deletions
|
@ -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");
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue