From a5c23d842d390a83d9f2ba0c937ae20c046d4214 Mon Sep 17 00:00:00 2001 From: len <40720638+destro174@users.noreply.github.com> Date: Sun, 13 Jun 2021 13:53:49 +0200 Subject: [PATCH] progress --- .gitignore | 1 + api/src/main/java/com/alttd/chat/ChatAPI.java | 2 - .../com/alttd/chat/ChatImplementation.java | 4 +- .../java/com/alttd/chat/config/Config.java | 3 ++ .../com/alttd/chat/config/RegexConfig.java | 35 ++++++-------- .../chat/database/DatabaseConnection.java | 4 +- .../java/com/alttd/chat/database/Queries.java | 2 - .../alttd/chat/managers/ChatUserManager.java | 15 +++--- .../com/alttd/chat/managers/RegexManager.java | 18 ++----- .../com/alttd/chat/objects/ChatFilter.java | 43 ++++++++--------- .../java/com/alttd/chat/objects/ChatUser.java | 6 +-- .../com/alttd/chat/objects/FilterType.java | 2 + .../java/com/alttd/chat/util/ALogger.java | 2 +- .../main/java/com/alttd/chat/ChatPlugin.java | 5 +- .../com/alttd/chat/handler/ChatHandler.java | 26 ++++++---- .../alttd/chat/listeners/PlayerListener.java | 22 ++++++--- velocity/dependency-reduced-pom.xml | 6 +++ velocity/pom.xml | 4 +- .../java/com/alttd/chat/VelocityChat.java | 6 +-- .../alttd/chat/commands/GlobalAdminChat.java | 2 +- .../com/alttd/chat/commands/GlobalChat.java | 48 +++++++++---------- .../com/alttd/chat/handlers/ChatHandler.java | 39 +-------------- .../alttd/chat/handlers/ServerHandler.java | 7 ++- .../chat/listeners/PluginMessageListener.java | 3 +- 24 files changed, 139 insertions(+), 166 deletions(-) diff --git a/.gitignore b/.gitignore index a061501..3633f4a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ testserver run galaxy +notes # Compiled class file *.class diff --git a/api/src/main/java/com/alttd/chat/ChatAPI.java b/api/src/main/java/com/alttd/chat/ChatAPI.java index d5db94c..acc9eb0 100644 --- a/api/src/main/java/com/alttd/chat/ChatAPI.java +++ b/api/src/main/java/com/alttd/chat/ChatAPI.java @@ -3,8 +3,6 @@ package com.alttd.chat; import com.alttd.chat.database.DatabaseConnection; import net.luckperms.api.LuckPerms; -import java.util.UUID; - public interface ChatAPI { static ChatAPI get() { diff --git a/api/src/main/java/com/alttd/chat/ChatImplementation.java b/api/src/main/java/com/alttd/chat/ChatImplementation.java index 87e3401..12d140e 100644 --- a/api/src/main/java/com/alttd/chat/ChatImplementation.java +++ b/api/src/main/java/com/alttd/chat/ChatImplementation.java @@ -20,8 +20,8 @@ public class ChatImplementation implements ChatAPI{ Config.init(); luckPerms = getLuckPerms(); - databaseConnection = getDataBase(); - Queries.createTables(); + //databaseConnection = getDataBase(); // todo fix sql + //Queries.createTables(); // todo fix sql ChatUserManager.initialize(); // loads all the users from the db and adds them. RegexManager.initialize(); // load the filters and regexes from config diff --git a/api/src/main/java/com/alttd/chat/config/Config.java b/api/src/main/java/com/alttd/chat/config/Config.java index 2a90592..f34a821 100644 --- a/api/src/main/java/com/alttd/chat/config/Config.java +++ b/api/src/main/java/com/alttd/chat/config/Config.java @@ -17,6 +17,7 @@ import java.lang.reflect.Modifier; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.regex.Pattern; public final class Config { @@ -162,12 +163,14 @@ public final class Config { public static List STAFFGROUPS = new ArrayList<>(); public static String MINIMIUMSTAFFRANK = "trainee"; public static String CONSOLENAME = "Console"; + public static UUID CONSOLEUUID = UUID.randomUUID(); private static void settings() { PREFIXGROUPS = getList("settings.prefix-groups", Lists.newArrayList("discord", "socialmedia", "eventteam", "eventleader", "youtube", "twitch", "developer")); STAFFGROUPS = getList("settings.staff-groups", Lists.newArrayList("trainee", "moderator", "headmod", "admin", "manager", "owner")); CONSOLENAME = getString("settings.console-name", CONSOLENAME); + CONSOLEUUID = UUID.fromString(getString("settings.console-uuid", CONSOLEUUID.toString())); MINIMIUMSTAFFRANK = getString("settings.minimum-staff-rank", MINIMIUMSTAFFRANK); } diff --git a/api/src/main/java/com/alttd/chat/config/RegexConfig.java b/api/src/main/java/com/alttd/chat/config/RegexConfig.java index a3c34c1..160d4d3 100644 --- a/api/src/main/java/com/alttd/chat/config/RegexConfig.java +++ b/api/src/main/java/com/alttd/chat/config/RegexConfig.java @@ -2,11 +2,11 @@ package com.alttd.chat.config; import com.alttd.chat.managers.RegexManager; import com.alttd.chat.objects.ChatFilter; +import com.alttd.chat.util.ALogger; import com.google.common.base.Throwables; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.ConfigurationOptions; -import ninja.leaping.configurate.commented.CommentedConfigurationNode; import ninja.leaping.configurate.objectmapping.ObjectMappingException; import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; import org.yaml.snakeyaml.DumperOptions; @@ -33,9 +33,6 @@ public final class RegexConfig { public static ConfigurationNode config; public static YAMLConfigurationLoader configLoader; - static int version; - static boolean verbose; - public static void init() { CONFIG_FILE = new File(Config.CONFIGPATH, "filters.yml");; configLoader = YAMLConfigurationLoader.builder() @@ -64,10 +61,7 @@ public final class RegexConfig { e.printStackTrace(); } - verbose = getBoolean("verbose", true); - version = getInt("config-version", 1); - - readConfig(Config.class, null); + readConfig(RegexConfig.class, null); try { configLoader.save(config); } catch (IOException e) { @@ -146,7 +140,9 @@ public final class RegexConfig { return new ArrayList<>(); } - private void loadChatFilters() { + public static List ChatFilters = new ArrayList<>(); + private static void loadChatFilters() { + ALogger.info("loading filters"); // for (Map.Entry entry : config.getChildrenMap().entrySet()) { // String name = entry.getKey().toString(); // the name in the config this filter has // String type = entry.getValue().getNode("type").getString(); // the type of filter, block or replace @@ -170,19 +166,18 @@ public final class RegexConfig { // } Map properties = new HashMap<>(); - config.getChildrenMap().forEach((key, value) -> { - if (value.hasMapChildren()) { - String rkey = key.toString(); - properties.put("name", rkey); - for (Map.Entry vl : value.getChildrenMap().entrySet()) { - properties.put(rkey + "." + vl.getKey(), vl.getValue().getValue()); - } - } else { - properties.put(key.toString(), value.getValue()); + config.getChildrenMap().entrySet().forEach(entry -> { + try { + String name = entry.getKey().toString(); + String type = entry.getValue().getNode("type").getString(); + String regex = entry.getValue().getNode("regex").getString(); + String replacement = entry.getValue().getNode("replacement").getString(); + List exclusions = entry.getValue().getNode("exclusions").getList(TypeToken.of(String.class), new ArrayList<>()); + ChatFilter chatFilter = new ChatFilter(name, type, regex, replacement, exclusions); + RegexManager.addFilter(chatFilter); + } catch(ObjectMappingException ex) { } }); - ChatFilter chatFilter = new ChatFilter(properties); - RegexManager.addFilter(chatFilter); } } diff --git a/api/src/main/java/com/alttd/chat/database/DatabaseConnection.java b/api/src/main/java/com/alttd/chat/database/DatabaseConnection.java index dedac41..006385f 100644 --- a/api/src/main/java/com/alttd/chat/database/DatabaseConnection.java +++ b/api/src/main/java/com/alttd/chat/database/DatabaseConnection.java @@ -39,12 +39,12 @@ public class DatabaseConnection { return; } try { - Class.forName("com.mysql.jdbc.Driver"); + Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } connection = DriverManager.getConnection( - "jdbc:" + Config.DRIVER + "://" + Config.IP + ":" + Config.PORT + "/" + Config.DATABASE + "?autoReconnect=true", + "jdbc:" + Config.DRIVER + "://" + Config.IP + ":" + Config.PORT + "/" + Config.DATABASE + "?autoReconnect=true&enabledTLSProtocols=TLSv1.1", Config.USERNAME, Config.PASSWORD); } } diff --git a/api/src/main/java/com/alttd/chat/database/Queries.java b/api/src/main/java/com/alttd/chat/database/Queries.java index 77257e0..6382c47 100644 --- a/api/src/main/java/com/alttd/chat/database/Queries.java +++ b/api/src/main/java/com/alttd/chat/database/Queries.java @@ -3,7 +3,6 @@ package com.alttd.chat.database; import com.alttd.chat.managers.ChatUserManager; import com.alttd.chat.objects.ChatUser; import com.alttd.chat.objects.Party; -import com.alttd.chat.util.ALogger; import java.sql.Connection; import java.sql.PreparedStatement; @@ -272,7 +271,6 @@ public class Queries { if (party == null) { //TODO log this properly - ALogger.error("INCORRECT LOGGING: party was empty, the party id stored in the database with user " + uuid + " was invalid."); System.out.println("INCORRECT LOGGING: party was empty, the party id stored in the database with user " + uuid + " was invalid."); continue; } diff --git a/api/src/main/java/com/alttd/chat/managers/ChatUserManager.java b/api/src/main/java/com/alttd/chat/managers/ChatUserManager.java index 3c685b3..3587b80 100644 --- a/api/src/main/java/com/alttd/chat/managers/ChatUserManager.java +++ b/api/src/main/java/com/alttd/chat/managers/ChatUserManager.java @@ -4,6 +4,7 @@ import com.alttd.chat.database.Queries; import com.alttd.chat.objects.ChatUser; import com.alttd.chat.objects.Mail; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; @@ -11,25 +12,27 @@ import java.util.stream.Collectors; public final class ChatUserManager { - private static CopyOnWriteArrayList chatUsers;// not sure on this, could cause errors later on + private static ArrayList chatUsers;// not sure on this, could cause errors later on public static void initialize() { - chatUsers = new CopyOnWriteArrayList<>(); - Queries.loadChatUsers(); + chatUsers = new ArrayList<>(); + //Queries.loadChatUsers(); // todo fix sql } public static void addUser(ChatUser user) { - if(getChatUser(user.getUuid()) != null) + if(getChatUser(user.getUuid()) == null) chatUsers.add(user); } public static ChatUser getChatUser(UUID uuid) { for(ChatUser user : chatUsers) { - if(user.getUuid() == uuid) { + if(uuid.compareTo(user.getUuid()) == 0) { return user; } } - return null; + ChatUser user = new ChatUser(uuid, -1, false, false); + chatUsers.add(user); + return user; // create a new user? } public List getUnReadMail(ChatUser user) { diff --git a/api/src/main/java/com/alttd/chat/managers/RegexManager.java b/api/src/main/java/com/alttd/chat/managers/RegexManager.java index 3205a90..8201833 100644 --- a/api/src/main/java/com/alttd/chat/managers/RegexManager.java +++ b/api/src/main/java/com/alttd/chat/managers/RegexManager.java @@ -2,7 +2,7 @@ package com.alttd.chat.managers; import com.alttd.chat.config.RegexConfig; import com.alttd.chat.objects.ChatFilter; -import com.alttd.chat.objects.FilterType; +import com.alttd.chat.util.ALogger; import java.util.ArrayList; import java.util.List; @@ -18,22 +18,15 @@ public class RegexManager { } public static void addFilter(ChatFilter filter) { + ALogger.info("Adding " + filter.getName()); chatFilters.add(filter); } -// public static boolean violatesFilter(String text) { -// for (Map.Entry> entry : cancelRegex.entrySet()) { -// Matcher matcher = entry.getKey().matcher(text); -// while (matcher.find()) { -// if (!entry.getValue().contains(matcher.group())) return true; -// } -// } -// return false; -// } public static String replaceText(String text) { // TODO loop all objects in the list and check if they violate based on the MATCHER for(ChatFilter chatFilter : chatFilters) { - switch (chatFilter.getType()) { + case CHAT: + break; case REPLACE: text = chatFilter.replaceText(text); break; @@ -44,9 +37,6 @@ public class RegexManager { break; } } -// for (Map.Entry entry : replaceRegex.entrySet()) { -// text = text.replaceAll(entry.getKey(), entry.getValue()); -// } return text; } diff --git a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java index 5457439..a6651e0 100644 --- a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java +++ b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java @@ -1,48 +1,45 @@ package com.alttd.chat.objects; -import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ChatFilter { - private final Properties properties = new Properties(); - private final Pattern pattern; + private final String name; private final FilterType filterType; + private final String regex; + private final Pattern pattern; + private final String replacement; + private final List exclusions; - public ChatFilter(Map props) { - addDefaults(); - properties.keySet().stream().filter(props::containsKey).forEach((nkey) -> properties.put(nkey, props.get(nkey))); - pattern = Pattern.compile(getRegex()); - filterType = FilterType.getType((String) properties.get("type")); + public ChatFilter(String name, String type, String regex, String replacement, List exclusions) { + this.name = name; + this.filterType = FilterType.getType(type); + this.regex = regex; + this.pattern = Pattern.compile(getRegex()); + this.replacement = replacement; + this.exclusions = exclusions; } - private void addDefaults() { - properties.put("name", ""); - properties.put("type", null); - properties.put("regex", ""); - properties.put("replacement", ""); - properties.put("exclusions", new ArrayList()); + public String getName() { + return this.name; } public String getRegex() { - return (String) properties.get("regex"); + return this.regex; } public FilterType getType() { - return filterType; + return this.filterType; } public String getReplacement() { - return (String) properties.get("replacement"); + return this.replacement; } - @SuppressWarnings("unchecked") public List getExclusions() { - return (List) properties.get("exclusions"); + return this.exclusions; } public boolean matches(String input) { @@ -53,8 +50,8 @@ public class ChatFilter { public String replaceText(String input) { Matcher matcher = pattern.matcher(input); while (matcher.find()) { - String group = matcher.group(); - if(!getExclusions().contains(group)) { // doesn't work well with capitals, use a stream filter? + String group = matcher.group(); // todo debug + if(getExclusions().stream().noneMatch(s -> s.equalsIgnoreCase(group))) { // idk how heavy this is:/ input = input.replace(group, getReplacement()); } } diff --git a/api/src/main/java/com/alttd/chat/objects/ChatUser.java b/api/src/main/java/com/alttd/chat/objects/ChatUser.java index 861a9b3..9f7e978 100644 --- a/api/src/main/java/com/alttd/chat/objects/ChatUser.java +++ b/api/src/main/java/com/alttd/chat/objects/ChatUser.java @@ -27,10 +27,10 @@ public class ChatUser { this.partyId = partyId; this.toggledPartyChat = toggledChat; - displayName = Queries.getNickname(uuid); - if (displayName == null) { + //displayName = Queries.getNickname(uuid); // todo fix sql + //if (displayName == null) { displayName = Utility.getDisplayName(uuid); - } + //} prefix = Utility.getPrefix(uuid, true); staffPrefix = Utility.getStaffPrefix(uuid); diff --git a/api/src/main/java/com/alttd/chat/objects/FilterType.java b/api/src/main/java/com/alttd/chat/objects/FilterType.java index 1740d39..9eaaa6b 100644 --- a/api/src/main/java/com/alttd/chat/objects/FilterType.java +++ b/api/src/main/java/com/alttd/chat/objects/FilterType.java @@ -2,6 +2,8 @@ package com.alttd.chat.objects; public enum FilterType { REPLACE("replace"), + CHAT("chat"), + REPLACEMATCHER("replacematcher"), BLOCK("block"); private final String name; diff --git a/api/src/main/java/com/alttd/chat/util/ALogger.java b/api/src/main/java/com/alttd/chat/util/ALogger.java index 8a59255..0e218f1 100644 --- a/api/src/main/java/com/alttd/chat/util/ALogger.java +++ b/api/src/main/java/com/alttd/chat/util/ALogger.java @@ -4,7 +4,7 @@ public class ALogger { private static org.slf4j.Logger logger; - public ALogger(org.slf4j.Logger log) { + public static void init(org.slf4j.Logger log) { logger = log; } diff --git a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java index a9992f9..3643866 100644 --- a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java +++ b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java @@ -3,6 +3,7 @@ package com.alttd.chat; import com.alttd.chat.commands.GlobalChat; import com.alttd.chat.config.Config; import com.alttd.chat.handler.ChatHandler; +import com.alttd.chat.listeners.ChatListener; import com.alttd.chat.listeners.PlayerListener; import com.alttd.chat.listeners.PluginMessage; import com.alttd.chat.util.ALogger; @@ -22,10 +23,10 @@ public class ChatPlugin extends JavaPlugin { @Override public void onEnable() { instance = this; - new ALogger(this.getSLF4JLogger()); + ALogger.init(getSLF4JLogger()); chatAPI = new ChatImplementation(); chatHandler = new ChatHandler(); - registerListener(new PlayerListener()); + registerListener(new PlayerListener(), new ChatListener()); registerCommand("globalchat", new GlobalChat()); messageChannel = Config.MESSAGECHANNEL; diff --git a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java index 2e4a656..97c6d84 100644 --- a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java +++ b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java @@ -3,6 +3,7 @@ package com.alttd.chat.handler; import com.alttd.chat.ChatPlugin; import com.alttd.chat.config.Config; import com.alttd.chat.managers.ChatUserManager; +import com.alttd.chat.managers.RegexManager; import com.alttd.chat.objects.ChatUser; import com.alttd.chat.util.Utility; import com.google.common.io.ByteArrayDataOutput; @@ -10,6 +11,7 @@ import com.google.common.io.ByteStreams; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -44,17 +46,21 @@ public class ChatHandler { player.sendMessage(miniMessage.parse(Config.GCONCOOLDOWN, Template.of("cooldown", timeLeft+""))); return; } - String senderName, prefix = ""; - senderName = player.getDisplayName(); // TODO this can be a component - // can also be cached in the chatuser object? - prefix = user.getPrefix(); + Component senderName = player.displayName(); + String prefix = user.getPrefix(); - message = Utility.parseColors(message); - if(!player.hasPermission("chat.format")) + message = RegexManager.replaceText(message); // todo a better way for this + if(message == null) return; // the message was blocked + + if(!player.hasPermission("chat.format")) { message = miniMessage.stripTokens(message); + } else { + message = Utility.parseColors(message); + } + if(message.contains("[i]")) - message = message.replace("[i]", "<[i]>"); + message = message.replace("[i]", "<[i]>"); // end of todo List