2024-06-30 15:41:22 -04:00
/ *
* Vencord , a modification for Discord ' s desktop app
2024-06-30 15:51:24 -04:00
* Copyright ( c ) 2024 nin0dev
2024-06-30 15:41:22 -04:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https : //www.gnu.org/licenses/>.
* /
import { addPreSendListener , removePreSendListener } from "@api/MessageEvents" ;
2024-09-02 17:22:26 -04:00
import { definePluginSettings } from "@api/Settings" ;
2024-06-30 15:51:24 -04:00
import { Devs } from "@utils/constants" ;
2024-09-02 17:22:26 -04:00
import definePlugin , { OptionType } from "@utils/types" ;
import { FluxDispatcher } from "@webpack/common" ;
2024-06-30 15:41:22 -04:00
2024-09-02 17:22:26 -04:00
/** * SEXUAL ***/
const badVerbsSexual = [ "fuck" , "cum" ] ;
const badNounsSexual = [ "cunt" , "yuri" , "whore" , "dick" , "pussy" , "slut" , "tit" , "cum" , "cock" , "blowjob" , "sex" , "ass" , "furry" , "bewbs" , "boob" , "booba" , "boobies" , "boobs" , "booby" , "porn" , "pron" , "pronhub" , "r34" , "rape" , "raped" , "raping" , "rapist" ] ;
/** * FURRY ***/
const badNounsFurry = [ "meow" , "miau" , "mreow" , "mrow" , "woof" , "nya" , ":pleading_catgirl" , "purr" ] ;
const badRegexesFurry = [ "mr*eo*w+, mr+p, nya+, mrow+, purr+" ] ;
/** * BRAINROT ***/
2024-09-07 05:36:06 -04:00
const badNounsBrainrot = [ "mewing" , "mew" , "skibidi" , "gyat" , "gyatt" , "rizzler" , "nettspend" , "boykisser" , "ohio" , "rizz" ] ;
2024-09-02 17:22:26 -04:00
/** * SLURS ***/
2024-09-07 05:38:46 -04:00
const badNounsSlurs = [ "retard" , "faggot" , "fag" , "faggots" , "fags" , "retards" , "n*g" , "n*gg*" , "n*gg*r" ] ;
2024-09-02 17:22:26 -04:00
const badRegexesSlurs = [ "\\bn{1,}(i|!|1){1,}(b|g){2,}(a|@|e|3){1,}?" ] ;
/** * GENERAL ***/
const badVerbsGeneral = [ "kill" , "destroy" ] ;
const badNounsGeneral = [ "shit" , "bullshit" , "bitch" , "bastard" , "die" , "brainless" ] ;
/** * FUN ***/
const badNounsFun = [ "kotlin" , "avast" ] ;
/** * REPLACEMENTS ***/
2024-06-30 15:41:22 -04:00
const badVerbsReplacements = [ "love" , "eat" , "deconstruct" , "marry" , "fart" , "teach" , "display" , "plug" , "explode" , "undress" , "finish" , "freeze" , "beat" , "free" , "brush" , "allocate" , "date" , "melt" , "breed" , "educate" , "injure" , "change" ] ;
2024-07-02 17:53:47 -04:00
const badNounsReplacements = [ "pasta" , "kebab" , "cake" , "potato" , "woman" , "computer" , "java" , "hamburger" , "monster truck" , "osu!" , "Ukrainian ball in search of gas game" , "Anime" , "Anime girl" , "good" , "keyboard" , "NVIDIA RTX 3090 Graphics Card" , "storm" , "queen" , "single" , "umbrella" , "mosque" , "physics" , "bath" , "virus" , "bathroom" , "mom" , "owner" , "airport" , "Avast Antivirus Free" ] ;
2024-06-30 15:41:22 -04:00
export default definePlugin ( {
name : "GoodPerson" ,
2024-09-02 17:22:26 -04:00
description : "Makes you (or others) a good person" ,
authors : [ Devs . nin0dev , Devs . mantikafasi ] ,
2024-06-30 15:41:22 -04:00
dependencies : [ "MessageEventsAPI" ] ,
2024-09-02 17:22:26 -04:00
settings : definePluginSettings ( {
incoming : {
type : OptionType . BOOLEAN ,
description : "Filter incoming messages" ,
default : true
} ,
blockSexual : {
type : OptionType . BOOLEAN ,
description : "Block sexual words/hornyspeak" ,
default : true
} ,
blockFurryspeak : {
type : OptionType . BOOLEAN ,
description : "Block furryspeak/meowing" ,
default : true
} ,
blockBrainrot : {
type : OptionType . BOOLEAN ,
description : "Block things commonly said by Gen Alpha children" ,
default : true
} ,
blockSlurs : {
type : OptionType . BOOLEAN ,
description : "Block targeted slurs" ,
default : true
} ,
blockInsults : {
type : OptionType . BOOLEAN ,
description : "Block more general insults" ,
default : true
} ,
blockOthers : {
type : OptionType . BOOLEAN ,
description : "Block words mantikafasi personally dislikes" ,
default : true
}
} ) ,
2024-06-30 15:41:22 -04:00
async start() {
2024-09-02 17:22:26 -04:00
this . preSend = addPreSendListener ( ( _channelId , msg ) = > {
const newContent = this . replaceBadVerbs ( this . replaceBadNouns ( msg . content ) ) ;
2024-06-30 15:41:22 -04:00
msg . content = newContent ;
} ) ;
} ,
stop() {
removePreSendListener ( this . preSend ) ;
2024-09-02 17:22:26 -04:00
} ,
getEnabledBadNouns() {
const thingToReturn : string [ ] = [ ] ;
if ( this . settings . store . blockBrainrot ) thingToReturn . push ( . . . badNounsBrainrot ) ;
if ( this . settings . store . blockFurryspeak ) thingToReturn . push ( . . . badNounsFurry ) ;
if ( this . settings . store . blockInsults ) thingToReturn . push ( . . . badNounsGeneral ) ;
if ( this . settings . store . blockOthers ) thingToReturn . push ( . . . badNounsFun ) ;
if ( this . settings . store . blockSexual ) thingToReturn . push ( . . . badNounsSexual ) ;
if ( this . settings . store . blockSlurs ) thingToReturn . push ( . . . badNounsSlurs ) ;
return thingToReturn ;
} ,
getEnabledBadVerbs() {
const thingToReturn : string [ ] = [ ] ;
if ( this . settings . store . blockSexual ) thingToReturn . push ( . . . badVerbsSexual ) ;
if ( this . settings . store . blockInsults ) thingToReturn . push ( . . . badVerbsGeneral ) ;
return thingToReturn ;
} ,
replaceBadNouns ( content ) {
const regex = new RegExp ( "\\b(" + this . getEnabledBadNouns ( ) . join ( "|" ) + ")\\b" , "gi" ) ;
return content . replace ( regex , function ( match ) {
const randomIndex = Math . floor ( Math . random ( ) * badNounsReplacements . length ) ;
return badNounsReplacements [ randomIndex ] ;
} ) ;
} ,
replaceBadVerbs ( content ) {
const regex = new RegExp ( "\\b(" + this . getEnabledBadVerbs ( ) . join ( "|" ) + ")\\b" , "gi" ) ;
return content . replace ( regex , function ( match ) {
const randomIndex = Math . floor ( Math . random ( ) * badVerbsReplacements . length ) ;
return badVerbsReplacements [ randomIndex ] ;
} ) ;
} ,
flux : {
async MESSAGE_CREATE
( { guildId , message } ) {
const msg = message ;
// @ts-ignore
let newMessageContent = Vencord . Plugins . plugins . GoodPerson . replaceBadVerbs ( Vencord . Plugins . plugins . GoodPerson . replaceBadNouns ( msg . content ) ) ;
if ( message . content !== newMessageContent ) {
newMessageContent += "\n-# <:husk:1280158956341297225> **GoodPerson made this message good. Reload your client to clear changes**" ;
msg . content = newMessageContent ;
FluxDispatcher . dispatch ( {
type : "MESSAGE_UPDATE" ,
message : msg ,
guildId
} ) ;
}
} ,
async MESSAGE_UPDATE
( { guildId , message } ) {
const msg = message ;
// @ts-ignore
let newMessageContent = Vencord . Plugins . plugins . GoodPerson . replaceBadVerbs ( Vencord . Plugins . plugins . GoodPerson . replaceBadNouns ( msg . content ) ) ;
if ( message . content !== newMessageContent ) {
newMessageContent += "\n-# <:husk:1280158956341297225> **GoodPerson made this message good. Reload your client to clear changes**" ;
msg . content = newMessageContent ;
FluxDispatcher . dispatch ( {
type : "MESSAGE_UPDATE" ,
message : msg ,
guildId
} ) ;
}
}
2024-06-30 15:41:22 -04:00
}
2024-09-02 17:22:26 -04:00
} ) ;