2021-06-02 17:55:55 +00:00
|
|
|
package com.alttd.chat.managers;
|
2021-05-13 22:06:21 +00:00
|
|
|
|
2021-06-06 19:32:13 +00:00
|
|
|
import com.alttd.chat.config.RegexConfig;
|
|
|
|
|
import com.alttd.chat.objects.ChatFilter;
|
2021-06-13 11:53:49 +00:00
|
|
|
import com.alttd.chat.util.ALogger;
|
2021-07-31 18:21:50 +00:00
|
|
|
import org.bukkit.Bukkit;
|
2021-07-30 03:31:37 +00:00
|
|
|
import org.bukkit.entity.Player;
|
2021-06-06 19:32:13 +00:00
|
|
|
|
2021-05-02 19:42:35 +00:00
|
|
|
import java.util.ArrayList;
|
2021-06-06 19:32:13 +00:00
|
|
|
import java.util.List;
|
2021-07-28 20:50:58 +00:00
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
2021-05-02 19:42:35 +00:00
|
|
|
|
2021-05-20 16:45:26 +00:00
|
|
|
public class RegexManager {
|
2021-05-02 19:42:35 +00:00
|
|
|
|
2021-06-06 19:32:13 +00:00
|
|
|
private static List<ChatFilter> chatFilters;
|
2021-07-28 20:50:58 +00:00
|
|
|
private static final Pattern pattern = Pattern.compile("(.)\\1{4,}");
|
2021-05-13 22:06:21 +00:00
|
|
|
|
2021-06-06 19:32:13 +00:00
|
|
|
public static void initialize() {
|
|
|
|
|
chatFilters = new ArrayList<>();
|
2021-05-11 17:21:48 +00:00
|
|
|
|
2021-06-06 19:32:13 +00:00
|
|
|
RegexConfig.init();
|
2021-05-02 19:42:35 +00:00
|
|
|
}
|
|
|
|
|
|
2021-06-06 19:32:13 +00:00
|
|
|
public static void addFilter(ChatFilter filter) {
|
|
|
|
|
chatFilters.add(filter);
|
2021-05-02 19:42:35 +00:00
|
|
|
}
|
2021-06-06 19:32:13 +00:00
|
|
|
|
2021-07-30 03:31:37 +00:00
|
|
|
public static String replaceText(Player player, String text) { // TODO loop all objects in the list and check if they violate based on the MATCHER
|
2021-06-06 19:32:13 +00:00
|
|
|
for(ChatFilter chatFilter : chatFilters) {
|
|
|
|
|
switch (chatFilter.getType()) {
|
2021-06-13 11:53:49 +00:00
|
|
|
case CHAT:
|
|
|
|
|
break;
|
2021-06-06 19:32:13 +00:00
|
|
|
case REPLACE:
|
|
|
|
|
text = chatFilter.replaceText(text);
|
|
|
|
|
break;
|
|
|
|
|
case BLOCK:
|
2021-07-30 03:31:37 +00:00
|
|
|
if(chatFilter.matches(text) && !player.hasPermission("chat.bypass-filter." + chatFilter.getName())) { // todo find a better way to do this?
|
2021-07-31 18:21:50 +00:00
|
|
|
ALogger.info(player.getName() + " triggered the chat filter for " + chatFilter.getName() + ".");
|
2021-06-06 19:32:13 +00:00
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
2021-05-02 19:42:35 +00:00
|
|
|
}
|
2021-07-28 20:50:58 +00:00
|
|
|
Matcher matcher = pattern.matcher(text);
|
|
|
|
|
while (matcher.find()) {
|
|
|
|
|
String group = matcher.group();
|
|
|
|
|
System.out.println(group);
|
|
|
|
|
text = text.replace(group, group.substring(0, 3)); //TODO HARD CODED PLS PUT IN CONFIG
|
|
|
|
|
System.out.println(text);
|
|
|
|
|
}
|
2021-05-02 19:42:35 +00:00
|
|
|
return text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|