Skip to content

Commit 7e7cad9

Browse files
committed
in game chat filter
1 parent ee345b6 commit 7e7cad9

File tree

1 file changed

+248
-0
lines changed

1 file changed

+248
-0
lines changed
Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
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+
}

0 commit comments

Comments
 (0)