2023-09-22 17:01:30 +00:00
|
|
|
import re
|
|
|
|
from .config.const import *
|
|
|
|
|
|
|
|
tranny = f'<img loading="lazy" data-bs-toggle="tooltip" alt=":marseytrain:" title=":marseytrain:" src="{SITE_FULL_IMAGES}/e/marseytrain.webp">'
|
|
|
|
trannie = f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!marseytrain:" title=":!marseytrain:" src="{SITE_FULL_IMAGES}/e/marseytrain.webp">'
|
|
|
|
troon = f'<img loading="lazy" data-bs-toggle="tooltip" alt=":marseytrain2:" title=":marseytrain2:" src="{SITE_FULL_IMAGES}/e/marseytrain2.webp">'
|
|
|
|
|
|
|
|
SLURS = {
|
|
|
|
"tranny": tranny,
|
|
|
|
"trannie": trannie,
|
|
|
|
"troon": troon,
|
|
|
|
"(?<!\\bs)nigger": "BIPOC",
|
|
|
|
"negroid": "BIPOC",
|
|
|
|
"nignog": "BIPOC",
|
|
|
|
"nig nog": "BIPOC",
|
|
|
|
"niglet": 'BIPOClet',
|
|
|
|
"negress": "BIPOCette",
|
|
|
|
"faggot": "cute twink",
|
|
|
|
"fag": "strag",
|
|
|
|
"(?<!\w)spic(?!\w)": "hard-working American",
|
|
|
|
"(?<!\w)spics(?!\w)": "hard-working Americans",
|
|
|
|
"kike": "jewish chad",
|
|
|
|
"(?<!\w)heeb": "jewish chad",
|
|
|
|
"daisy's destruction": "Cars 2",
|
|
|
|
"daisys destruction": "Cars 2",
|
|
|
|
"daisy destruction": "Cars 2",
|
|
|
|
"pajeet": "sexy Indian dude",
|
|
|
|
"hunter2": "*******",
|
|
|
|
"dyke": "cute butch",
|
|
|
|
}
|
|
|
|
|
|
|
|
if SITE_NAME == 'rDrama':
|
|
|
|
SLURS |= {
|
|
|
|
"retarded": "r-slurred",
|
|
|
|
"retard": "r-slur",
|
|
|
|
"pedophile": "p-dophile",
|
|
|
|
"kill youself": "keep yourself safe",
|
|
|
|
"kill yourself": "keep yourself safe",
|
|
|
|
"kill yourselves": "keep yourselves safe",
|
|
|
|
"latinos": "latinx",
|
|
|
|
"latino": "latinx",
|
|
|
|
"latinas": "latinx",
|
|
|
|
"latina": "latinx",
|
|
|
|
"hispanics": "latinx",
|
|
|
|
"hispanic": "latinx",
|
|
|
|
"autistic": "neurodivergent",
|
|
|
|
"gamer": "g*mer",
|
|
|
|
"journalist": "journ*list",
|
|
|
|
"journalism": "journ*lism",
|
|
|
|
"fake and gay": "fake and straight",
|
|
|
|
"(?<!\w)rapist": "male feminist",
|
|
|
|
"(?<!\w)pedo(?!\w)": "p-do",
|
2023-09-26 16:53:37 +00:00
|
|
|
"(?<!\w)kys(?!\w)": "keep yourself safe",
|
2023-09-22 17:01:30 +00:00
|
|
|
"republican": 'rethuglican',
|
|
|
|
"america": 'ameriKKKa',
|
|
|
|
"it's almost as if": "I'm an r-slur but",
|
|
|
|
"it's almost like": "I'm an r-slur but",
|
|
|
|
"its almost as if": "I'm an r-slur but",
|
|
|
|
"its almost like": "I'm an r-slur but",
|
|
|
|
"my brother in christ": "my brother in Allah (ï·»)",
|
2023-09-29 20:56:47 +00:00
|
|
|
"(?<!\w)cool (?!(it|down|off))": "fetch ",
|
2023-10-03 06:44:53 +00:00
|
|
|
"(?<!\w)cool(?![\w ])": "fetch",
|
2023-09-22 17:01:30 +00:00
|
|
|
"krayon(?! \()": "krayon (sister toucher)",
|
|
|
|
"discord": "groomercord",
|
|
|
|
"allah(?! \()": "Allah (ï·»)",
|
|
|
|
"my wife(?! \()": "my wife (male)",
|
|
|
|
"(?<!cow )tools(?!\w)": "cow tools",
|
|
|
|
"explain": "mansplain",
|
|
|
|
'nigga': 'neighbor',
|
|
|
|
'(?<![\w.])cat(?!\w)': 'marsey',
|
|
|
|
'(?<!\w)cats(?!\w)': 'marseys',
|
|
|
|
'hello': 'hecko',
|
|
|
|
'ryan gosling': 'literally me',
|
|
|
|
'howdy': 'meowdy',
|
|
|
|
'corgi': 'klenny',
|
|
|
|
"right now": "right meow",
|
|
|
|
"(?<!\/)linux": "GNU/Linux",
|
|
|
|
'(?<!-)based': 'keyed',
|
|
|
|
'needful': 'sneedful',
|
2023-09-27 22:22:51 +00:00
|
|
|
'think tank': 'twink tank',
|
2023-09-22 17:01:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
PROFANITIES = {
|
|
|
|
'motherfucker': 'motherlover',
|
|
|
|
'fuck': 'frick',
|
|
|
|
'(?<!\w)ass(?!\w)': 'butt',
|
|
|
|
'shitting': 'pooping',
|
|
|
|
'damn': 'darn',
|
|
|
|
'bitch(?!\w)': 'b-word',
|
|
|
|
'toilet': 'potty',
|
|
|
|
'(?<!\w)asshole': 'butthole',
|
|
|
|
'(?<!\w)rape': 'r*pe',
|
|
|
|
'(?<!\w)hell(?!\w)': 'heck',
|
|
|
|
'(?<!\w)sex(?!\w)': 's*x',
|
|
|
|
'(?<!\w)cum(?!\w)': 'c*m',
|
|
|
|
'(?<!\w)dick': 'peepee',
|
|
|
|
'cock(?!\w)': 'peepee',
|
|
|
|
'cocks': 'peepees',
|
|
|
|
'penis': 'peepee',
|
|
|
|
'pussy': 'kitty',
|
|
|
|
'pussies': 'kitties',
|
|
|
|
'cunt': 'c*nt',
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
slur_single_words = "|".join([slur.lower() for slur in SLURS.keys()])
|
|
|
|
profanity_single_words = "|".join([profanity.lower() for profanity in PROFANITIES.keys()])
|
|
|
|
slur_regex = re.compile(f"<[^>]*>|{slur_single_words}", flags=re.I|re.A)
|
|
|
|
profanity_regex = re.compile(f"<[^>]*>|{profanity_single_words}", flags=re.I|re.A)
|
|
|
|
|
|
|
|
SLURS_FOR_REPLACING = {}
|
|
|
|
for k, val in SLURS.items():
|
|
|
|
newkey = k.split('(?!')[0]
|
|
|
|
if ')' in newkey:
|
|
|
|
newkey = newkey.split(')')[1]
|
|
|
|
SLURS_FOR_REPLACING[newkey] = val
|
|
|
|
|
|
|
|
PROFANITIES_FOR_REPLACING = {}
|
|
|
|
for k, val in PROFANITIES.items():
|
|
|
|
newkey = k.split('(?!')[0]
|
|
|
|
if ')' in newkey:
|
|
|
|
newkey = newkey.split(')')[1]
|
|
|
|
PROFANITIES_FOR_REPLACING[newkey] = val
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def sub_matcher(match, X_FOR_REPLACING):
|
|
|
|
group_num = 0
|
|
|
|
match_str = match.group(group_num)
|
|
|
|
if match_str.startswith('<'):
|
|
|
|
return match_str
|
|
|
|
else:
|
2023-09-22 17:06:13 +00:00
|
|
|
repl = X_FOR_REPLACING[match_str.lower()]
|
2023-09-24 22:32:31 +00:00
|
|
|
if "<img" not in repl:
|
|
|
|
if match_str.isupper():
|
|
|
|
return repl.upper()
|
2023-09-29 01:39:16 +00:00
|
|
|
if match_str[0].isupper():
|
2023-09-29 21:27:55 +00:00
|
|
|
return repl[0].upper() + repl[1:]
|
2023-09-22 17:01:30 +00:00
|
|
|
return repl
|
|
|
|
|
|
|
|
def sub_matcher_slurs(match):
|
|
|
|
return sub_matcher(match, SLURS_FOR_REPLACING)
|
|
|
|
|
|
|
|
def sub_matcher_profanities(match):
|
|
|
|
return sub_matcher(match, PROFANITIES_FOR_REPLACING)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-26 15:37:07 +00:00
|
|
|
def censor_slurs_profanities(body, logged_user, is_plain=False):
|
2023-09-22 17:01:30 +00:00
|
|
|
if not body: return ""
|
|
|
|
|
|
|
|
if '<pre>' in body or '<code>' in body:
|
|
|
|
return body
|
|
|
|
|
|
|
|
if not logged_user or logged_user == 'chat' or logged_user.slurreplacer:
|
|
|
|
body = slur_regex.sub(sub_matcher_slurs, body)
|
|
|
|
|
|
|
|
if SITE_NAME == 'rDrama':
|
|
|
|
if not logged_user or logged_user == 'chat' or logged_user.profanityreplacer:
|
|
|
|
body = profanity_regex.sub(sub_matcher_profanities, body)
|
|
|
|
|
2023-09-26 15:37:07 +00:00
|
|
|
if is_plain:
|
|
|
|
body = body.replace(tranny, ':marseytrain:')
|
|
|
|
body = body.replace(trannie, ':!marseytrain:')
|
|
|
|
body = body.replace(troon, ':marseytrain2:')
|
|
|
|
|
2023-09-22 17:01:30 +00:00
|
|
|
return body
|