2021-06-02 17:55:55 +00:00
package com.alttd.chat.managers ;
2021-05-13 22:06:21 +00:00
2021-08-01 01:20:49 +00:00
import com.alttd.chat.ChatAPI ;
2021-06-06 19:32:13 +00:00
import com.alttd.chat.config.RegexConfig ;
import com.alttd.chat.objects.ChatFilter ;
2022-09-26 21:46:50 +00:00
import com.alttd.chat.objects.FilterType ;
2022-02-27 17:29:41 +00:00
import com.alttd.chat.objects.ModifiableString ;
2021-06-13 11:53:49 +00:00
import com.alttd.chat.util.ALogger ;
2021-08-01 01:20:49 +00:00
import net.luckperms.api.cacheddata.CachedPermissionData ;
import net.luckperms.api.model.user.User ;
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-08-01 01:20:49 +00:00
import java.util.UUID ;
2021-07-28 20:50:58 +00:00
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,} " ) ;
2022-09-26 21:46:50 +00:00
private static final List < ChatFilter > emotes = new ArrayList < > ( ) ;
public static final List < String > emotesList = new ArrayList < > ( ) ;
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 ( ) ;
2022-09-26 21:46:50 +00:00
loadEmotes ( ) ;
}
private static void loadEmotes ( ) {
emotes . clear ( ) ;
for ( ChatFilter chatFilter : chatFilters ) {
2022-10-03 17:39:41 +00:00
if ( chatFilter . getType ( ) ! = FilterType . EMOTE ) continue ;
2022-09-26 21:46:50 +00:00
emotes . add ( chatFilter ) ;
emotesList . add ( chatFilter . getRegex ( ) ) ;
}
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
2022-02-27 17:29:41 +00:00
public static boolean filterText ( String playerName , UUID uuid , ModifiableString modifiableString , String channel ) { // TODO loop all objects in the list and check if they violate based on the MATCHER
return filterText ( playerName , uuid , modifiableString , true , channel ) ;
2021-08-20 21:03:58 +00:00
}
2022-02-27 17:29:41 +00:00
public static boolean filterText ( String playerName , UUID uuid , ModifiableString modifiableString , boolean matcher , String channel ) {
2021-08-01 01:20:49 +00:00
User user = ChatAPI . get ( ) . getLuckPerms ( ) . getUserManager ( ) . getUser ( uuid ) ;
if ( user = = null ) {
ALogger . warn ( " Tried to check chat filters for a user who doesn't exist in LuckPerms " ) ;
2022-02-27 17:29:41 +00:00
return false ;
2021-08-01 01:20:49 +00:00
}
CachedPermissionData permissionData = user . getCachedData ( ) . getPermissionData ( ) ;
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 :
2022-02-27 17:29:41 +00:00
chatFilter . replaceText ( modifiableString ) ;
2021-06-06 19:32:13 +00:00
break ;
case BLOCK :
2022-02-27 17:29:41 +00:00
if ( ! permissionData . checkPermission ( " chat.bypass-filter-channel. " + channel ) . asBoolean ( ) & &
! permissionData . checkPermission ( " chat.bypass-filter. " + chatFilter . getName ( ) ) . asBoolean ( ) & &
chatFilter . matches ( modifiableString ) ) { // todo find a better way to do this?
2022-05-27 15:52:34 +00:00
ALogger . info ( playerName + " triggered the chat filter for " + chatFilter . getName ( )
+ " with: " + modifiableString . string ( ) + " . " ) ;
2022-02-27 17:29:41 +00:00
return false ;
2021-06-06 19:32:13 +00:00
}
break ;
2021-08-20 21:03:58 +00:00
case REPLACEMATCHER :
if ( matcher ) {
2022-02-27 17:29:41 +00:00
chatFilter . replaceMatcher ( modifiableString ) ;
2021-08-20 21:03:58 +00:00
}
break ;
2021-06-06 19:32:13 +00:00
}
2021-05-02 19:42:35 +00:00
}
2022-02-27 17:29:41 +00:00
return true ;
2021-05-02 19:42:35 +00:00
}
2022-09-26 21:46:50 +00:00
public static List < ChatFilter > getChatFilters ( ) {
return chatFilters ;
}
public static List < ChatFilter > getEmoteFilters ( ) {
return emotes ;
}
2021-05-02 19:42:35 +00:00
}