Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 38 additions & 7 deletions badword.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ function RegexMatch(word, regex) {
return false;
};


function escapeRegExp(strings){
let data = strings.trim().toLowerCase().split("|").filter(Boolean);
for (let index = 0; index < data.length; index++) {
Expand Down Expand Up @@ -112,15 +113,43 @@ constructor(text = "", customFilter="", customSubFilter=""){

this._text = text;

this._filt = /b[a4][s5]hfu[l1][l1]|k[i1][l1][l1]|fuck[*]?|dr[uo]g[*]?|d[i1]ck[*]?|[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|fk/gi;

this._subfilter = /[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|[s5]uck[*]?|m[o0]th[e3]r[*]?|m[o0]m[*]?|d[o0]g[*]?|l[o0]w[*]?|s[e3]x[*]?/gi;
this._filt = /b[a4][s5]hfu[l1][l1]|[8b]r[e3][a4][s5]t|[b8][o0][o0][b8]|k[i1][l1][l1]|fuck[*]?|dr[uo]g[*]?|d[i1]ck[*]?|[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|fk/gi;
this._subfilter = /[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|[s5]uck[*]?|m[o0]th[e3]r[*]?|m[o0]m[*]?|d[o0]g[*]?|l[o0]w[*]?|s[e3]x[*]?|[8b]r[e3][a4][s5]t/gi;

if (customFilter.length>3){
this._filt = new RegExp(this._filt.source+"|"+escapeRegExp(customFilter), "gi");
};
if (customSubFilter.length>3){
this._subfilter = new RegExp(this._subfilter.source+"|"+escapeRegExp(customSubFilter), "gi");
};

//mapping emoji
this.__emoji = new RegExp([
'😈', // Sering digunakan untuk menunjukkan niat nakal atau licik.
'👿', // Menunjukkan sifat jahat, sering digunakan dalam konteks humor atau kejahatan.
'🍆', // Sering digunakan secara seksual, merujuk pada bentuknya yang mirip dengan organ genital pria.
'🍑', // Sering digunakan secara seksual, merujuk pada bentuknya yang mirip dengan bokong.
'🐄', // Sering diplesetkan dengan wanita,
'🐐', // Sering diplesetkan dengan wanita atau pria.
'🍋', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🌈', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🏳️‍🌈', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🍉', // Sering diplesetkan dengan ukuran dada wanita.
'💦', // Bisa merujuk pada aktivitas seksual, sering digunakan untuk menunjukkan keringat atau air.
'😍', // Menunjukkan cinta atau ketertarikan yang mendalam.
'🥵', // Bisa merujuk pada ketertarikan fisik atau merasa terlalu panas.
'🤤', // Bisa merujuk pada keinginan seksual atau ketertarikan yang kuat.
'🥥', // Menunjukkan pakaian dalam atau ukuran dada wanita.
'👙', // Menunjukkan pakaian dalam wanita, sering digunakan dalam konteks mode atau kolam renang.
'💣', // Menunjukkan ledakan atau kekerasan, bisa digunakan dalam konteks drama atau peringatan.
'🔪', // Menunjukkan kekerasan, sering digunakan dalam konteks ancaman atau agresi.
'🔫', // Menunjukkan senjata api, sering digunakan dalam konteks kekerasan atau ancaman.
'⚔️', // Menunjukkan pertarungan atau konflik, sering digunakan dalam konteks sejarah atau fantasi.
'💥', // Menunjukkan kekuatan atau dampak, bisa merujuk pada situasi dramatis atau kekerasan.
'🔨', // Sering digunakan dalam konteks konstruksi atau kekerasan, bisa menunjukkan agresi.
'🖕' // Menunjukkan penghinaan atau ketidaksenangan, sering dianggap sebagai gesture kasar.
].join("|"), "gi");

this.__subtxic = [];
this._st = false;
}
Expand Down Expand Up @@ -390,10 +419,13 @@ set ['thisToxic'](key){
['clean'](position){

var word;

if ((position || this.__subtxic) && this.__emoji.test(this._text) && this._st) {
this._text = this._text.replace(this.__emoji, "*");
};

word = this._text.split(" ");


position.forEach( number => {

const get_word = this.constructor.getboundPosition(this._text.toString() , number);
Expand Down Expand Up @@ -528,7 +560,6 @@ const exportsObject = {


// Ekspor ke lingkungan yang sesuai
//isNode ? module.exports = exportsObject : Object.assign(window, exportsObject);
if (isNode) {
// Jika di Node.js, gunakan module.exports
module.exports = exportsObject;
Expand All @@ -541,5 +572,5 @@ if (isNode) {
} else {
// Jika tidak mendukung ES Modules, gunakan Object.assign
Object.assign(window, exportsObject);
}
}
};
};
61 changes: 43 additions & 18 deletions badword.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
*/



function RegexMatch(word: string, regex: RegExp): boolean {
const words = word.trim();
const barisdata: string[] = [];
Expand Down Expand Up @@ -111,21 +110,48 @@ class FilterBadWord {
protected _text: string;
protected _filt: RegExp;
protected _subfilter: RegExp;
protected __emoji: RegExp;
protected __subtxic: [string, string][];
protected _st: boolean;

constructor(text: string = "", customFilter: string = "", customSubFilter: string = "") {
this._text = text;
this._filt = /b[a4][s5]hfu[l1][l1]|k[i1][l1][l1]|fuck[*]?|dr[uo]g[*]?|d[i1]ck[*]?|[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|fk/gi;
this._subfilter = /[a4][s5][s5]|[l1][i1]p|pu[s5][s5]y[*]?|[s5]uck[*]?|m[o0]th[e3]r[*]?|m[o0]m[*]?|d[o0]g[*]?|l[o0]w[*]?|s[e3]x[*]?/gi;

if (customFilter.length > 3) {
this._filt = new RegExp(this._filt.source + "|" + escapeRegExp(customFilter), "gi");
this._filt = new RegExp(this._filt.source + "|" + escapeRegExp(customFilter), "gi");
}

if (customSubFilter.length > 3) {
this._subfilter = new RegExp(this._subfilter.source + "|" + escapeRegExp(customSubFilter), "gi");
this._subfilter = new RegExp(this._subfilter.source + "|" + escapeRegExp(customSubFilter), "gi");
}

this.__emoji = new RegExp([
'😈', // Sering digunakan untuk menunjukkan niat nakal atau licik.
'👿', // Menunjukkan sifat jahat, sering digunakan dalam konteks humor atau kejahatan.
'🍆', // Sering digunakan secara seksual, merujuk pada bentuknya yang mirip dengan organ genital pria.
'🍑', // Sering digunakan secara seksual, merujuk pada bentuknya yang mirip dengan bokong.
'🐄', // Sering diplesetkan dengan wanita,
'🐐', // Sering diplesetkan dengan wanita atau pria.
'🍋', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🌈', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🏳️‍🌈', // Sering digunakan secara seksual, merujuk pada hubungan sesama jenis.
'🍉', // Sering diplesetkan dengan ukuran dada wanita.
'💦', // Bisa merujuk pada aktivitas seksual, sering digunakan untuk menunjukkan keringat atau air.
'😍', // Menunjukkan cinta atau ketertarikan yang mendalam.
'🥵', // Bisa merujuk pada ketertarikan fisik atau merasa terlalu panas.
'🤤', // Bisa merujuk pada keinginan seksual atau ketertarikan yang kuat.
'🥥', // Menunjukkan pakaian dalam atau ukuran dada wanita.
'👙', // Menunjukkan pakaian dalam wanita, sering digunakan dalam konteks mode atau kolam renang.
'💣', // Menunjukkan ledakan atau kekerasan, bisa digunakan dalam konteks drama atau peringatan.
'🔪', // Menunjukkan kekerasan, sering digunakan dalam konteks ancaman atau agresi.
'🔫', // Menunjukkan senjata api, sering digunakan dalam konteks kekerasan atau ancaman.
'⚔️', // Menunjukkan pertarungan atau konflik, sering digunakan dalam konteks sejarah atau fantasi.
'💥', // Menunjukkan kekuatan atau dampak, bisa merujuk pada situasi dramatis atau kekerasan.
'🔨', // Sering digunakan dalam konteks konstruksi atau kekerasan, bisa menunjukkan agresi.
'🖕' // Menunjukkan penghinaan atau ketidaksenangan, sering dianggap sebagai gesture kasar.
].join("|"), "gi");

this.__subtxic = [];
this._st = false;
Expand Down Expand Up @@ -171,16 +197,6 @@ class FilterBadWord {

if (check.length > 0) {
const word = this._text.toLowerCase();
function before_str(number , key){

return word.substring(number, word.indexOf(key));//nomer dan keyword

};

function after_str(w, spec){
let data =word.substring( word.indexOf(w), spec.length+word.length );
return data.replace(w, "").trim(); //, word.indexOf(spec));
};

for (const index of check) {
const word_s = this.getBoundPosition(this._text.toLowerCase(), index);
Expand Down Expand Up @@ -230,12 +246,15 @@ class FilterBadWord {
}

public clean(position: number[]): string {
if ((position || this.__subtxic) && this.__emoji.test(this._text) && this._st) {
this._text = this._text.replace(this.__emoji, "*");
};

let words = this._text.split(" ");
const sensor = "*";


position.forEach((number) => {
const getWord = this.getBoundPosition(this._text, number);
words = words.map(word => word.replace(getWord, sensor.repeat(getWord.length)));
const getWord = this.getBoundPosition(this._text, number);
words = words.map(word => word.replace(getWord, "*".repeat(getWord.length)));
});
this.__subtxic.forEach(([oldWord, newWord]) => {
words = words.map(word => {
Expand All @@ -250,6 +269,12 @@ class FilterBadWord {
class filters_badword extends FilterBadWord {
protected _cl: boolean;
protected _st: boolean;

constructor() {
super(); // Memanggil konstruktor kelas induk
this._cl = true; // Inisialisasi properti cl
this._st = true; // Inisialisasi properti st
}

public text_o(text: string): void {
this._text = text.toString();
Expand Down
18 changes: 18 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "./",
"rootDir": "./",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"declaration": true
},
"include": [
"*.ts"
],
"exclude": [
"node_modules"
]
}