1+ // Periksa lingkungan eksekusi
2+ const isNode = typeof exports === 'object' && typeof module !== 'undefined' ;
3+
14/**
25 * Fungsi untuk memeriksa apakah kata cocok dengan pola regex
36 * @param {string } word - string kata yang akan diperiksa
@@ -88,14 +91,14 @@ constructor(text = "", customFilter="", customSubFilter=""){
8891 this . _filt = / b [ a 4 ] [ s 5 ] h f u [ l 1 ] [ l 1 ] | k [ i 1 ] [ l 1 ] [ l 1 ] | f u c k [ * ] ? | d r [ u o ] g [ * ] ? | d [ i 1 ] c k [ * ] ? | [ a 4 ] [ s 5 ] [ s 5 ] | [ l 1 ] [ i 1 ] p | p u [ s 5 ] [ s 5 ] y [ * ] ? | f k / gi;
8992
9093 this . _subfilter = / [ a 4 ] [ s 5 ] [ s 5 ] | [ l 1 ] [ i 1 ] p | p u [ s 5 ] [ s 5 ] y [ * ] ? | [ s 5 ] u c k [ * ] ? | m [ o 0 ] t h [ e 3 ] r [ * ] ? | m [ o 0 ] m [ * ] ? | d [ o 0 ] g [ * ] ? | l [ o 0 ] w [ * ] ? | s [ e 3 ] x [ * ] ? / gi;
91-
92- if ( customFilter ) {
94+ if ( customFilter . length > 1 ) {
9395 this . _filt = new RegExp ( this . _filt . source + "|" + escapeRegExp ( customFilter ) , "gi" ) ;
9496 } ;
95- if ( customSubFilter ) {
97+ if ( customSubFilter . length > 1 ) {
9698 this . _subfilter = new RegExp ( this . _subfilter . source + "|" + escapeRegExp ( customSubFilter ) , "gi" ) ;
9799 } ;
98100 this . __subtxic = [ ] ;
101+ this . _st = false ;
99102}
100103
101104
@@ -385,7 +388,7 @@ set ['thisToxic'](key){
385388 this . __subtxic . forEach ( ( [ oldWord , newWord ] ) => {
386389
387390 word . forEach ( ( w , i ) => {
388- if ( ! ( validateInput ( "email" , w ) || validateInput ( "url" , w ) ) ) {
391+ if ( ! ( validateInput ( "email" , w ) || validateInput ( "url" , w ) ) && this . _st ) {
389392
390393 word [ i ] = w . replace ( oldWord , newWord ) ;
391394
@@ -412,10 +415,31 @@ class filters_badword extends FilterBadWord{
412415[ 'config' ] ( cl = true , smart = true , customFilter = "" , customSubFilter = "" ) {
413416 this . _cl = cl ;
414417 this . _st = smart ;
415- if ( customFilter ) {
418+ var isfiles = false ;
419+ if ( isNode ) {
420+ const { readFileSync, existsSync} = require ( "node:fs" ) ;
421+ if ( existsSync ( customSubFilter ) ) {
422+ var readata = readFileSync ( customSubFilter ) . split ( "\n" ) ;
423+ function extractNames ( text ) {
424+ const namePattern = / \b [ A - Z ] [ a - z à â ä é è ê ë ï î ô ö ù û ü ç ' - ] + \b / g;
425+ return text . match ( namePattern ) ;
426+ } ;
427+ readata = readata . map ( value => ( extractNames ( value ) || validateInput ( "email" , value ) ||
428+ validateInput ( "phone" , value ) || validateInput ( "url" , value ) ) ? "" : value ) .
429+ filter ( item => item && item . trim ( ) ) ;
430+ if ( readata . length > 1 ) {
431+ this . _subfilter = new RegExp ( this . _subfilter . source + "|" + escapeRegExp ( readata . join ( "|" ) ) , "gi" ) ;
432+ } ;
433+ } else {
434+ if ( customSubFilter . includes ( "|" ) ) this . _subfilter = new RegExp ( this . _subfilter . source + "|" + escapeRegExp ( customSubFilter ) , "gi" ) ;
435+ } ;
436+ isfiles = true ;
437+ } ;
438+
439+ if ( customFilter . length > 1 ) {
416440 this . _filt = new RegExp ( this . _filt . source + "|" + escapeRegExp ( customFilter ) , "gi" ) ;
417441 } ;
418- if ( customSubFilter ) {
442+ if ( customSubFilter . length > 1 && ! isfiles ) {
419443 this . _subfilter = new RegExp ( this . _subfilter . source + "|" + escapeRegExp ( customSubFilter ) , "gi" ) ;
420444 } ;
421445}
@@ -477,8 +501,7 @@ const exportsObject = {
477501 filters_badword
478502} ;
479503
480- // Periksa lingkungan eksekusi
481- const isNode = typeof exports === 'object' && typeof module !== 'undefined' ;
504+
482505
483506// Ekspor ke lingkungan yang sesuai
484507isNode ? module . exports = exportsObject : Object . assign ( window , exportsObject ) ;
0 commit comments