File tree Expand file tree Collapse file tree 1 file changed +248
-0
lines changed Expand file tree Collapse file tree 1 file changed +248
-0
lines changed Original file line number Diff line number Diff line change 1+ using System . Globalization ;
2+ using System . Text ;
3+
4+ namespace Roblox . Services ;
5+
6+
7+ public class FilterService : ServiceBase , IService
8+ {
9+ private static readonly string [ ] filteredWords =
10+ {
11+ "anal" ,
12+ "anally" ,
13+ "anus" ,
14+ "ballsac" ,
15+ "ballsack" ,
16+ "beastiality" ,
17+ "beastility" ,
18+ "bestiality" ,
19+ "blowjob" ,
20+ "blowjobs" ,
21+ "boner" ,
22+ "bitch" ,
23+ "boob" ,
24+ "boobies" ,
25+ "boobs" ,
26+ "breast" ,
27+ "breasts" ,
28+ "buttfuck" ,
29+ "buttfucker" ,
30+ "cock" ,
31+ "cockride" ,
32+ "cocks" ,
33+ "cocksuck" ,
34+ "cocksucked" ,
35+ "cocksucker" ,
36+ "cocksucking" ,
37+ "cocksucks" ,
38+ "condom" ,
39+ "condoms" ,
40+ "condo" ,
41+ "cum" ,
42+ "cummer " ,
43+ "cumming" ,
44+ "cums" ,
45+ "cumshot" ,
46+ "cunilingus" ,
47+ "cunillingus" ,
48+ "cunnilingus" ,
49+ "dick" ,
50+ "dicks" ,
51+ "dildo" ,
52+ "dildos" ,
53+ "dildos" ,
54+ "digga" ,
55+ "ejaculate " ,
56+ "ejaculated " ,
57+ "ejaculates" ,
58+ "ejaculating" ,
59+ "ejaculatings" ,
60+ "ejaculation" ,
61+ "faget" ,
62+ "fagg" ,
63+ "fag" ,
64+ "fagget" ,
65+ "fagging" ,
66+ "faggit" ,
67+ "faggot" ,
68+ "faggots" ,
69+ "faggs" ,
70+ "fagit" ,
71+ "fagot" ,
72+ "fagots" ,
73+ "fingerfuck" ,
74+ "fingerfucked" ,
75+ "fingerfucker" ,
76+ "fingerfuckers" ,
77+ "fingerfucking" ,
78+ "fingerfucks" ,
79+ "fistfuck" ,
80+ "fistfucked" ,
81+ "fistfucker" ,
82+ "fistfuckers" ,
83+ "fistfucking" ,
84+ "fistfuckings" ,
85+ "fistfucks" ,
86+ "gangbang" ,
87+ "gangbanged" ,
88+ "gangbangs" ,
89+ "gangbangs" ,
90+ "gaysex" ,
91+ "hardcoresex" ,
92+ "hitler" ,
93+ "horniest" ,
94+ "horny" ,
95+ "hotsex" ,
96+ "jackingoff" ,
97+ "jackoff" ,
98+ "jackxoff" ,
99+ "jerkxoff" ,
100+ "kidsinasanbox" ,
101+ "kkk" ,
102+ "masterbait" ,
103+ "masterbate" ,
104+ "masturbate" ,
105+ "molest" ,
106+ "mycock" ,
107+ "nazi" ,
108+ "nazis" ,
109+ "niger" ,
110+ "nigger" ,
111+ "niigger" ,
112+ "niggers" ,
113+ "niiggers" ,
114+ "ngga" ,
115+ "negger" ,
116+ "neckhurt" ,
117+ "nigga" ,
118+ "n0gga" ,
119+ "nhigga" ,
120+ "n8ggas" ,
121+ "niigga" ,
122+ "niga" ,
123+ "ni$$a" ,
124+ "ni$$as" ,
125+ "nude" ,
126+ "nudism" ,
127+ "nudist" ,
128+ "orgasim" ,
129+ "orgasims" ,
130+ "orgasm" ,
131+ "orgasms" ,
132+ "pern" ,
133+ "pecker" ,
134+ "pedo" ,
135+ "pedobear" ,
136+ "penis" ,
137+ "phonesex" ,
138+ "porn" ,
139+ "pron" ,
140+ "porno" ,
141+ "pornography" ,
142+ "goon" ,
143+ "pornos" ,
144+ "pren" ,
145+ "prostitute" ,
146+ "paygorn" ,
147+ "raip" ,
148+ "raiping" ,
149+ "rape" ,
150+ "raped" ,
151+ "raper" ,
152+ "raping" ,
153+ "rapist" ,
154+ "schlong" ,
155+ "sex" ,
156+ "sexx" ,
157+ "sexxx" ,
158+ "sexxy" ,
159+ "sexytiem" ,
160+ "sexytime" ,
161+ "slut" ,
162+ "sluts " ,
163+ "sperm" ,
164+ "strip" ,
165+ "stripper" ,
166+ "stripperpole" ,
167+ "strippers" ,
168+ "swastika" ,
169+ "thong" ,
170+ "titties" ,
171+ "titty" ,
172+ "urcock" ,
173+ "vaggina" ,
174+ "vagina" ,
175+ "vegina" ,
176+ "vibrator" ,
177+ "wanker" ,
178+ "whore" ,
179+ "whorehouse" ,
180+ "yourcock" ,
181+ "femb" ,
182+ "fembx" ,
183+ "jerkingoff" ,
184+ "jerkoff" ,
185+ "jackoff" ,
186+ "jackingoff" ,
187+ "kys" ,
188+ "killyourself" ,
189+ "killurself" ,
190+ "retard"
191+ } ;
192+ private static readonly HashSet < string > _filteredWordsSet = new HashSet < string > ( filteredWords ) ;
193+ public string FilterText ( string input )
194+ {
195+ if ( string . IsNullOrEmpty ( input ) )
196+ {
197+ return input ;
198+ }
199+
200+ string cleanedInput = string . Join ( "" , input . ToCharArray ( )
201+ . Where ( c => ! char . IsWhiteSpace ( c ) )
202+ . Select ( char . ToLower )
203+ . Select ( c =>
204+ {
205+ /* This will prevent words like n!igga, n!gg@ etc */
206+ switch ( c )
207+ {
208+ case '#' : return '\0 ' ;
209+ case '.' : return '\0 ' ;
210+ case '$' : return 's' ;
211+ case '@' : return 'a' ;
212+ case '!' : return 'i' ;
213+ case '0' : return 'o' ;
214+ case '*' : return '\0 ' ;
215+ case 'я' : return 'r' ;
216+ default : return c ;
217+ }
218+ } )
219+ . Where ( c => c != '\0 ' )
220+ . ToArray ( ) ) ;
221+
222+ if ( _filteredWordsSet . Any ( word => cleanedInput . Contains ( word ) ) )
223+ {
224+ return new string ( '#' , input . Length ) ;
225+ }
226+ return input ;
227+ }
228+ public string CleanText ( string input )
229+ {
230+ StringBuilder sb = new StringBuilder ( ) ;
231+ foreach ( char c in input . Normalize ( NormalizationForm . FormC ) )
232+ {
233+ if ( char . GetUnicodeCategory ( c ) != UnicodeCategory . NonSpacingMark )
234+ sb . Append ( c ) ;
235+ }
236+ return sb . ToString ( ) ;
237+ }
238+
239+ public bool IsReusable ( )
240+ {
241+ return true ;
242+ }
243+
244+ public bool IsThreadSafe ( )
245+ {
246+ return true ;
247+ }
248+ }
You can’t perform that action at this time.
0 commit comments