glin-profanity 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +1 -5
- package/README.md +35 -2
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/src/filters/Filter.ts +39 -9
- package/src/index.d.ts +36 -0
package/.eslintrc.json
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
"extends": [
|
|
4
4
|
"eslint:recommended",
|
|
5
5
|
"plugin:react/recommended",
|
|
6
|
-
"plugin:@typescript-eslint/recommended",
|
|
7
|
-
"plugin:prettier/recommended"
|
|
6
|
+
"plugin:@typescript-eslint/recommended",
|
|
8
7
|
],
|
|
9
8
|
"plugins": ["react", "@typescript-eslint"],
|
|
10
9
|
"env": {
|
|
@@ -23,9 +22,6 @@
|
|
|
23
22
|
"react": {
|
|
24
23
|
"version": "detect"
|
|
25
24
|
}
|
|
26
|
-
},
|
|
27
|
-
"rules": {
|
|
28
|
-
"prettier/prettier": "error"
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
27
|
|
package/README.md
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
# Glin Profanity
|
|
2
3
|
Glin-Profanity is a lightweight and efficient npm package designed to detect and filter profane language in text inputs across multiple languages. Whether you’re building a chat application, a comment section, or any platform where user-generated content is involved, Glin-Profanity helps you maintain a clean and respectful environment.
|
|
3
4
|
|
|
@@ -8,7 +9,11 @@ To install Glin-Profanity, use npm:
|
|
|
8
9
|
```bash
|
|
9
10
|
npm install glin-profanity
|
|
10
11
|
```
|
|
12
|
+
OR
|
|
11
13
|
|
|
14
|
+
```bash
|
|
15
|
+
yarn add glin-profanity
|
|
16
|
+
```
|
|
12
17
|
## Usage
|
|
13
18
|
|
|
14
19
|
### Basic Usage
|
|
@@ -71,12 +76,29 @@ export default App;
|
|
|
71
76
|
#### Constructor
|
|
72
77
|
|
|
73
78
|
```typescript
|
|
74
|
-
new Filter(config?: {
|
|
79
|
+
new Filter(config?: {
|
|
80
|
+
languages?: Language[];
|
|
81
|
+
allLanguages?: boolean;
|
|
82
|
+
caseSensitive?: boolean;
|
|
83
|
+
wordBoundaries?: boolean;
|
|
84
|
+
customWords?: string[];
|
|
85
|
+
replaceWith?: string;
|
|
86
|
+
severityLevels?: boolean;
|
|
87
|
+
ignoreWords?: string[];
|
|
88
|
+
logProfanity?: boolean;
|
|
89
|
+
});
|
|
75
90
|
```
|
|
76
91
|
|
|
77
92
|
- `config`: An optional configuration object.
|
|
78
93
|
- `languages`: An array of languages to check for profanities.
|
|
79
94
|
- `allLanguages`: A boolean indicating whether to check for all languages.
|
|
95
|
+
- `caseSensitive`: A boolean indicating whether the profanity check should be case-sensitive.
|
|
96
|
+
- `wordBoundaries`: A boolean indicating whether to consider word boundaries when checking for profanities.
|
|
97
|
+
- `customWords`: An array of custom words to include in the profanity check.
|
|
98
|
+
- `replaceWith`: A string to replace profane words with.
|
|
99
|
+
- `severityLevels`: A boolean indicating whether to include severity levels for profane words.
|
|
100
|
+
- `ignoreWords`: An array of words to ignore in the profanity check.
|
|
101
|
+
- `logProfanity`: A boolean indicating whether to log detected profane words.
|
|
80
102
|
|
|
81
103
|
#### Methods
|
|
82
104
|
|
|
@@ -103,6 +125,8 @@ checkProfanity(text: string): CheckProfanityResult;
|
|
|
103
125
|
- Returns: `CheckProfanityResult`
|
|
104
126
|
- `containsProfanity`: `boolean` - `true` if the text contains profanities, `false` otherwise.
|
|
105
127
|
- `profaneWords`: `string[]` - An array of profane words found in the text.
|
|
128
|
+
- `processedText`: `string` - The text with profane words replaced (if `replaceWith` is specified).
|
|
129
|
+
- `severityMap`: `{ [word: string]: number }` - A map of profane words to their severity levels (if `severityLevels` is specified).
|
|
106
130
|
|
|
107
131
|
### `useProfanityChecker` Hook
|
|
108
132
|
|
|
@@ -113,14 +137,23 @@ A custom React hook for using the profanity checker.
|
|
|
113
137
|
- `config`: An optional configuration object.
|
|
114
138
|
- `languages`: An array of languages to check for profanities.
|
|
115
139
|
- `allLanguages`: A boolean indicating whether to check for all languages.
|
|
140
|
+
- `caseSensitive`: A boolean indicating whether the profanity check should be case-sensitive.
|
|
141
|
+
- `wordBoundaries`: A boolean indicating whether to consider word boundaries when checking for profanities.
|
|
142
|
+
- `customWords`: An array of custom words to include in the profanity check.
|
|
143
|
+
- `replaceWith`: A string to replace profane words with.
|
|
144
|
+
- `severityLevels`: A boolean indicating whether to include severity levels for profane words.
|
|
145
|
+
- `ignoreWords`: An array of words to ignore in the profanity check.
|
|
146
|
+
- `logProfanity`: A boolean indicating whether to log detected profane words.
|
|
147
|
+
- `customActions`: A function to execute custom actions when profanity is detected.
|
|
116
148
|
|
|
117
149
|
#### Return Value
|
|
118
150
|
|
|
119
151
|
- `result`: The result of the profanity check.
|
|
120
152
|
- `checkText`: A function to check a given text for profanities.
|
|
153
|
+
- `checkTextAsync`: A function to check a given text for profanities asynchronously.
|
|
121
154
|
|
|
122
155
|
```typescript
|
|
123
|
-
const { result, checkText } = useProfanityChecker(config);
|
|
156
|
+
const { result, checkText, checkTextAsync } = useProfanityChecker(config);
|
|
124
157
|
```
|
|
125
158
|
|
|
126
159
|
## License
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports["Glin-profanity"]=a():e["Glin-profanity"]=a()}(this,(()=>(()=>{"use strict";var e={287:(e,a)=>{Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.iterator;var t={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},r=Object.assign,o={};function n(e,a,r){this.props=e,this.context=a,this.refs=o,this.updater=r||t}function i(){}function s(e,a,r){this.props=e,this.context=a,this.refs=o,this.updater=r||t}n.prototype.isReactComponent={},n.prototype.setState=function(e,a){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,a,"setState")},n.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},i.prototype=n.prototype;var u=s.prototype=new i;u.constructor=s,r(u,n.prototype),u.isPureReactComponent=!0;Array.isArray,Object.prototype.hasOwnProperty;var l={current:null};a.useState=function(e){return l.current.useState(e)}},540:(e,a,t)=>{e.exports=t(287)}},a={};function t(r){var o=a[r];if(void 0!==o)return o.exports;var n=a[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.d=(e,a)=>{for(var r in a)t.o(a,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};t.r(r),t.d(r,{Filter:()=>q,useProfanityChecker:()=>M});const o=JSON.parse('{"a":["سكس","طيز","شرج","لعق","لحس","تمص","بيضان","ثدي","بز","حلمة","مفلقسة","بظر","كس","مبادل","عاهرة","جماع","قضيب","زب","لوطي","لواط","سحاق","اغتصاب","خنثي","احتلام","نيك","متناك","شرموطة","عرص","خول","قحبة","لبوة","وسخ","علق","ناك","منيك","شرمط","قحب","شرموط","خول","هنيك","فحل","ديوث","متناك","هايج","زبر","bdsm","زان","سادي","سادى","كسها","كسي","كسك","كسم","بنتاك","بتناك","نيكني","ديوث","نياك","فشاخ","فشخ","هفشخك","شذوذ","لواط","لوطي","لوطى","عاهر","لحس","متع","حمام","هربط","دياث","سحاق","جنس","جنس","جوزي","مراتي","مراتى","مرات","ورا","شعر","مشعر","اركب","فرس","جاد","منيوك","زوبر","طياز","شراميط","فاجر","محروم","واقف","بيحك","ممحونة","لبن","لبو","واقف","شرقان","افضي","دهولت","bzaz","nek","nik","mtnak","zeb","zep","zobr","zopr","kos","a7a","hayg","لبوه","لبوة","لبوت","sharma","banoty","بنوتي","بنوتى","سلب","عايز","دكر","نتاية","نتايه","زنج","ممحون","تعبان","اقعد","بزاز","هيجان","سافل","مصيهولي","هتمص","مصي","بز","hayg","كلوت","اندر","سنتيا","بوكسر","بتاع","مشتهي","زبى","نكته","اتناك","nayak","nyak","neeek","اغتصا","زب","كس","بلكيشن","كيشن","ليسبيان","سبيان"]}'),n=JSON.parse('{"a":["13.","13点","三级片","下三烂","下贱","个老子的","九游","乳","乳交","乳头","乳房","乳波臀浪","交配","仆街","他奶奶","他奶奶的","他奶娘的","他妈","他妈ㄉ王八蛋","他妈地","他妈的","他娘","他马的","你个傻比","你他马的","你全家","你奶奶的","你她马的","你妈","你妈的","你娘","你娘卡好","你娘咧","你它妈的","你它马的","你是鸡","你是鸭","你马的","做爱","傻比","傻逼","册那","军妓","几八","几叭","几巴","几芭","刚度","刚瘪三","包皮","十三点","卖B","卖比","卖淫","卵","卵子","双峰微颤","口交","口肯","叫床","吃屎","后庭","吹箫","塞你公","塞你娘","塞你母","塞你爸","塞你老师","塞你老母","处女","外阴","大卵子","大卵泡","大鸡巴","奶","奶奶的熊","奶子","奸","奸你","她妈地","她妈的","她马的","妈B","妈个B","妈个比","妈个老比","妈妈的","妈比","妈的","妈的B","妈逼","妓","妓女","妓院","妳她妈的","妳妈的","妳娘的","妳老母的","妳马的","姘头","姣西","姦","娘个比","娘的","婊子","婊子养的","嫖娼","嫖客","它妈地","它妈的","密洞","射你","射精","小乳头","小卵子","小卵泡","小瘪三","小肉粒","小骚比","小骚货","小鸡巴","小鸡鸡","屁眼","屁股","屄","屌","巨乳","干x娘","干七八","干你","干你妈","干你娘","干你老母","干你良","干妳妈","干妳娘","干妳老母","干妳马","干您娘","干机掰","干死CS","干死GM","干死你","干死客服","幹","强奸","强奸你","性","性交","性器","性无能","性爱","情色","想上你","懆您妈","懆您娘","懒8","懒八","懒叫","懒教","成人","我操你祖宗十八代","扒光","打炮","打飞机","抽插","招妓","插你","插死你","撒尿","操你","操你全家","操你奶奶","操你妈","操你娘","操你祖宗","操你老妈","操你老母","操妳","操妳全家","操妳妈","操妳娘","操妳祖宗","操机掰","操比","操逼","放荡","日他娘","日你","日你妈","日你老娘","日你老母","日批","月经","机八","机巴","机机歪歪","杂种","浪叫","淫","淫乱","淫妇","淫棍","淫水","淫秽","淫荡","淫西","湿透的内裤","激情","灨你娘","烂货","烂逼","爛","狗屁","狗日","狗狼养的","玉杵","王八蛋","瓜娃子","瓜婆娘","瓜批","瘪三","白烂","白痴","白癡","祖宗","私服","笨蛋","精子","老二","老味","老母","老瘪三","老骚比","老骚货","肉壁","肉棍子","肉棒","肉缝","肏","肛交","肥西","色情","花柳","荡妇","賤","贝肉","贱B","贱人","贱货","贼你妈","赛你老母","赛妳阿母","赣您娘","轮奸","迷药","逼","逼样","野鸡","阳具","阳萎","阴唇","阴户","阴核","阴毛","阴茎","阴道","阴部","雞巴","靠北","靠母","靠爸","靠背","靠腰","驶你公","驶你娘","驶你母","驶你爸","驶你老师","驶你老母","骚比","骚货","骚逼","鬼公","鸡8","鸡八","鸡叭","鸡吧","鸡奸","鸡巴","鸡芭","鸡鸡","龟儿子","龟头"]}'),i=JSON.parse('{"a":["bordel","buzna","čumět","čurák","debil","do piče","do prdele","dršťka","držka","flundra","hajzl","hovno","chcanky","chuj","jebat","kokot","kokotina","koňomrd","kunda","kurva","mamrd","mrdat","mrdka","mrdník","oslošoust","piča","píčus","píchat","pizda","prcat","prdel","prdelka","sračka","srát","šoustat","šulin","vypíčenec","zkurvit","zkurvysyn","zmrd","žrát"]}'),s=JSON.parse('{"a":["anus","bøsserøv","cock","fisse","fissehår","fuck","hestepik","kussekryller","lort","luder","pik","pikhår","pikslugeri","piksutteri","pis","røv","røvhul","røvskæg","røvspræke","shit"]}'),u=JSON.parse('{"a":["bugren","bugri","bugru","ĉiesulino","ĉiesulo","diofek","diofeka","fek","feken","fekfikanto","feklekulo","fekulo","fik","fikado","fikema","fikfek","fiki","fikiĝi","fikiĝu","fikilo","fikklaŭno","fikota","fiku","forfiki","forfikiĝu","forfiku","forfurzu","forpisi","forpisu","furzulo","kacen","kaco","kacsuĉulo","kojono","piĉen","piĉo","zamenfek"]}'),l=JSON.parse('{"a":["testbad01","2g1c","2 girls 1 cup","acrotomophilia","alabama hot pocket","alaskan pipeline","anal","anilingus","anus","apeshit","arsehole","ass","asshole","assmunch","auto erotic","autoerotic","babeland","baby batter","baby juice","ball gag","ball gravy","ball kicking","ball licking","ball sack","ball sucking","bangbros","bareback","barely legal","barenaked","bastard","bastardo","bastinado","bbw","bdsm","beaner","beaners","beaver cleaver","beaver lips","bestiality","big black","big breasts","big knockers","big tits","bimbos","birdlock","bitch","bitches","black cock","blonde action","blonde on blonde action","blowjob","blow job","blow your load","blue waffle","blumpkin","bollocks","bondage","boner","boob","boobs","booty call","brown showers","brunette action","bukkake","bulldyke","bullet vibe","bullshit","bung hole","bunghole","busty","butt","buttcheeks","butthole","camel toe","camgirl","camslut","camwhore","carpet muncher","carpetmuncher","chocolate rosebuds","circlejerk","cleveland steamer","clit","clitoris","clover clamps","clusterfuck","cock","cocks","coprolagnia","coprophilia","cornhole","coon","coons","creampie","cum","cumming","cunnilingus","cunt","darkie","date rape","daterape","deep throat","deepthroat","dendrophilia","dick","dildo","dingleberry","dingleberries","dirty pillows","dirty sanchez","doggie style","doggiestyle","doggy style","doggystyle","dog style","dolcett","domination","dominatrix","dommes","donkey punch","double dong","double penetration","dp action","dry hump","dvda","eat my ass","ecchi","ejaculation","erotic","erotism","escort","eunuch","faggot","fecal","felch","fellatio","feltch","female squirting","femdom","figging","fingerbang","fingering","fisting","foot fetish","footjob","frotting","fuck","fuck buttons","fuckin","fucking","fucktards","fudge packer","fudgepacker","futanari","gang bang","gay sex","genitals","giant cock","girl on","girl on top","girls gone wild","goatcx","goatse","god damn","gokkun","golden shower","goodpoop","goo girl","goregasm","grope","group sex","g-spot","guro","hand job","handjob","hard core","hardcore","hentai","homoerotic","honkey","hooker","hot carl","hot chick","how to kill","how to murder","huge fat","humping","incest","intercourse","jack off","jail bait","jailbait","jelly donut","jerk off","jigaboo","jiggaboo","jiggerboo","jizz","juggs","kike","kinbaku","kinkster","kinky","knobbing","leather restraint","leather straight jacket","lemon party","lolita","lovemaking","make me come","male squirting","masturbate","menage a trois","milf","missionary position","motherfucker","mound of venus","mr hands","muff diver","muffdiving","nambla","nawashi","negro","neonazi","nigga","nigger","nig nog","nimphomania","nipple","nipples","nsfw images","nude","nudity","nympho","nymphomania","octopussy","omorashi","one cup two girls","one guy one jar","orgasm","orgy","paedophile","paki","panties","panty","pedobear","pedophile","pegging","penis","phone sex","piece of shit","pissing","piss pig","pisspig","playboy","pleasure chest","pole smoker","ponyplay","poof","poon","poontang","punany","poop chute","poopchute","porn","porno","pornography","prince albert piercing","pthc","pubes","pussy","queaf","queef","quim","raghead","raging boner","rape","raping","rapist","rectum","reverse cowgirl","rimjob","rimming","rosy palm","rosy palm and her 5 sisters","rusty trombone","sadism","santorum","scat","schlong","scissoring","semen","sex","sexo","sexy","shaved beaver","shaved pussy","shemale","shibari","shit","shitblimp","shitty","shota","shrimping","skeet","slanteye","slut","s&m","smut","snatch","snowballing","sodomize","sodomy","spic","splooge","splooge moose","spooge","spread legs","spunk","strap on","strapon","strappado","strip club","style doggy","suck","sucks","suicide girls","sultry women","swastika","swinger","tainted love","taste my","tea bagging","threesome","throating","tied up","tight white","tit","tits","titties","titty","tongue in a","topless","tosser","towelhead","tranny","tribadism","tub girl","tubgirl","tushy","twat","twink","twinkie","two girls one cup","undressing","upskirt","urethra play","urophilia","vagina","venus mound","vibrator","violet wand","vorarephilia","voyeur","vulva","wank","wetback","wet dream","white power","wrapping men","wrinkled starfish","xx","xxx","yaoi","yellow showers","yiffy","zoophilia","🖕"]}'),c=JSON.parse('{"a":["alfred nussi","bylsiä","haahka","haista paska","haista vittu","hatullinen","helvetisti","hevonkuusi","hevonpaska","hevonperse","hevonvittu","hevonvitunperse","hitosti","hitto","huorata","hässiä","juosten kustu","jutku","jutsku","jätkä","kananpaska","koiranpaska","kuin esterin perseestä","kulli","kullinluikaus","kuppainen","kusaista","kuseksia","kusettaa","kusi","kusipää","kusta","kyrpiintynyt","kyrpiintyä","kyrpiä","kyrpä","kyrpänaama","kyrvitys","lahtari","lutka","molo","molopää","mulkero","mulkku","mulkvisti","muna","munapää","munaton","mutakuono","mutiainen","naida","nainti","narttu","neekeri","nekru","nuolla persettä","nussia","nussija","nussinta","paljaalla","palli","pallit","paneskella","panettaa","panna","pano","pantava","paska","paskainen","paskamainen","paskanmarjat","paskantaa","paskapuhe","paskapää","paskattaa","paskiainen","paskoa","pehko","pentele","perkele","perkeleesti","persaukinen","perse","perseennuolija","perseet olalla","persereikä","perseääliö","persläpi","perspano","persvako","pilkunnussija","pillu","pillut","pipari","piru","pistää","pyllyvako","reikä","reva","ripsipiirakka","runkata","runkkari","runkkaus","runkku","ryssä","rättipää","saatanasti","suklaaosasto","tavara","toosa","tuhkaluukku","tumputtaa","turpasauna","tussu","tussukka","tussut","vakipano","vetää käteen","viiksi","vittu","vittuilla","vittuilu","vittumainen","vittuuntua","vittuuntunut","vitun","vitusti","vituttaa","vitutus","äpärä"]}'),p=JSON.parse('{"a":["analritter","arsch","arschficker","arschlecker","arschloch","bimbo","bratze","bumsen","bonze","dödel","fick","ficken","flittchen","fotze","fratze","hackfresse","hure","hurensohn","ische","kackbratze","kacke","kacken","kackwurst","kampflesbe","kanake","kimme","lümmel","MILF","möpse","morgenlatte","möse","mufti","muschi","nackt","neger","nigger","nippel","nutte","onanieren","orgasmus","pimmel","pimpern","pinkeln","pissen","pisser","popel","poppen","porno","reudig","rosette","schabracke","schlampe","scheiße","scheisser","schiesser","schnackeln","schwanzlutscher","schwuchtel","tittchen","titten","vögeln","vollpfosten","wichse","wichsen","wichser"]}'),h=JSON.parse('{"a":["aand","aandu","balatkar","beti chod","bhadva","bhadve","bhandve","bhootni ke","bhosad","bhosadi ke","boobe","chakke","chinaal","chinki","chod","chodu","chodu bhagat","chooche","choochi","choot","choot ke baal","chootia","chootiya","chuche","chuchi","chudai khanaa","chudan chudai","chut","chut ke baal","chut ke dhakkan","chut maarli","chutad","chutadd","chutan","chutia","chutiya","gaand","gaandfat","gaandmasti","gaandufad","gandu","gashti","gasti","ghassa","ghasti","harami","haramzade","hawas","hawas ke pujari","hijda","hijra","jhant","jhant chaatu","jhant ke baal","jhantu","kamine","kaminey","kanjar","kutta","kutta kamina","kutte ki aulad","kutte ki jat","kuttiya","loda","lodu","lund","lund choos","lund khajoor","lundtopi","lundure","maa ki chut","maal","madar chod","mooh mein le","mutth","najayaz","najayaz aulaad","najayaz paidaish","paki","pataka","patakha","raand","randi","saala","saala kutta","saali kutti","saali randi","suar","suar ki aulad","tatte","tatti","teri maa ka bhosada","teri maa ka boba chusu","teri maa ki chut","tharak","tharki"]}'),f=JSON.parse('{"a":["balfasz","balfaszok","balfaszokat","balfaszt","barmok","barmokat","barmot","barom","baszik","bazmeg","buksza","bukszák","bukszákat","bukszát","búr","búrok","csöcs","csöcsök","csöcsöket","csöcsöt","fasz","faszfej","faszfejek","faszfejeket","faszfejet","faszok","faszokat","faszt","fing","fingok","fingokat","fingot","franc","francok","francokat","francot","geci","gecibb","gecik","geciket","gecit","kibaszott","kibaszottabb","kúr","kurafi","kurafik","kurafikat","kurafit","kurva","kurvák","kurvákat","kurvát","leggecibb","legkibaszottabb","legszarabb","marha","marhák","marhákat","marhát","megdöglik","pele","pelék","picsa","picsákat","picsát","pina","pinák","pinákat","pinát","pofa","pofákat","pofát","pöcs","pöcsök","pöcsöket","pöcsöt","punci","puncik","segg","seggek","seggeket","segget","seggfej","seggfejek","seggfejeket","seggfejet","szajha","szajhák","szajhákat","szajhát","szar","szarabb","szarik","szarok","szarokat","szart"]}'),k=JSON.parse('{"a":["강간","개새끼","개자식","개좆","개차반","거유","계집년","고자","근친","노모","니기미","뒤질래","딸딸이","때씹","또라이","뙤놈","로리타","망가","몰카","미친","미친새끼","바바리맨","변태","병신","보지","불알","빠구리","사까시","섹스","스와핑","쌍놈","씨발","씨발놈","씨팔","씹","씹물","씹빨","씹새끼","씹알","씹창","씹팔","암캐","애자","야동","야사","야애니","엄창","에로","염병","옘병","유모","육갑","은꼴","자위","자지","잡년","종간나","좆","좆만","죽일년","쥐좆","직촬","짱깨","쪽바리","창녀","포르노","하드코어","호로","화냥년","후레아들","후장","희쭈그리"]}'),d=JSON.parse('{"a":["drittsekk","faen i helvete","fitte","jævla","kuk","kukene","kuker","nigger","pikk","sotrør","ståpikk","ståpikkene","ståpikker"]}'),b=JSON.parse('{"a":["آب کیر","ارگاسم","برهنه","پورن","پورنو","تجاوز","تخمی","جق","جقی","جلق","جنده","چوچول","حشر","حشری","داف","دودول","ساک زدن","سکس","سکس کردن","سکسی","سوپر","شق کردن","شهوت","شهوتی","شونبول","فیلم سوپر","کس","کس دادن","کس کردن","کسکش","کوس","کون","کون دادن","کون کردن","کونکش","کونی","کیر","کیری","لاپا","لاپایی","لاشی","لخت","لش","منی","هرزه"]}'),g=JSON.parse('{"a":["burdel","burdelmama","chuj","chujnia","ciota","cipa","cyc","debil","dmuchać","do kurwy nędzy","dupa","dupek","duperele","dziwka","fiut","gówno","gówno prawda","huj","jajco","jajeczko","jajko","jajo","ja pierdolę","jebać","jebany","kurwa","kurwy","kutafon","kutas","lizać pałę","obciągać chuja","obciągać fiuta","obciągać loda","pieprzyć","pierdolec","pierdolić","pierdolnięty","pierdoła","pierdzieć","pizda","pojeb","popierdolony","robic loda","robić loda","ruchać","rzygać","skurwysyn","sraczka","srać","suka","syf","wkurwiać","zajebisty"]}'),m=JSON.parse('{"a":["aborto","amador","ânus","aranha","ariano","balalao","bastardo","bicha","biscate","bissexual","boceta","boob","bosta","braulio de borracha","bumbum","burro","cabrao","cacete","cagar","camisinha","caralho","cerveja","chochota","chupar","clitoris","cocaína","colhoes","comer","cona","consolo","corno","cu","dar o rabo","dum raio","esporra","fecal","filho da puta","foda","foda-se","foder","frango assado","gozar","grelho","heroína","heterosexual","homem gay","homoerótico","homosexual","inferno","lésbica","lolita","mama","merda","paneleiro","passar um cheque","pau","peidar","pênis","pinto","porra","puta","puta que pariu","puta que te pariu","queca","sacanagem","saco","torneira","transar","vai-te foder","vai tomar no cu","veado","vibrador","xana","xochota"]}'),y=JSON.parse('{"a":["bychara","byk","chernozhopyi","dolboy\'eb","ebalnik","ebalo","ebalom sch\'elkat","gol","mudack","opizdenet","osto\'eblo","ostokhuitel\'no","ot\'ebis","otmudohat","otpizdit","otsosi","padlo","pedik","perdet","petuh","pidar gnoinyj","pizda","pizdato","pizdatyi","piz\'det","pizdetc","pizdoi nakryt\'sja","pizd\'uk","piz`dyulina","podi ku\'evo","poeben","po\'imat\' na konchik","po\'iti posrat","po khuy","poluchit pizdy","pososi moyu konfetku","prissat","proebat","promudobl\'adsksya pizdopro\'ebina","propezdoloch","prosrat","raspeezdeyi","raspizdatyi","raz\'yebuy","raz\'yoba","s\'ebat\'sya","shalava","styervo","sukin syn","svodit posrat","svoloch","trakhat\'sya","trimandoblydskiy pizdoproyob","ubl\'yudok","uboy","u\'ebitsche","vafl\'a","vafli lovit","v pizdu","vyperdysh","vzdrochennyi","yeb vas","za\'ebat","zaebis","zalupa","zalupat","zasranetc","zassat","zlo\'ebuchy","бардак","бздёнок","блядки","блядовать","блядство","блядь","бугор","во пизду","встать раком","выёбываться","гандон","говно","говнюк","голый","дать пизды","дерьмо","дрочить","другой дразнится","ёбарь","ебать","ебать-копать","ебло","ебнуть","ёб твою мать","жопа","жополиз","играть на кожаной флейте","измудохать","каждый дрочит как он хочет","какая разница","как два пальца обоссать","курите мою трубку","лысого в кулаке гонять","малофя","манда","мандавошка","мент","муда","мудило","мудозмон","наебать","наебениться","наебнуться","на фиг","на хуй","на хую вертеть","на хуя","нахуячиться","невебенный","не ебет","ни за хуй собачу","ни хуя","обнаженный","обоссаться можно","один ебётся","опесдол","офигеть","охуеть","охуйтельно","половое сношение","секс","сиски","спиздить","срать","ссать","траxать","ты мне ваньку не валяй","фига","хапать","хер с ней","хер с ним","хохол","хрен","хуёво","хуёвый","хуем груши околачивать","хуеплет","хуило","хуиней страдать","хуиня","хуй","хуйнуть","хуй пинать"]}'),v=JSON.parse('{"a":["baiser","bander","bigornette","bite","bitte","bloblos","bordel","bosser","bourré","bourrée","brackmard","branlage","branler","branlette","branleur","branleuse","brouter le cresson","caca","cailler","chatte","chiasse","chier","chiottes","clito","clitoris","con","connard","connasse","conne","couilles","cramouille","cul","déconne","déconner","drague","emmerdant","emmerder","emmerdeur","emmerdeuse","enculé","enculée","enculeur","enculeurs","enfoiré","enfoirée","étron","fille de pute","fils de pute","folle","foutre","gerbe","gerber","gouine","grande folle","grogniasse","gueule","jouir","la putain de ta mère","MALPT","ménage à trois","merde","merdeuse","merdeux","meuf","nègre","nique ta mère","nique ta race","palucher","pédale","pédé","péter","pipi","pisser","pouffiasse","pousse-crotte","putain","pute","ramoner","sac à foutre","sac à merde","salaud","salope","suce","tapette","tanche","teuch","teuf","tringler","trique","troncher","trou du cul","turlute","veuve","zigounette","zizi"]}'),z=JSON.parse('{"a":["allupato","ammucchiata","anale","arrapato","arrusa","arruso","assatanato","bagascia","bagassa","bagnarsi","baldracca","balle","battere","battona","belino","biga","bocchinara","bocchino","bofilo","boiata","bordello","brinca","bucaiolo","budiùlo","buona donna","busone","cacca","caccati in mano e prenditi a schiaffi","caciocappella","cadavere","cagare","cagata","cagna","cammello","cappella","carciofo","carità","casci","cazzata","cazzimma","cazzo","checca","chiappa","chiavare","chiavata","ciospo","ciucciami il cazzo","coglione","coglioni","cornuto","cozza","culattina","culattone","culo","di merda","ditalino","duro","fare unaŠ","fava","femminuccia","fica","figa","figlio di buona donna","figlio di puttana","figone","finocchio","fottere","fottersi","fracicone","fregna","frocio","froscio","fuori come un balcone","goldone","grilletto","guanto","guardone","incazzarsi","incoglionirsi","ingoio","l\'arte bolognese","leccaculo","lecchino","lofare","loffa","loffare","lumaca","manico","mannaggia","merda","merdata","merdoso","mignotta","minchia","minchione","mona","monta","montare","mussa","nave scuola","nerchia","nudo","padulo","palle","palloso","patacca","patonza","pecorina","pesce","picio","pincare","pipa","pipì","pippone","pirla","pisciare","piscio","pisello","pistola","pistolotto","pomiciare","pompa","pompino","porca","porca madonna","porca miseria","porca puttana","porco due","porco zio","potta","puppami","puttana","quaglia","recchione","regina","rincoglionire","rizzarsi","rompiballe","ruffiano","sbattere","sbattersi","sborra","sborrata","sborrone","sbrodolata","scopare","scopata","scorreggiare","sega","slinguare","slinguata","smandrappata","soccia","socmel","sorca","spagnola","spompinare","sticchio","stronza","stronzata","stronzo","succhiami","sveltina","sverginare","tarzanello","terrone","testa di cazzo","tette","tirare","topa","troia","trombare","uccello","vacca","vaffanculo","vangare","venire","zinne","zio cantante","zoccola"]}'),j=JSON.parse('{"a":["3p","g スポット","s & m","sm","sm女王","xx","アジアのかわいい女の子","アスホール","アナリングス","アナル","いたずら","イラマチオ","ウェブカメラ","エクスタシー","エスコート","エッチ","エロティズム","エロティック","オーガズム","オカマ","おしっこ","おしり","オシリ","おしりのあな","おっぱい","オッパイ","オナニー","オマンコ","おもらし","お尻","カーマスートラ","カント","クリトリス","グループ・セックス","グロ","クンニリングス","ゲイ・セックス","ゲイの男性","ゲイボーイ","ゴールデンシャワー","コカイン","ゴックン","サディズム","しばり","スウィンガー","スカートの中","スカトロ","ストラップオン","ストリップ劇場","スラット","スリット","セクシーな","セクシーな 10 代","セックス","ソドミー","ちんこ","ディープ・スロート","ディック","ディルド","デートレイプ","デブ","テレフォンセックス","ドッグスタイル","トップレス","なめ","ニガー","ヌード","ネオ・ナチ","ハードコア","パイパン","バイブレーター","バック・スタイル","パンティー","ビッチ","ファック","ファンタジー","フィスト","フェティッシュ","フェラチオ","ふたなり","ぶっかけ","フック","プリンス アルバート ピアス","プレイボーイ","ベアバック","ペニス","ペニスバンド","ボーイズラブ","ボールギャグ","ボールを蹴る","ぽっちゃり","ホモ","ポルノ","ポルノグラフィー","ボンテージ","マザー・ファッカー","マスターベーション","まんこ","やおい","やりまん","ユダヤ人","ラティーナ","ラバー","ランジェリー","レイプ","レズビアン","ローター","ロリータ","淫乱","陰毛","革抑制","騎上位","巨根","巨乳","強姦犯","玉なめ","玉舐め","緊縛","近親相姦","嫌い","後背位","合意の性交","拷問","殺し方","殺人事件","殺人方法","支配","児童性虐待","自己愛性","射精","手コキ","獣姦","女の子","女王様","女子高生","女装","新しいポルノ","人妻","人種","性交","正常位","生殖器","精液","挿入","足フェチ","足を広げる","大陰唇","脱衣","茶色のシャワー","中出し","潮吹き女","潮吹き男性","直腸","剃毛","貞操帯","奴隷","二穴","乳首","尿道プレイ","覗き","売春婦","縛り","噴出","糞","糞尿愛好症","糞便","平手打ち","変態","勃起する","夢精","毛深い","誘惑","幼児","幼児性愛者","裸","裸の女性","乱交","両性","両性具有","両刀","輪姦","卍","宦官","肛門","膣"]}'),w=JSON.parse('{"a":["aardappels afgieteng","achter het raam zitten","afberen","aflebberen","afrossen","afrukken","aftrekken","afwerkplaats","afzeiken","afzuigen","anderhalve man en een paardekop","anita","asbak","aso","bagger schijten","balen","bedonderen","befborstelg","beffen","bekken","belazeren","besodemieterd zijn","besodemieteren","beurt","boemelen","boerelul","boerenpummelg","bokkelul","botergeil","broekhoesten","brugpieperg","buffelen","buiten de pot piesen","da\'s kloten van de bok","de ballen","de hoer spelen","de hond uitlaten","de koffer induiken","delg","de pijp aan maarten geven","de pijp uitgaan","dombo","draaikontg","driehoog achter wonen","drolg","drooggeiler","droogkloot","een beurt geven","een nummertje maken","een wip maken","eikel","engerd","flamoes","flikken","flikker","gadverdamme","galbak","gat","gedoogzone","geilneef","gesodemieter","godverdomme","graftak","gras maaien","gratenkutg","greppeldel","griet","hoempert","hoer","hoerenbuurt","hoerenloper","hoerig","hol","hufter","huisdealer","johny","kanen","kettingzeugg","klaarkomen","klerebeer","klojo","klooien","klootjesvolk","klootoog","klootzak","kloten","knor","kontg","kontneuken","krentekakker","kut","kuttelikkertje","kwakkieg","liefdesgrot","lul","lul-de-behanger","lulhannes","lummel","mafketel","matennaaierg","matje","mof","mutsg","naaien","naakt","neuken","neukstier","nicht","oetlul","opgeilen","opkankeren","oprotten","opsodemieteren","op z\'n hondjes","op z\'n sodemieter geven","opzouten","ouwehoer","ouwehoeren","ouwe rukker","paal","paardelul","palen","penozeg","piesen","pijpbekkieg","pijpen","pik","pleurislaaier","poep","poepen","poot","portiekslet","pot","potverdorie","publiciteitsgeil","raaskallen","reet","reetridder","reet trappen, voor zijn","remsporeng","reutelen","rothoer","rotzak","rukhond","rukken","schatje","schijt","schijten","schoft","schuinsmarcheerder","shit","slempen","sletg","sletterig","slik mijn zaad","snolg","spuiten","standje","standje-69g","stoephoer","stootje","strontg","sufferdg","tapijtnek","teefg","temeier","teringlijer","toeter","tongzoeng","triootjeg","trottoir prostituée","trottoirteef","vergallen","verkloten","verneuken","viespeuk","vingeren","vleesroos","voor jan lul","voor jan-met-de-korte-achternaam","watje","welzijnsmafia","wijf","wippen","wuftje","zaadje","zakkenwasser","zeiken","zeiker","zuigen","zuiplap"]}'),S=JSON.parse('{"a":["arsle","brutta","discofitta","dra åt helvete","fan","fitta","fittig","för helvete","helvete","hård","jävlar","knulla","kuk","kuksås","kötthuvud","köttnacke","moona","moonade","moonar","moonat","mutta","nigger","neger","olla","pippa","pitt","prutt","pök","runka","röv","rövhål","rövknulla","satan","skita","skit ner dig","skäggbiff","snedfitta","snefitta","stake","subba","sås","sätta på","tusan"]}'),x=JSON.parse('{"a":["กระดอ","กระเด้า","กระหรี่","กะปิ","กู","ขี้","ควย","จิ๋ม","จู๋","เจ๊ก","เจี๊ยว","ดอกทอง","ตอแหล","ตูด","น้ําแตก","มึง","แม่ง","เย็ด","รูตูด","ล้างตู้เย็น","ส้นตีน","สัด","เสือก","หญิงชาติชั่ว","หลั่ง","ห่า","หํา","หี","เหี้ย","อมนกเขา","ไอ้ควาย"]}'),O={arabic:o.a,chinese:n.a,czech:i.a,danish:s.a,english:l.a,esperanto:u.a,finnish:c.a,french:v.a,german:p.a,hindi:h.a,hungarian:f.a,italian:z.a,japanese:j.a,korean:k.a,norwegian:d.a,persian:b.a,polish:g.a,portuguese:m.a,russian:y.a,turkish:w.a,swedish:S.a,thai:x.a};function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function L(e,a){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=P(e))||a&&e&&"number"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,i=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){s=!0,n=e},f:function(){try{i||null==t.return||t.return()}finally{if(s)throw n}}}}function N(e){return function(e){if(Array.isArray(e))return A(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||P(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,a){if(e){if("string"==typeof e)return A(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?A(e,a):void 0}}function A(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,r=Array(a);t<a;t++)r[t]=e[t];return r}function J(e,a){for(var t=0;t<a.length;t++){var r=a[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_(r.key),r)}}function _(e){var a=function(e){if("object"!=E(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,"string");if("object"!=E(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(a)?a:a+""}var q=function(){return e=function e(a){var t,r;!function(e,a){if(!(e instanceof a))throw new TypeError("Cannot call a class as a function")}(this,e);var o=[];if(this.caseSensitive=null!==(t=null==a?void 0:a.caseSensitive)&&void 0!==t&&t,this.wordBoundaries=null===(r=null==a?void 0:a.wordBoundaries)||void 0===r||r,null!=a&&a.allLanguages)for(var n in O)O.hasOwnProperty(n)&&(o=[].concat(N(o),N(O[n])));else{var i=(null==a?void 0:a.languages)||["english"],s=new Set(i);0!==s.size&&s.forEach((function(e){o=[].concat(N(o),N(O[e]))}))}null!=a&&a.customWords&&(o=[].concat(N(o),N(a.customWords))),this.words=new Set(o)},(a=[{key:"isProfane",value:function(e){var a,t=this.caseSensitive?"g":"gi",r=L(this.words);try{for(r.s();!(a=r.n()).done;){var o=a.value,n=this.wordBoundaries?"\\b":"";if(new RegExp("".concat(n).concat(o.replace(/(\W)/g,"\\$1")).concat(n),t).test(e))return!0}}catch(e){r.e(e)}finally{r.f()}return!1}},{key:"checkProfanity",value:function(e){var a,t=[],r=L(e.split(/\s+/));try{for(r.s();!(a=r.n()).done;){var o=a.value;this.isProfane(o)&&t.push(o)}}catch(e){r.e(e)}finally{r.f()}return{containsProfanity:t.length>0,profaneWords:t}}}])&&J(e.prototype,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a}(),T=t(540);function I(e){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},I(e)}function G(){G=function(){return a};var e,a={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,a,t){e[a]=t.value},n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",s=n.asyncIterator||"@@asyncIterator",u=n.toStringTag||"@@toStringTag";function l(e,a,t){return Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[a]}try{l({},"")}catch(e){l=function(e,a,t){return e[a]=t}}function c(e,a,t,r){var n=a&&a.prototype instanceof g?a:g,i=Object.create(n.prototype),s=new P(r||[]);return o(i,"_invoke",{value:O(e,t,s)}),i}function p(e,a,t){try{return{type:"normal",arg:e.call(a,t)}}catch(e){return{type:"throw",arg:e}}}a.wrap=c;var h="suspendedStart",f="suspendedYield",k="executing",d="completed",b={};function g(){}function m(){}function y(){}var v={};l(v,i,(function(){return this}));var z=Object.getPrototypeOf,j=z&&z(z(A([])));j&&j!==t&&r.call(j,i)&&(v=j);var w=y.prototype=g.prototype=Object.create(v);function S(e){["next","throw","return"].forEach((function(a){l(e,a,(function(e){return this._invoke(a,e)}))}))}function x(e,a){function t(o,n,i,s){var u=p(e[o],e,n);if("throw"!==u.type){var l=u.arg,c=l.value;return c&&"object"==I(c)&&r.call(c,"__await")?a.resolve(c.__await).then((function(e){t("next",e,i,s)}),(function(e){t("throw",e,i,s)})):a.resolve(c).then((function(e){l.value=e,i(l)}),(function(e){return t("throw",e,i,s)}))}s(u.arg)}var n;o(this,"_invoke",{value:function(e,r){function o(){return new a((function(a,o){t(e,r,a,o)}))}return n=n?n.then(o,o):o()}})}function O(a,t,r){var o=h;return function(n,i){if(o===k)throw Error("Generator is already running");if(o===d){if("throw"===n)throw i;return{value:e,done:!0}}for(r.method=n,r.arg=i;;){var s=r.delegate;if(s){var u=E(s,r);if(u){if(u===b)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===h)throw o=d,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=k;var l=p(a,t,r);if("normal"===l.type){if(o=r.done?d:f,l.arg===b)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(o=d,r.method="throw",r.arg=l.arg)}}}function E(a,t){var r=t.method,o=a.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&a.iterator.return&&(t.method="return",t.arg=e,E(a,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var n=p(o,a.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,b;var i=n.arg;return i?i.done?(t[a.resultName]=i.value,t.next=a.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function L(e){var a={tryLoc:e[0]};1 in e&&(a.catchLoc=e[1]),2 in e&&(a.finallyLoc=e[2],a.afterLoc=e[3]),this.tryEntries.push(a)}function N(e){var a=e.completion||{};a.type="normal",delete a.arg,e.completion=a}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function A(a){if(a||""===a){var t=a[i];if(t)return t.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var o=-1,n=function t(){for(;++o<a.length;)if(r.call(a,o))return t.value=a[o],t.done=!1,t;return t.value=e,t.done=!0,t};return n.next=n}}throw new TypeError(I(a)+" is not iterable")}return m.prototype=y,o(w,"constructor",{value:y,configurable:!0}),o(y,"constructor",{value:m,configurable:!0}),m.displayName=l(y,u,"GeneratorFunction"),a.isGeneratorFunction=function(e){var a="function"==typeof e&&e.constructor;return!!a&&(a===m||"GeneratorFunction"===(a.displayName||a.name))},a.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,l(e,u,"GeneratorFunction")),e.prototype=Object.create(w),e},a.awrap=function(e){return{__await:e}},S(x.prototype),l(x.prototype,s,(function(){return this})),a.AsyncIterator=x,a.async=function(e,t,r,o,n){void 0===n&&(n=Promise);var i=new x(c(e,t,r,o),n);return a.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},S(w),l(w,u,"Generator"),l(w,i,(function(){return this})),l(w,"toString",(function(){return"[object Generator]"})),a.keys=function(e){var a=Object(e),t=[];for(var r in a)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in a)return e.value=r,e.done=!1,e}return e.done=!0,e}},a.values=A,P.prototype={constructor:P,reset:function(a){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(N),!a)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(a){if(this.done)throw a;var t=this;function o(r,o){return s.type="throw",s.arg=a,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],s=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(u&&l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,a){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var n=o;break}}n&&("break"===e||"continue"===e)&&n.tryLoc<=a&&a<=n.finallyLoc&&(n=null);var i=n?n.completion:{};return i.type=e,i.arg=a,n?(this.method="next",this.next=n.finallyLoc,b):this.complete(i)},complete:function(e,a){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&a&&(this.next=a),b},finish:function(e){for(var a=this.tryEntries.length-1;a>=0;--a){var t=this.tryEntries[a];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),N(t),b}},catch:function(e){for(var a=this.tryEntries.length-1;a>=0;--a){var t=this.tryEntries[a];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;N(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(a,t,r){return this.delegate={iterator:A(a),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},a}function F(e,a,t,r,o,n,i){try{var s=e[n](i),u=s.value}catch(e){return void t(e)}s.done?a(u):Promise.resolve(u).then(r,o)}function B(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,r=Array(a);t<a;t++)r[t]=e[t];return r}var M=function(e){var a,t,r=(a=(0,T.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(a)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,n,i,s=[],u=!0,l=!1;try{if(n=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;u=!1}else for(;!(u=(r=n.call(t)).done)&&(s.push(r.value),s.length!==a);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(a,t)||function(e,a){if(e){if("string"==typeof e)return B(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?B(e,a):void 0}}(a,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=r[0],n=r[1],i=new q(e),s=function(){var a,t=(a=G().mark((function a(t){return G().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",new Promise((function(a){var r=i.checkProfanity(t);n(r),null!=e&&e.customActions&&e.customActions(r),a(r)})));case 1:case"end":return a.stop()}}),a)})),function(){var e=this,t=arguments;return new Promise((function(r,o){var n=a.apply(e,t);function i(e){F(n,r,o,i,s,"next",e)}function s(e){F(n,r,o,i,s,"throw",e)}i(void 0)}))});return function(e){return t.apply(this,arguments)}}();return{result:o,checkText:function(a){var t=i.checkProfanity(a);n(t),null!=e&&e.customActions&&e.customActions(t)},checkTextAsync:s}};return r})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["Glin-profanity"]=t():e["Glin-profanity"]=t()}(this,(()=>(()=>{"use strict";var e={287:(e,t)=>{Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.iterator;var a={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},r=Object.assign,o={};function n(e,t,r){this.props=e,this.context=t,this.refs=o,this.updater=r||a}function i(){}function s(e,t,r){this.props=e,this.context=t,this.refs=o,this.updater=r||a}n.prototype.isReactComponent={},n.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},n.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},i.prototype=n.prototype;var u=s.prototype=new i;u.constructor=s,r(u,n.prototype),u.isPureReactComponent=!0;Array.isArray,Object.prototype.hasOwnProperty;var l={current:null};t.useState=function(e){return l.current.useState(e)}},540:(e,t,a)=>{e.exports=a(287)}},t={};function a(r){var o=t[r];if(void 0!==o)return o.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,a),n.exports}a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};a.r(r),a.d(r,{Filter:()=>q,useProfanityChecker:()=>M});const o=JSON.parse('{"a":["سكس","طيز","شرج","لعق","لحس","تمص","بيضان","ثدي","بز","حلمة","مفلقسة","بظر","كس","مبادل","عاهرة","جماع","قضيب","زب","لوطي","لواط","سحاق","اغتصاب","خنثي","احتلام","نيك","متناك","شرموطة","عرص","خول","قحبة","لبوة","وسخ","علق","ناك","منيك","شرمط","قحب","شرموط","خول","هنيك","فحل","ديوث","متناك","هايج","زبر","bdsm","زان","سادي","سادى","كسها","كسي","كسك","كسم","بنتاك","بتناك","نيكني","ديوث","نياك","فشاخ","فشخ","هفشخك","شذوذ","لواط","لوطي","لوطى","عاهر","لحس","متع","حمام","هربط","دياث","سحاق","جنس","جنس","جوزي","مراتي","مراتى","مرات","ورا","شعر","مشعر","اركب","فرس","جاد","منيوك","زوبر","طياز","شراميط","فاجر","محروم","واقف","بيحك","ممحونة","لبن","لبو","واقف","شرقان","افضي","دهولت","bzaz","nek","nik","mtnak","zeb","zep","zobr","zopr","kos","a7a","hayg","لبوه","لبوة","لبوت","sharma","banoty","بنوتي","بنوتى","سلب","عايز","دكر","نتاية","نتايه","زنج","ممحون","تعبان","اقعد","بزاز","هيجان","سافل","مصيهولي","هتمص","مصي","بز","hayg","كلوت","اندر","سنتيا","بوكسر","بتاع","مشتهي","زبى","نكته","اتناك","nayak","nyak","neeek","اغتصا","زب","كس","بلكيشن","كيشن","ليسبيان","سبيان"]}'),n=JSON.parse('{"a":["13.","13点","三级片","下三烂","下贱","个老子的","九游","乳","乳交","乳头","乳房","乳波臀浪","交配","仆街","他奶奶","他奶奶的","他奶娘的","他妈","他妈ㄉ王八蛋","他妈地","他妈的","他娘","他马的","你个傻比","你他马的","你全家","你奶奶的","你她马的","你妈","你妈的","你娘","你娘卡好","你娘咧","你它妈的","你它马的","你是鸡","你是鸭","你马的","做爱","傻比","傻逼","册那","军妓","几八","几叭","几巴","几芭","刚度","刚瘪三","包皮","十三点","卖B","卖比","卖淫","卵","卵子","双峰微颤","口交","口肯","叫床","吃屎","后庭","吹箫","塞你公","塞你娘","塞你母","塞你爸","塞你老师","塞你老母","处女","外阴","大卵子","大卵泡","大鸡巴","奶","奶奶的熊","奶子","奸","奸你","她妈地","她妈的","她马的","妈B","妈个B","妈个比","妈个老比","妈妈的","妈比","妈的","妈的B","妈逼","妓","妓女","妓院","妳她妈的","妳妈的","妳娘的","妳老母的","妳马的","姘头","姣西","姦","娘个比","娘的","婊子","婊子养的","嫖娼","嫖客","它妈地","它妈的","密洞","射你","射精","小乳头","小卵子","小卵泡","小瘪三","小肉粒","小骚比","小骚货","小鸡巴","小鸡鸡","屁眼","屁股","屄","屌","巨乳","干x娘","干七八","干你","干你妈","干你娘","干你老母","干你良","干妳妈","干妳娘","干妳老母","干妳马","干您娘","干机掰","干死CS","干死GM","干死你","干死客服","幹","强奸","强奸你","性","性交","性器","性无能","性爱","情色","想上你","懆您妈","懆您娘","懒8","懒八","懒叫","懒教","成人","我操你祖宗十八代","扒光","打炮","打飞机","抽插","招妓","插你","插死你","撒尿","操你","操你全家","操你奶奶","操你妈","操你娘","操你祖宗","操你老妈","操你老母","操妳","操妳全家","操妳妈","操妳娘","操妳祖宗","操机掰","操比","操逼","放荡","日他娘","日你","日你妈","日你老娘","日你老母","日批","月经","机八","机巴","机机歪歪","杂种","浪叫","淫","淫乱","淫妇","淫棍","淫水","淫秽","淫荡","淫西","湿透的内裤","激情","灨你娘","烂货","烂逼","爛","狗屁","狗日","狗狼养的","玉杵","王八蛋","瓜娃子","瓜婆娘","瓜批","瘪三","白烂","白痴","白癡","祖宗","私服","笨蛋","精子","老二","老味","老母","老瘪三","老骚比","老骚货","肉壁","肉棍子","肉棒","肉缝","肏","肛交","肥西","色情","花柳","荡妇","賤","贝肉","贱B","贱人","贱货","贼你妈","赛你老母","赛妳阿母","赣您娘","轮奸","迷药","逼","逼样","野鸡","阳具","阳萎","阴唇","阴户","阴核","阴毛","阴茎","阴道","阴部","雞巴","靠北","靠母","靠爸","靠背","靠腰","驶你公","驶你娘","驶你母","驶你爸","驶你老师","驶你老母","骚比","骚货","骚逼","鬼公","鸡8","鸡八","鸡叭","鸡吧","鸡奸","鸡巴","鸡芭","鸡鸡","龟儿子","龟头"]}'),i=JSON.parse('{"a":["bordel","buzna","čumět","čurák","debil","do piče","do prdele","dršťka","držka","flundra","hajzl","hovno","chcanky","chuj","jebat","kokot","kokotina","koňomrd","kunda","kurva","mamrd","mrdat","mrdka","mrdník","oslošoust","piča","píčus","píchat","pizda","prcat","prdel","prdelka","sračka","srát","šoustat","šulin","vypíčenec","zkurvit","zkurvysyn","zmrd","žrát"]}'),s=JSON.parse('{"a":["anus","bøsserøv","cock","fisse","fissehår","fuck","hestepik","kussekryller","lort","luder","pik","pikhår","pikslugeri","piksutteri","pis","røv","røvhul","røvskæg","røvspræke","shit"]}'),u=JSON.parse('{"a":["bugren","bugri","bugru","ĉiesulino","ĉiesulo","diofek","diofeka","fek","feken","fekfikanto","feklekulo","fekulo","fik","fikado","fikema","fikfek","fiki","fikiĝi","fikiĝu","fikilo","fikklaŭno","fikota","fiku","forfiki","forfikiĝu","forfiku","forfurzu","forpisi","forpisu","furzulo","kacen","kaco","kacsuĉulo","kojono","piĉen","piĉo","zamenfek"]}'),l=JSON.parse('{"a":["testbad01","2g1c","2 girls 1 cup","acrotomophilia","alabama hot pocket","alaskan pipeline","anal","anilingus","anus","apeshit","arsehole","ass","asshole","assmunch","auto erotic","autoerotic","babeland","baby batter","baby juice","ball gag","ball gravy","ball kicking","ball licking","ball sack","ball sucking","bangbros","bareback","barely legal","barenaked","bastard","bastardo","bastinado","bbw","bdsm","beaner","beaners","beaver cleaver","beaver lips","bestiality","big black","big breasts","big knockers","big tits","bimbos","birdlock","bitch","bitches","black cock","blonde action","blonde on blonde action","blowjob","blow job","blow your load","blue waffle","blumpkin","bollocks","bondage","boner","boob","boobs","booty call","brown showers","brunette action","bukkake","bulldyke","bullet vibe","bullshit","bung hole","bunghole","busty","butt","buttcheeks","butthole","camel toe","camgirl","camslut","camwhore","carpet muncher","carpetmuncher","chocolate rosebuds","circlejerk","cleveland steamer","clit","clitoris","clover clamps","clusterfuck","cock","cocks","coprolagnia","coprophilia","cornhole","coon","coons","creampie","cum","cumming","cunnilingus","cunt","darkie","date rape","daterape","deep throat","deepthroat","dendrophilia","dick","dildo","dingleberry","dingleberries","dirty pillows","dirty sanchez","doggie style","doggiestyle","doggy style","doggystyle","dog style","dolcett","domination","dominatrix","dommes","donkey punch","double dong","double penetration","dp action","dry hump","dvda","eat my ass","ecchi","ejaculation","erotic","erotism","escort","eunuch","faggot","fecal","felch","fellatio","feltch","female squirting","femdom","figging","fingerbang","fingering","fisting","foot fetish","footjob","frotting","fuck","fuck buttons","fuckin","fucking","fucktards","fudge packer","fudgepacker","futanari","gang bang","gay sex","genitals","giant cock","girl on","girl on top","girls gone wild","goatcx","goatse","god damn","gokkun","golden shower","goodpoop","goo girl","goregasm","grope","group sex","g-spot","guro","hand job","handjob","hard core","hardcore","hentai","homoerotic","honkey","hooker","hot carl","hot chick","how to kill","how to murder","huge fat","humping","incest","intercourse","jack off","jail bait","jailbait","jelly donut","jerk off","jigaboo","jiggaboo","jiggerboo","jizz","juggs","kike","kinbaku","kinkster","kinky","knobbing","leather restraint","leather straight jacket","lemon party","lolita","lovemaking","make me come","male squirting","masturbate","menage a trois","milf","missionary position","motherfucker","mound of venus","mr hands","muff diver","muffdiving","nambla","nawashi","negro","neonazi","nigga","nigger","nig nog","nimphomania","nipple","nipples","nsfw images","nude","nudity","nympho","nymphomania","octopussy","omorashi","one cup two girls","one guy one jar","orgasm","orgy","paedophile","paki","panties","panty","pedobear","pedophile","pegging","penis","phone sex","piece of shit","pissing","piss pig","pisspig","playboy","pleasure chest","pole smoker","ponyplay","poof","poon","poontang","punany","poop chute","poopchute","porn","porno","pornography","prince albert piercing","pthc","pubes","pussy","queaf","queef","quim","raghead","raging boner","rape","raping","rapist","rectum","reverse cowgirl","rimjob","rimming","rosy palm","rosy palm and her 5 sisters","rusty trombone","sadism","santorum","scat","schlong","scissoring","semen","sex","sexo","sexy","shaved beaver","shaved pussy","shemale","shibari","shit","shitblimp","shitty","shota","shrimping","skeet","slanteye","slut","s&m","smut","snatch","snowballing","sodomize","sodomy","spic","splooge","splooge moose","spooge","spread legs","spunk","strap on","strapon","strappado","strip club","style doggy","suck","sucks","suicide girls","sultry women","swastika","swinger","tainted love","taste my","tea bagging","threesome","throating","tied up","tight white","tit","tits","titties","titty","tongue in a","topless","tosser","towelhead","tranny","tribadism","tub girl","tubgirl","tushy","twat","twink","twinkie","two girls one cup","undressing","upskirt","urethra play","urophilia","vagina","venus mound","vibrator","violet wand","vorarephilia","voyeur","vulva","wank","wetback","wet dream","white power","wrapping men","wrinkled starfish","xx","xxx","yaoi","yellow showers","yiffy","zoophilia","🖕"]}'),c=JSON.parse('{"a":["alfred nussi","bylsiä","haahka","haista paska","haista vittu","hatullinen","helvetisti","hevonkuusi","hevonpaska","hevonperse","hevonvittu","hevonvitunperse","hitosti","hitto","huorata","hässiä","juosten kustu","jutku","jutsku","jätkä","kananpaska","koiranpaska","kuin esterin perseestä","kulli","kullinluikaus","kuppainen","kusaista","kuseksia","kusettaa","kusi","kusipää","kusta","kyrpiintynyt","kyrpiintyä","kyrpiä","kyrpä","kyrpänaama","kyrvitys","lahtari","lutka","molo","molopää","mulkero","mulkku","mulkvisti","muna","munapää","munaton","mutakuono","mutiainen","naida","nainti","narttu","neekeri","nekru","nuolla persettä","nussia","nussija","nussinta","paljaalla","palli","pallit","paneskella","panettaa","panna","pano","pantava","paska","paskainen","paskamainen","paskanmarjat","paskantaa","paskapuhe","paskapää","paskattaa","paskiainen","paskoa","pehko","pentele","perkele","perkeleesti","persaukinen","perse","perseennuolija","perseet olalla","persereikä","perseääliö","persläpi","perspano","persvako","pilkunnussija","pillu","pillut","pipari","piru","pistää","pyllyvako","reikä","reva","ripsipiirakka","runkata","runkkari","runkkaus","runkku","ryssä","rättipää","saatanasti","suklaaosasto","tavara","toosa","tuhkaluukku","tumputtaa","turpasauna","tussu","tussukka","tussut","vakipano","vetää käteen","viiksi","vittu","vittuilla","vittuilu","vittumainen","vittuuntua","vittuuntunut","vitun","vitusti","vituttaa","vitutus","äpärä"]}'),p=JSON.parse('{"a":["analritter","arsch","arschficker","arschlecker","arschloch","bimbo","bratze","bumsen","bonze","dödel","fick","ficken","flittchen","fotze","fratze","hackfresse","hure","hurensohn","ische","kackbratze","kacke","kacken","kackwurst","kampflesbe","kanake","kimme","lümmel","MILF","möpse","morgenlatte","möse","mufti","muschi","nackt","neger","nigger","nippel","nutte","onanieren","orgasmus","pimmel","pimpern","pinkeln","pissen","pisser","popel","poppen","porno","reudig","rosette","schabracke","schlampe","scheiße","scheisser","schiesser","schnackeln","schwanzlutscher","schwuchtel","tittchen","titten","vögeln","vollpfosten","wichse","wichsen","wichser"]}'),h=JSON.parse('{"a":["aand","aandu","balatkar","beti chod","bhadva","bhadve","bhandve","bhootni ke","bhosad","bhosadi ke","boobe","chakke","chinaal","chinki","chod","chodu","chodu bhagat","chooche","choochi","choot","choot ke baal","chootia","chootiya","chuche","chuchi","chudai khanaa","chudan chudai","chut","chut ke baal","chut ke dhakkan","chut maarli","chutad","chutadd","chutan","chutia","chutiya","gaand","gaandfat","gaandmasti","gaandufad","gandu","gashti","gasti","ghassa","ghasti","harami","haramzade","hawas","hawas ke pujari","hijda","hijra","jhant","jhant chaatu","jhant ke baal","jhantu","kamine","kaminey","kanjar","kutta","kutta kamina","kutte ki aulad","kutte ki jat","kuttiya","loda","lodu","lund","lund choos","lund khajoor","lundtopi","lundure","maa ki chut","maal","madar chod","mooh mein le","mutth","najayaz","najayaz aulaad","najayaz paidaish","paki","pataka","patakha","raand","randi","saala","saala kutta","saali kutti","saali randi","suar","suar ki aulad","tatte","tatti","teri maa ka bhosada","teri maa ka boba chusu","teri maa ki chut","tharak","tharki"]}'),f=JSON.parse('{"a":["balfasz","balfaszok","balfaszokat","balfaszt","barmok","barmokat","barmot","barom","baszik","bazmeg","buksza","bukszák","bukszákat","bukszát","búr","búrok","csöcs","csöcsök","csöcsöket","csöcsöt","fasz","faszfej","faszfejek","faszfejeket","faszfejet","faszok","faszokat","faszt","fing","fingok","fingokat","fingot","franc","francok","francokat","francot","geci","gecibb","gecik","geciket","gecit","kibaszott","kibaszottabb","kúr","kurafi","kurafik","kurafikat","kurafit","kurva","kurvák","kurvákat","kurvát","leggecibb","legkibaszottabb","legszarabb","marha","marhák","marhákat","marhát","megdöglik","pele","pelék","picsa","picsákat","picsát","pina","pinák","pinákat","pinát","pofa","pofákat","pofát","pöcs","pöcsök","pöcsöket","pöcsöt","punci","puncik","segg","seggek","seggeket","segget","seggfej","seggfejek","seggfejeket","seggfejet","szajha","szajhák","szajhákat","szajhát","szar","szarabb","szarik","szarok","szarokat","szart"]}'),d=JSON.parse('{"a":["강간","개새끼","개자식","개좆","개차반","거유","계집년","고자","근친","노모","니기미","뒤질래","딸딸이","때씹","또라이","뙤놈","로리타","망가","몰카","미친","미친새끼","바바리맨","변태","병신","보지","불알","빠구리","사까시","섹스","스와핑","쌍놈","씨발","씨발놈","씨팔","씹","씹물","씹빨","씹새끼","씹알","씹창","씹팔","암캐","애자","야동","야사","야애니","엄창","에로","염병","옘병","유모","육갑","은꼴","자위","자지","잡년","종간나","좆","좆만","죽일년","쥐좆","직촬","짱깨","쪽바리","창녀","포르노","하드코어","호로","화냥년","후레아들","후장","희쭈그리"]}'),k=JSON.parse('{"a":["drittsekk","faen i helvete","fitte","jævla","kuk","kukene","kuker","nigger","pikk","sotrør","ståpikk","ståpikkene","ståpikker"]}'),g=JSON.parse('{"a":["آب کیر","ارگاسم","برهنه","پورن","پورنو","تجاوز","تخمی","جق","جقی","جلق","جنده","چوچول","حشر","حشری","داف","دودول","ساک زدن","سکس","سکس کردن","سکسی","سوپر","شق کردن","شهوت","شهوتی","شونبول","فیلم سوپر","کس","کس دادن","کس کردن","کسکش","کوس","کون","کون دادن","کون کردن","کونکش","کونی","کیر","کیری","لاپا","لاپایی","لاشی","لخت","لش","منی","هرزه"]}'),b=JSON.parse('{"a":["burdel","burdelmama","chuj","chujnia","ciota","cipa","cyc","debil","dmuchać","do kurwy nędzy","dupa","dupek","duperele","dziwka","fiut","gówno","gówno prawda","huj","jajco","jajeczko","jajko","jajo","ja pierdolę","jebać","jebany","kurwa","kurwy","kutafon","kutas","lizać pałę","obciągać chuja","obciągać fiuta","obciągać loda","pieprzyć","pierdolec","pierdolić","pierdolnięty","pierdoła","pierdzieć","pizda","pojeb","popierdolony","robic loda","robić loda","ruchać","rzygać","skurwysyn","sraczka","srać","suka","syf","wkurwiać","zajebisty"]}'),m=JSON.parse('{"a":["aborto","amador","ânus","aranha","ariano","balalao","bastardo","bicha","biscate","bissexual","boceta","boob","bosta","braulio de borracha","bumbum","burro","cabrao","cacete","cagar","camisinha","caralho","cerveja","chochota","chupar","clitoris","cocaína","colhoes","comer","cona","consolo","corno","cu","dar o rabo","dum raio","esporra","fecal","filho da puta","foda","foda-se","foder","frango assado","gozar","grelho","heroína","heterosexual","homem gay","homoerótico","homosexual","inferno","lésbica","lolita","mama","merda","paneleiro","passar um cheque","pau","peidar","pênis","pinto","porra","puta","puta que pariu","puta que te pariu","queca","sacanagem","saco","torneira","transar","vai-te foder","vai tomar no cu","veado","vibrador","xana","xochota"]}'),y=JSON.parse('{"a":["bychara","byk","chernozhopyi","dolboy\'eb","ebalnik","ebalo","ebalom sch\'elkat","gol","mudack","opizdenet","osto\'eblo","ostokhuitel\'no","ot\'ebis","otmudohat","otpizdit","otsosi","padlo","pedik","perdet","petuh","pidar gnoinyj","pizda","pizdato","pizdatyi","piz\'det","pizdetc","pizdoi nakryt\'sja","pizd\'uk","piz`dyulina","podi ku\'evo","poeben","po\'imat\' na konchik","po\'iti posrat","po khuy","poluchit pizdy","pososi moyu konfetku","prissat","proebat","promudobl\'adsksya pizdopro\'ebina","propezdoloch","prosrat","raspeezdeyi","raspizdatyi","raz\'yebuy","raz\'yoba","s\'ebat\'sya","shalava","styervo","sukin syn","svodit posrat","svoloch","trakhat\'sya","trimandoblydskiy pizdoproyob","ubl\'yudok","uboy","u\'ebitsche","vafl\'a","vafli lovit","v pizdu","vyperdysh","vzdrochennyi","yeb vas","za\'ebat","zaebis","zalupa","zalupat","zasranetc","zassat","zlo\'ebuchy","бардак","бздёнок","блядки","блядовать","блядство","блядь","бугор","во пизду","встать раком","выёбываться","гандон","говно","говнюк","голый","дать пизды","дерьмо","дрочить","другой дразнится","ёбарь","ебать","ебать-копать","ебло","ебнуть","ёб твою мать","жопа","жополиз","играть на кожаной флейте","измудохать","каждый дрочит как он хочет","какая разница","как два пальца обоссать","курите мою трубку","лысого в кулаке гонять","малофя","манда","мандавошка","мент","муда","мудило","мудозмон","наебать","наебениться","наебнуться","на фиг","на хуй","на хую вертеть","на хуя","нахуячиться","невебенный","не ебет","ни за хуй собачу","ни хуя","обнаженный","обоссаться можно","один ебётся","опесдол","офигеть","охуеть","охуйтельно","половое сношение","секс","сиски","спиздить","срать","ссать","траxать","ты мне ваньку не валяй","фига","хапать","хер с ней","хер с ним","хохол","хрен","хуёво","хуёвый","хуем груши околачивать","хуеплет","хуило","хуиней страдать","хуиня","хуй","хуйнуть","хуй пинать"]}'),v=JSON.parse('{"a":["baiser","bander","bigornette","bite","bitte","bloblos","bordel","bosser","bourré","bourrée","brackmard","branlage","branler","branlette","branleur","branleuse","brouter le cresson","caca","cailler","chatte","chiasse","chier","chiottes","clito","clitoris","con","connard","connasse","conne","couilles","cramouille","cul","déconne","déconner","drague","emmerdant","emmerder","emmerdeur","emmerdeuse","enculé","enculée","enculeur","enculeurs","enfoiré","enfoirée","étron","fille de pute","fils de pute","folle","foutre","gerbe","gerber","gouine","grande folle","grogniasse","gueule","jouir","la putain de ta mère","MALPT","ménage à trois","merde","merdeuse","merdeux","meuf","nègre","nique ta mère","nique ta race","palucher","pédale","pédé","péter","pipi","pisser","pouffiasse","pousse-crotte","putain","pute","ramoner","sac à foutre","sac à merde","salaud","salope","suce","tapette","tanche","teuch","teuf","tringler","trique","troncher","trou du cul","turlute","veuve","zigounette","zizi"]}'),w=JSON.parse('{"a":["allupato","ammucchiata","anale","arrapato","arrusa","arruso","assatanato","bagascia","bagassa","bagnarsi","baldracca","balle","battere","battona","belino","biga","bocchinara","bocchino","bofilo","boiata","bordello","brinca","bucaiolo","budiùlo","buona donna","busone","cacca","caccati in mano e prenditi a schiaffi","caciocappella","cadavere","cagare","cagata","cagna","cammello","cappella","carciofo","carità","casci","cazzata","cazzimma","cazzo","checca","chiappa","chiavare","chiavata","ciospo","ciucciami il cazzo","coglione","coglioni","cornuto","cozza","culattina","culattone","culo","di merda","ditalino","duro","fare unaŠ","fava","femminuccia","fica","figa","figlio di buona donna","figlio di puttana","figone","finocchio","fottere","fottersi","fracicone","fregna","frocio","froscio","fuori come un balcone","goldone","grilletto","guanto","guardone","incazzarsi","incoglionirsi","ingoio","l\'arte bolognese","leccaculo","lecchino","lofare","loffa","loffare","lumaca","manico","mannaggia","merda","merdata","merdoso","mignotta","minchia","minchione","mona","monta","montare","mussa","nave scuola","nerchia","nudo","padulo","palle","palloso","patacca","patonza","pecorina","pesce","picio","pincare","pipa","pipì","pippone","pirla","pisciare","piscio","pisello","pistola","pistolotto","pomiciare","pompa","pompino","porca","porca madonna","porca miseria","porca puttana","porco due","porco zio","potta","puppami","puttana","quaglia","recchione","regina","rincoglionire","rizzarsi","rompiballe","ruffiano","sbattere","sbattersi","sborra","sborrata","sborrone","sbrodolata","scopare","scopata","scorreggiare","sega","slinguare","slinguata","smandrappata","soccia","socmel","sorca","spagnola","spompinare","sticchio","stronza","stronzata","stronzo","succhiami","sveltina","sverginare","tarzanello","terrone","testa di cazzo","tette","tirare","topa","troia","trombare","uccello","vacca","vaffanculo","vangare","venire","zinne","zio cantante","zoccola"]}'),z=JSON.parse('{"a":["3p","g スポット","s & m","sm","sm女王","xx","アジアのかわいい女の子","アスホール","アナリングス","アナル","いたずら","イラマチオ","ウェブカメラ","エクスタシー","エスコート","エッチ","エロティズム","エロティック","オーガズム","オカマ","おしっこ","おしり","オシリ","おしりのあな","おっぱい","オッパイ","オナニー","オマンコ","おもらし","お尻","カーマスートラ","カント","クリトリス","グループ・セックス","グロ","クンニリングス","ゲイ・セックス","ゲイの男性","ゲイボーイ","ゴールデンシャワー","コカイン","ゴックン","サディズム","しばり","スウィンガー","スカートの中","スカトロ","ストラップオン","ストリップ劇場","スラット","スリット","セクシーな","セクシーな 10 代","セックス","ソドミー","ちんこ","ディープ・スロート","ディック","ディルド","デートレイプ","デブ","テレフォンセックス","ドッグスタイル","トップレス","なめ","ニガー","ヌード","ネオ・ナチ","ハードコア","パイパン","バイブレーター","バック・スタイル","パンティー","ビッチ","ファック","ファンタジー","フィスト","フェティッシュ","フェラチオ","ふたなり","ぶっかけ","フック","プリンス アルバート ピアス","プレイボーイ","ベアバック","ペニス","ペニスバンド","ボーイズラブ","ボールギャグ","ボールを蹴る","ぽっちゃり","ホモ","ポルノ","ポルノグラフィー","ボンテージ","マザー・ファッカー","マスターベーション","まんこ","やおい","やりまん","ユダヤ人","ラティーナ","ラバー","ランジェリー","レイプ","レズビアン","ローター","ロリータ","淫乱","陰毛","革抑制","騎上位","巨根","巨乳","強姦犯","玉なめ","玉舐め","緊縛","近親相姦","嫌い","後背位","合意の性交","拷問","殺し方","殺人事件","殺人方法","支配","児童性虐待","自己愛性","射精","手コキ","獣姦","女の子","女王様","女子高生","女装","新しいポルノ","人妻","人種","性交","正常位","生殖器","精液","挿入","足フェチ","足を広げる","大陰唇","脱衣","茶色のシャワー","中出し","潮吹き女","潮吹き男性","直腸","剃毛","貞操帯","奴隷","二穴","乳首","尿道プレイ","覗き","売春婦","縛り","噴出","糞","糞尿愛好症","糞便","平手打ち","変態","勃起する","夢精","毛深い","誘惑","幼児","幼児性愛者","裸","裸の女性","乱交","両性","両性具有","両刀","輪姦","卍","宦官","肛門","膣"]}'),j=JSON.parse('{"a":["aardappels afgieteng","achter het raam zitten","afberen","aflebberen","afrossen","afrukken","aftrekken","afwerkplaats","afzeiken","afzuigen","anderhalve man en een paardekop","anita","asbak","aso","bagger schijten","balen","bedonderen","befborstelg","beffen","bekken","belazeren","besodemieterd zijn","besodemieteren","beurt","boemelen","boerelul","boerenpummelg","bokkelul","botergeil","broekhoesten","brugpieperg","buffelen","buiten de pot piesen","da\'s kloten van de bok","de ballen","de hoer spelen","de hond uitlaten","de koffer induiken","delg","de pijp aan maarten geven","de pijp uitgaan","dombo","draaikontg","driehoog achter wonen","drolg","drooggeiler","droogkloot","een beurt geven","een nummertje maken","een wip maken","eikel","engerd","flamoes","flikken","flikker","gadverdamme","galbak","gat","gedoogzone","geilneef","gesodemieter","godverdomme","graftak","gras maaien","gratenkutg","greppeldel","griet","hoempert","hoer","hoerenbuurt","hoerenloper","hoerig","hol","hufter","huisdealer","johny","kanen","kettingzeugg","klaarkomen","klerebeer","klojo","klooien","klootjesvolk","klootoog","klootzak","kloten","knor","kontg","kontneuken","krentekakker","kut","kuttelikkertje","kwakkieg","liefdesgrot","lul","lul-de-behanger","lulhannes","lummel","mafketel","matennaaierg","matje","mof","mutsg","naaien","naakt","neuken","neukstier","nicht","oetlul","opgeilen","opkankeren","oprotten","opsodemieteren","op z\'n hondjes","op z\'n sodemieter geven","opzouten","ouwehoer","ouwehoeren","ouwe rukker","paal","paardelul","palen","penozeg","piesen","pijpbekkieg","pijpen","pik","pleurislaaier","poep","poepen","poot","portiekslet","pot","potverdorie","publiciteitsgeil","raaskallen","reet","reetridder","reet trappen, voor zijn","remsporeng","reutelen","rothoer","rotzak","rukhond","rukken","schatje","schijt","schijten","schoft","schuinsmarcheerder","shit","slempen","sletg","sletterig","slik mijn zaad","snolg","spuiten","standje","standje-69g","stoephoer","stootje","strontg","sufferdg","tapijtnek","teefg","temeier","teringlijer","toeter","tongzoeng","triootjeg","trottoir prostituée","trottoirteef","vergallen","verkloten","verneuken","viespeuk","vingeren","vleesroos","voor jan lul","voor jan-met-de-korte-achternaam","watje","welzijnsmafia","wijf","wippen","wuftje","zaadje","zakkenwasser","zeiken","zeiker","zuigen","zuiplap"]}'),S=JSON.parse('{"a":["arsle","brutta","discofitta","dra åt helvete","fan","fitta","fittig","för helvete","helvete","hård","jävlar","knulla","kuk","kuksås","kötthuvud","köttnacke","moona","moonade","moonar","moonat","mutta","nigger","neger","olla","pippa","pitt","prutt","pök","runka","röv","rövhål","rövknulla","satan","skita","skit ner dig","skäggbiff","snedfitta","snefitta","stake","subba","sås","sätta på","tusan"]}'),x=JSON.parse('{"a":["กระดอ","กระเด้า","กระหรี่","กะปิ","กู","ขี้","ควย","จิ๋ม","จู๋","เจ๊ก","เจี๊ยว","ดอกทอง","ตอแหล","ตูด","น้ําแตก","มึง","แม่ง","เย็ด","รูตูด","ล้างตู้เย็น","ส้นตีน","สัด","เสือก","หญิงชาติชั่ว","หลั่ง","ห่า","หํา","หี","เหี้ย","อมนกเขา","ไอ้ควาย"]}'),O={arabic:o.a,chinese:n.a,czech:i.a,danish:s.a,english:l.a,esperanto:u.a,finnish:c.a,french:v.a,german:p.a,hindi:h.a,hungarian:f.a,italian:w.a,japanese:z.a,korean:d.a,norwegian:k.a,persian:g.a,polish:b.a,portuguese:m.a,russian:y.a,turkish:j.a,swedish:S.a,thai:x.a};function L(e){return L="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},L(e)}function P(e,t){var a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!a){if(Array.isArray(e)||(a=N(e))||t&&e&&"number"==typeof e.length){a&&(e=a);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,i=!0,s=!1;return{s:function(){a=a.call(e)},n:function(){var e=a.next();return i=e.done,e},e:function(e){s=!0,n=e},f:function(){try{i||null==a.return||a.return()}finally{if(s)throw n}}}}function E(e){return function(e){if(Array.isArray(e))return A(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||N(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e,t){if(e){if("string"==typeof e)return A(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?A(e,t):void 0}}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function J(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_(r.key),r)}}function _(e){var t=function(e){if("object"!=L(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=L(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==L(t)?t:t+""}var q=function(){return e=function e(t){var a,r,o,n,i;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var s=[];if(this.caseSensitive=null!==(a=null==t?void 0:t.caseSensitive)&&void 0!==a&&a,this.wordBoundaries=null===(r=null==t?void 0:t.wordBoundaries)||void 0===r||r,this.replaceWith=null==t?void 0:t.replaceWith,this.severityLevels=null!==(o=null==t?void 0:t.severityLevels)&&void 0!==o&&o,this.ignoreWords=new Set((null==t||null===(n=t.ignoreWords)||void 0===n?void 0:n.map((function(e){return e.toLowerCase()})))||[]),this.logProfanity=null!==(i=null==t?void 0:t.logProfanity)&&void 0!==i&&i,null!=t&&t.allLanguages)for(var u in O)O.hasOwnProperty(u)&&(s=[].concat(E(s),E(O[u])));else{var l=(null==t?void 0:t.languages)||["english"],c=new Set(l);0!==c.size&&c.forEach((function(e){s=[].concat(E(s),E(O[e]))}))}null!=t&&t.customWords&&(s=[].concat(E(s),E(t.customWords))),this.words=new Map(s.map((function(e){return[e,1]})))},(t=[{key:"getRegex",value:function(e){var t=this.caseSensitive?"g":"gi",a=this.wordBoundaries?"\\b":"";return new RegExp("".concat(a).concat(e.replace(/(\W)/g,"\\$1")).concat(a),t)}},{key:"isProfane",value:function(e){var t,a=P(this.words.keys());try{for(a.s();!(t=a.n()).done;){var r=t.value;if(!this.ignoreWords.has(r.toLowerCase())&&this.getRegex(r).test(e))return!0}}catch(e){a.e(e)}finally{a.f()}return!1}},{key:"checkProfanity",value:function(e){var t,a=[],r={},o=P(e.split(/\s+/));try{for(o.s();!(t=o.n()).done;){var n=t.value;this.words.has(n.toLowerCase())&&!this.ignoreWords.has(n.toLowerCase())&&(a.push(n),r[n]=this.words.get(n.toLowerCase()))}}catch(e){o.e(e)}finally{o.f()}this.logProfanity&&a.length>0&&console.log("Profane words detected: ".concat(a.join(", ")));var i=e;if(this.replaceWith){var s,u=P(a);try{for(u.s();!(s=u.n()).done;){var l=s.value;i=i.replace(this.getRegex(l),this.replaceWith)}}catch(e){u.e(e)}finally{u.f()}}return{containsProfanity:a.length>0,profaneWords:a,processedText:this.replaceWith?i:void 0,severityMap:this.severityLevels?r:void 0}}}])&&J(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}(),T=a(540);function W(e){return W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},W(e)}function C(){C=function(){return t};var e,t={},a=Object.prototype,r=a.hasOwnProperty,o=Object.defineProperty||function(e,t,a){e[t]=a.value},n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",s=n.asyncIterator||"@@asyncIterator",u=n.toStringTag||"@@toStringTag";function l(e,t,a){return Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,a){return e[t]=a}}function c(e,t,a,r){var n=t&&t.prototype instanceof b?t:b,i=Object.create(n.prototype),s=new N(r||[]);return o(i,"_invoke",{value:O(e,a,s)}),i}function p(e,t,a){try{return{type:"normal",arg:e.call(t,a)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var h="suspendedStart",f="suspendedYield",d="executing",k="completed",g={};function b(){}function m(){}function y(){}var v={};l(v,i,(function(){return this}));var w=Object.getPrototypeOf,z=w&&w(w(A([])));z&&z!==a&&r.call(z,i)&&(v=z);var j=y.prototype=b.prototype=Object.create(v);function S(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){function a(o,n,i,s){var u=p(e[o],e,n);if("throw"!==u.type){var l=u.arg,c=l.value;return c&&"object"==W(c)&&r.call(c,"__await")?t.resolve(c.__await).then((function(e){a("next",e,i,s)}),(function(e){a("throw",e,i,s)})):t.resolve(c).then((function(e){l.value=e,i(l)}),(function(e){return a("throw",e,i,s)}))}s(u.arg)}var n;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){a(e,r,t,o)}))}return n=n?n.then(o,o):o()}})}function O(t,a,r){var o=h;return function(n,i){if(o===d)throw Error("Generator is already running");if(o===k){if("throw"===n)throw i;return{value:e,done:!0}}for(r.method=n,r.arg=i;;){var s=r.delegate;if(s){var u=L(s,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===h)throw o=k,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=d;var l=p(t,a,r);if("normal"===l.type){if(o=r.done?k:f,l.arg===g)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(o=k,r.method="throw",r.arg=l.arg)}}}function L(t,a){var r=a.method,o=t.iterator[r];if(o===e)return a.delegate=null,"throw"===r&&t.iterator.return&&(a.method="return",a.arg=e,L(t,a),"throw"===a.method)||"return"!==r&&(a.method="throw",a.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var n=p(o,t.iterator,a.arg);if("throw"===n.type)return a.method="throw",a.arg=n.arg,a.delegate=null,g;var i=n.arg;return i?i.done?(a[t.resultName]=i.value,a.next=t.nextLoc,"return"!==a.method&&(a.method="next",a.arg=e),a.delegate=null,g):i:(a.method="throw",a.arg=new TypeError("iterator result is not an object"),a.delegate=null,g)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function A(t){if(t||""===t){var a=t[i];if(a)return a.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,n=function a(){for(;++o<t.length;)if(r.call(t,o))return a.value=t[o],a.done=!1,a;return a.value=e,a.done=!0,a};return n.next=n}}throw new TypeError(W(t)+" is not iterable")}return m.prototype=y,o(j,"constructor",{value:y,configurable:!0}),o(y,"constructor",{value:m,configurable:!0}),m.displayName=l(y,u,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===m||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,l(e,u,"GeneratorFunction")),e.prototype=Object.create(j),e},t.awrap=function(e){return{__await:e}},S(x.prototype),l(x.prototype,s,(function(){return this})),t.AsyncIterator=x,t.async=function(e,a,r,o,n){void 0===n&&(n=Promise);var i=new x(c(e,a,r,o),n);return t.isGeneratorFunction(a)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},S(j),l(j,u,"Generator"),l(j,i,(function(){return this})),l(j,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),a=[];for(var r in t)a.push(r);return a.reverse(),function e(){for(;a.length;){var r=a.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=A,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(E),!t)for(var a in this)"t"===a.charAt(0)&&r.call(this,a)&&!isNaN(+a.slice(1))&&(this[a]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var a=this;function o(r,o){return s.type="throw",s.arg=t,a.next=r,o&&(a.method="next",a.arg=e),!!o}for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],s=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(u&&l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var a=this.tryEntries.length-1;a>=0;--a){var o=this.tryEntries[a];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var n=o;break}}n&&("break"===e||"continue"===e)&&n.tryLoc<=t&&t<=n.finallyLoc&&(n=null);var i=n?n.completion:{};return i.type=e,i.arg=t,n?(this.method="next",this.next=n.finallyLoc,g):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var a=this.tryEntries[t];if(a.finallyLoc===e)return this.complete(a.completion,a.afterLoc),E(a),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var a=this.tryEntries[t];if(a.tryLoc===e){var r=a.completion;if("throw"===r.type){var o=r.arg;E(a)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,a,r){return this.delegate={iterator:A(t),resultName:a,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function I(e,t,a,r,o,n,i){try{var s=e[n](i),u=s.value}catch(e){return void a(e)}s.done?t(u):Promise.resolve(u).then(r,o)}function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var M=function(e){var t,a,r=(t=(0,T.useState)(null),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,o,n,i,s=[],u=!0,l=!1;try{if(n=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;u=!1}else for(;!(u=(r=n.call(a)).done)&&(s.push(r.value),s.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(t,a)||function(e,t){if(e){if("string"==typeof e)return G(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?G(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=r[0],n=r[1],i=new q(e),s=function(){var t,a=(t=C().mark((function t(a){return C().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new Promise((function(t){var r=i.checkProfanity(a);n(r),null!=e&&e.customActions&&e.customActions(r),t(r)})));case 1:case"end":return t.stop()}}),t)})),function(){var e=this,a=arguments;return new Promise((function(r,o){var n=t.apply(e,a);function i(e){I(n,r,o,i,s,"next",e)}function s(e){I(n,r,o,i,s,"throw",e)}i(void 0)}))});return function(e){return a.apply(this,arguments)}}();return{result:o,checkText:function(t){var a=i.checkProfanity(t);n(a),null!=e&&e.customActions&&e.customActions(a)},checkTextAsync:s}};return r})()));
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "glin-profanity",
|
|
3
|
-
"version": "1.1.
|
|
2
|
+
"name": "glin-profanity",
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Glin-Profanity is a lightweight and efficient npm package designed to detect and filter profane language in text inputs across multiple languages. Whether you’re building a chat application, a comment section, or any platform where user-generated content is involved, Glin-Profanity helps you maintain a clean and respectful environment.",
|
|
5
|
-
"main": "dist/index.js",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"test": "echo \"Error: no test specified\" && exit 1",
|
package/src/filters/Filter.ts
CHANGED
|
@@ -7,17 +7,29 @@ interface FilterConfig {
|
|
|
7
7
|
caseSensitive?: boolean;
|
|
8
8
|
wordBoundaries?: boolean;
|
|
9
9
|
customWords?: string[];
|
|
10
|
+
replaceWith?: string;
|
|
11
|
+
severityLevels?: boolean;
|
|
12
|
+
ignoreWords?: string[];
|
|
13
|
+
logProfanity?: boolean;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
16
|
class Filter {
|
|
13
|
-
private words:
|
|
17
|
+
private words: Map<string, number>;
|
|
14
18
|
private caseSensitive: boolean;
|
|
15
19
|
private wordBoundaries: boolean;
|
|
20
|
+
private replaceWith?: string;
|
|
21
|
+
private severityLevels: boolean;
|
|
22
|
+
private ignoreWords: Set<string>;
|
|
23
|
+
private logProfanity: boolean;
|
|
16
24
|
|
|
17
25
|
constructor(config?: FilterConfig) {
|
|
18
26
|
let words: string[] = [];
|
|
19
27
|
this.caseSensitive = config?.caseSensitive ?? false;
|
|
20
28
|
this.wordBoundaries = config?.wordBoundaries ?? true;
|
|
29
|
+
this.replaceWith = config?.replaceWith;
|
|
30
|
+
this.severityLevels = config?.severityLevels ?? false;
|
|
31
|
+
this.ignoreWords = new Set(config?.ignoreWords?.map(word => word.toLowerCase()) || []);
|
|
32
|
+
this.logProfanity = config?.logProfanity ?? false;
|
|
21
33
|
|
|
22
34
|
if (config?.allLanguages) {
|
|
23
35
|
for (const lang in dictionary) {
|
|
@@ -39,15 +51,18 @@ class Filter {
|
|
|
39
51
|
words = [...words, ...config.customWords];
|
|
40
52
|
}
|
|
41
53
|
|
|
42
|
-
this.words = new
|
|
54
|
+
this.words = new Map(words.map(word => [word, 1])); // Default severity level is 1
|
|
43
55
|
}
|
|
44
56
|
|
|
45
|
-
|
|
57
|
+
private getRegex(word: string): RegExp {
|
|
46
58
|
const flags = this.caseSensitive ? 'g' : 'gi';
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
const boundary = this.wordBoundaries ? '\\b' : '';
|
|
60
|
+
return new RegExp(`${boundary}${word.replace(/(\W)/g, '\\$1')}${boundary}`, flags);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
isProfane(value: string): boolean {
|
|
64
|
+
for (const word of this.words.keys()) {
|
|
65
|
+
if (!this.ignoreWords.has(word.toLowerCase()) && this.getRegex(word).test(value)) return true;
|
|
51
66
|
}
|
|
52
67
|
return false;
|
|
53
68
|
}
|
|
@@ -55,16 +70,31 @@ class Filter {
|
|
|
55
70
|
checkProfanity(text: string): CheckProfanityResult {
|
|
56
71
|
const words = text.split(/\s+/);
|
|
57
72
|
const profaneWords: string[] = [];
|
|
73
|
+
const severityMap: { [word: string]: number } = {};
|
|
58
74
|
|
|
59
|
-
for (const word of words) {
|
|
60
|
-
if (this.
|
|
75
|
+
for (const word of words) {
|
|
76
|
+
if (this.words.has(word.toLowerCase()) && !this.ignoreWords.has(word.toLowerCase())) {
|
|
61
77
|
profaneWords.push(word);
|
|
78
|
+
severityMap[word] = this.words.get(word.toLowerCase())!;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (this.logProfanity && profaneWords.length > 0) {
|
|
83
|
+
console.log(`Profane words detected: ${profaneWords.join(', ')}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let processedText = text;
|
|
87
|
+
if (this.replaceWith) {
|
|
88
|
+
for (const word of profaneWords) {
|
|
89
|
+
processedText = processedText.replace(this.getRegex(word), this.replaceWith);
|
|
62
90
|
}
|
|
63
91
|
}
|
|
64
92
|
|
|
65
93
|
return {
|
|
66
94
|
containsProfanity: profaneWords.length > 0,
|
|
67
95
|
profaneWords,
|
|
96
|
+
processedText: this.replaceWith ? processedText : undefined,
|
|
97
|
+
severityMap: this.severityLevels ? severityMap : undefined,
|
|
68
98
|
};
|
|
69
99
|
}
|
|
70
100
|
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
declare module 'glin-profanity' {
|
|
2
|
+
export type Language = 'english' | 'french' | 'spanish' | 'german' | 'italian' | 'portuguese' | 'russian' | 'japanese' | 'chinese' | 'korean';
|
|
3
|
+
|
|
4
|
+
export interface CheckProfanityResult {
|
|
5
|
+
containsProfanity: boolean;
|
|
6
|
+
profaneWords: string[];
|
|
7
|
+
processedText?: string;
|
|
8
|
+
severityMap?: { [word: string]: number };
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ProfanityCheckerConfig {
|
|
12
|
+
languages?: Language[];
|
|
13
|
+
allLanguages?: boolean;
|
|
14
|
+
caseSensitive?: boolean;
|
|
15
|
+
wordBoundaries?: boolean;
|
|
16
|
+
customWords?: string[];
|
|
17
|
+
replaceWith?: string;
|
|
18
|
+
severityLevels?: boolean;
|
|
19
|
+
ignoreWords?: string[];
|
|
20
|
+
logProfanity?: boolean;
|
|
21
|
+
customActions?: (result: CheckProfanityResult) => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class Filter {
|
|
25
|
+
constructor(config?: ProfanityCheckerConfig);
|
|
26
|
+
isProfane(value: string): boolean;
|
|
27
|
+
checkProfanity(text: string): CheckProfanityResult;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function useProfanityChecker(config?: ProfanityCheckerConfig): {
|
|
31
|
+
result: CheckProfanityResult | null;
|
|
32
|
+
checkText: (text: string) => void;
|
|
33
|
+
checkTextAsync: (text: string) => Promise<CheckProfanityResult>;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|