611 lines
27 KiB
Python
611 lines
27 KiB
Python
from os import environ, listdir
|
||
import re
|
||
from copy import deepcopy
|
||
from json import loads
|
||
from files.__main__ import db_session
|
||
from files.classes.sub import Sub
|
||
from files.classes.marsey import Marsey
|
||
from flask import request
|
||
|
||
SITE = environ.get("DOMAIN", '').strip()
|
||
SITE_ID = environ.get("SITE_ID", '').strip()
|
||
SITE_TITLE = environ.get("SITE_TITLE", '').strip()
|
||
if "localhost" in SITE: SITE_FULL = 'http://' + SITE
|
||
else: SITE_FULL = 'https://' + SITE
|
||
|
||
|
||
CC = "COUNTRY CLUB"
|
||
CC_TITLE = CC.title()
|
||
|
||
AJ_REPLACEMENTS = {
|
||
' your ': " you're ",
|
||
' to ': " too ",
|
||
|
||
' Your ': " You're ",
|
||
' To ': " Too ",
|
||
|
||
' YOUR ': " YOU'RE ",
|
||
' TO ': " TOO ",
|
||
}
|
||
|
||
SLURS = {
|
||
}
|
||
|
||
single_words = "|".join([slur.lower() for slur in SLURS.keys()])
|
||
|
||
|
||
NOTIFICATIONS_ID = 1
|
||
AUTOJANNY_ID = 2
|
||
SNAPPY_ID = 3
|
||
LONGPOSTBOT_ID = 4
|
||
ZOZBOT_ID = 5
|
||
AUTOPOLLER_ID = 6
|
||
AUTOBETTER_ID = 7
|
||
AUTOCHOICE_ID = 8
|
||
BASEDBOT_ID = 0
|
||
|
||
A_ID = 0
|
||
KIPPY_ID = 0
|
||
GIFT_NOTIF_ID = 9
|
||
PIZZASHILL_ID = 0
|
||
PIZZA_VOTERS = ()
|
||
IDIO_ID = 0
|
||
CARP_ID = 0
|
||
JOAN_ID = 0
|
||
MOOSE_ID = 0
|
||
AEVANN_ID = 9
|
||
HOMO_ID = 0
|
||
SOREN_ID = 0
|
||
Q_ID = 0
|
||
LAWLZ_ID = 0
|
||
LLM_ID = 0
|
||
DAD_ID = 0
|
||
MOM_ID = 0
|
||
DONGER_ID = 0
|
||
BUG_THREAD = 0
|
||
WELCOME_MSG = f"Welcome to {SITE_TITLE}! Please read [the rules](/rules) first. Then [read some of our current conversations](/) and feel free to comment or post!\n\nWe encourage people to comment even if they aren't sure they fit in; as long as your comment follows [community rules](/rules), we are happy to have posters from all backgrounds, education levels, and specialties."
|
||
ROLES={}
|
||
|
||
IMGUR_KEY = environ.get("IMGUR_KEY").strip()
|
||
PUSHER_ID = environ.get("PUSHER_ID", "").strip()
|
||
PUSHER_KEY = environ.get("PUSHER_KEY", "").strip()
|
||
DEFAULT_COLOR = environ.get("DEFAULT_COLOR", "fff").strip()
|
||
COLORS = {'ff66ac','805ad5','62ca56','38a169','80ffff','2a96f3','eb4963','ff0000','f39731','30409f','3e98a7','e4432d','7b9ae4','ec72de','7f8fa6', 'f8db58','8cdbe6', DEFAULT_COLOR}
|
||
|
||
AWARDS = {
|
||
"ghost": {
|
||
"kind": "ghost",
|
||
"title": "Ghost",
|
||
"description": "???",
|
||
"icon": "fas fa-ghost",
|
||
"color": "text-white",
|
||
"price": 3000
|
||
},
|
||
"nword": {
|
||
"kind": "nword",
|
||
"title": "Nword Pass",
|
||
"description": "???",
|
||
"icon": "fas fa-edit",
|
||
"color": "text-success",
|
||
"price": 10000
|
||
},
|
||
"snow": {
|
||
"kind": "snow",
|
||
"title": "Snow",
|
||
"description": "???",
|
||
"icon": "fas fa-snowflake",
|
||
"color": "text-blue-200",
|
||
"price": 300
|
||
},
|
||
"gingerbread": {
|
||
"kind": "gingerbread",
|
||
"title": "Gingerbread",
|
||
"description": "???",
|
||
"icon": "fas fa-gingerbread-man",
|
||
"color": "",
|
||
"price": 300
|
||
},
|
||
"lights": {
|
||
"kind": "lights",
|
||
"title": "Lights",
|
||
"description": "???",
|
||
"icon": "fas fa-lights-holiday",
|
||
"color": "",
|
||
"price": 300
|
||
},
|
||
"candycane": {
|
||
"kind": "candycane",
|
||
"title": "Candy Cane",
|
||
"description": "???",
|
||
"icon": "fas fa-candy-cane",
|
||
"color": "",
|
||
"price": 400
|
||
},
|
||
"fireplace": {
|
||
"kind": "fireplace",
|
||
"title": "Fireplace",
|
||
"description": "???",
|
||
"icon": "fas fa-fireplace",
|
||
"color": "",
|
||
"price": 600
|
||
},
|
||
"grinch": {
|
||
"kind": "grinch",
|
||
"title": "Grinch",
|
||
"description": "???",
|
||
"icon": "fas fa-angry",
|
||
"color": "text-green-500",
|
||
"price": 1000
|
||
},
|
||
"haunt": {
|
||
"kind": "haunt",
|
||
"title": "Haunt",
|
||
"description": "???",
|
||
"icon": "fas fa-book-dead",
|
||
"color": "text-warning",
|
||
"price": 500
|
||
},
|
||
"upsidedown": {
|
||
"kind": "upsidedown",
|
||
"title": "The Upside Down",
|
||
"description": "???",
|
||
"icon": "fas fa-lights-holiday",
|
||
"color": "",
|
||
"price": 400
|
||
},
|
||
"stab": {
|
||
"kind": "stab",
|
||
"title": "Stab",
|
||
"description": "???",
|
||
"icon": "fas fa-knife-kitchen",
|
||
"color": "text-danger",
|
||
"price": 300
|
||
},
|
||
"spiders": {
|
||
"kind": "spiders",
|
||
"title": "Spiders",
|
||
"description": "???",
|
||
"icon": "fas fa-spider",
|
||
"color": "text-black",
|
||
"price": 200
|
||
},
|
||
"fog": {
|
||
"kind": "fog",
|
||
"title": "Fog",
|
||
"description": "???",
|
||
"icon": "fas fa-smoke",
|
||
"color": "text-gray",
|
||
"price": 200
|
||
},
|
||
"lootbox": {
|
||
"kind": "lootbox",
|
||
"title": "Lootstocking",
|
||
"description": "???",
|
||
"icon": "fas fa-stocking",
|
||
"color": "text-danger",
|
||
"price": 1000
|
||
},
|
||
"shit": {
|
||
"kind": "shit",
|
||
"title": "Shit",
|
||
"description": "Makes flies swarm the post.",
|
||
"icon": "fas fa-poop",
|
||
"color": "text-black-50",
|
||
"price": 300
|
||
},
|
||
"fireflies": {
|
||
"kind": "fireflies",
|
||
"title": "Fireflies",
|
||
"description": "Makes fireflies swarm the post.",
|
||
"icon": "fas fa-sparkles",
|
||
"color": "text-warning",
|
||
"price": 300
|
||
},
|
||
"train": {
|
||
"kind": "train",
|
||
"title": "Train",
|
||
"description": "Summons a train on the post.",
|
||
"icon": "fas fa-train",
|
||
"color": "text-pink",
|
||
"price": 300
|
||
},
|
||
"scooter": {
|
||
"kind": "scooter",
|
||
"title": "Scooter",
|
||
"description": "Summons a scooter on the post.",
|
||
"icon": "fas fa-flag-usa",
|
||
"color": "text-muted",
|
||
"price": 300
|
||
},
|
||
"wholesome": {
|
||
"kind": "wholesome",
|
||
"title": "Wholesome",
|
||
"description": "Summons a wholesome marsey on the post.",
|
||
"icon": "fas fa-smile-beam",
|
||
"color": "text-yellow",
|
||
"price": 300
|
||
},
|
||
"tilt": {
|
||
"kind": "tilt",
|
||
"title": "Tilt",
|
||
"description": "Tilts the post or comment",
|
||
"icon": "fas fa-car-tilt",
|
||
"color": "text-blue",
|
||
"price": 300
|
||
},
|
||
"glowie": {
|
||
"kind": "glowie",
|
||
"title": "Glowie",
|
||
"description": "Indicates that the recipient can be seen when driving. Just run them over.",
|
||
"icon": "fas fa-user-secret",
|
||
"color": "text-green",
|
||
"price": 300
|
||
},
|
||
"rehab": {
|
||
"kind": "rehab",
|
||
"title": "Rehab",
|
||
"description": "Prevents the user from gambling for 24 hours in a last ditch effort to save them from themself.",
|
||
"icon": "fas fa-dice-six",
|
||
"color": "text-black",
|
||
"price": 777
|
||
},
|
||
"beano": {
|
||
"kind": "beano",
|
||
"title": "Beano",
|
||
"description": "Stops you from embarrassing yourself with your flatulence",
|
||
"icon": "fas fa-gas-pump-slash",
|
||
"color": "text-green",
|
||
"price": 1000
|
||
},
|
||
"progressivestack": {
|
||
"kind": "progressivestack",
|
||
"title": "Progressive Stack",
|
||
"description": "Makes votes on the recipient's posts and comments weigh double in the ranking algorithm for 6 hours.",
|
||
"icon": "fas fa-bullhorn",
|
||
"color": "text-danger",
|
||
"price": 1000
|
||
},
|
||
"pin": {
|
||
"kind": "pin",
|
||
"title": "1-Hour Pin",
|
||
"description": "Pins the post/comment.",
|
||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||
"color": "text-warning",
|
||
"price": 1000
|
||
},
|
||
"unpin": {
|
||
"kind": "unpin",
|
||
"title": "1-Hour Unpin",
|
||
"description": "Removes 1 hour from the pin duration of the post/comment.",
|
||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||
"color": "text-black",
|
||
"price": 1000
|
||
},
|
||
"flairlock": {
|
||
"kind": "flairlock",
|
||
"title": "1-Day Flairlock",
|
||
"description": "Sets a flair for the recipient and locks it for 24 hours.",
|
||
"icon": "fas fa-lock",
|
||
"color": "text-black",
|
||
"price": 1250
|
||
},
|
||
"pizzashill": {
|
||
"kind": "pizzashill",
|
||
"title": "Pizzashill",
|
||
"description": "Forces the recipient to make all posts/comments > 280 characters for 24 hours.",
|
||
"icon": "fas fa-pizza-slice",
|
||
"color": "text-orange",
|
||
"price": 1500
|
||
},
|
||
"bird": {
|
||
"kind": "bird",
|
||
"title": "Bird Site",
|
||
"description": "Forces the recipient to make all posts/comments < 140 characters for 24 hours.",
|
||
"icon": "fab fa-twitter",
|
||
"color": "text-blue",
|
||
"price": 1500
|
||
},
|
||
"deflector": {
|
||
"kind": "deflector",
|
||
"title": "Deflector",
|
||
"description": "Causes most awards received for the next 10 hours to be deflected back at their giver.",
|
||
"icon": "fas fa-shield",
|
||
"color": "text-pink",
|
||
"price": 2750
|
||
},
|
||
"marsey": {
|
||
"kind": "marsey",
|
||
"title": "Marsey",
|
||
"description": "Makes the recipient unable to post/comment anything but marsey emojis for 24 hours.",
|
||
"icon": "fas fa-cat",
|
||
"color": "text-orange",
|
||
"price": 3000
|
||
},
|
||
"ban": {
|
||
"kind": "ban",
|
||
"title": "1-Day Ban",
|
||
"description": "Bans the recipient for a day.",
|
||
"icon": "fas fa-gavel",
|
||
"color": "text-danger",
|
||
"price": 3000
|
||
},
|
||
"unban": {
|
||
"kind": "unban",
|
||
"title": "1-Day Unban",
|
||
"description": "Removes 1 day from the ban duration of the recipient.",
|
||
"icon": "fas fa-gavel",
|
||
"color": "text-success",
|
||
"price": 3500
|
||
},
|
||
"benefactor": {
|
||
"kind": "benefactor",
|
||
"title": "Benefactor",
|
||
"description": "Grants one month of paypig status and 2500 marseybux to the recipient. Cannot be used on yourself.",
|
||
"icon": "fas fa-gift",
|
||
"color": "text-blue",
|
||
"price": 4000
|
||
},
|
||
"grass": {
|
||
"kind": "grass",
|
||
"title": "Grass",
|
||
"description": "Ban the recipient for 30 days (if they provide a timestamped picture of them touching grass/snow/sand/ass to the admins, they will get unbanned immediately)",
|
||
"icon": "fas fa-seedling",
|
||
"color": "text-success",
|
||
"price": 10000
|
||
},
|
||
"eye": {
|
||
"kind": "eye",
|
||
"title": "All-Seeing Eye",
|
||
"description": "Gives the recipient the ability to view private profiles.",
|
||
"icon": "fas fa-eye",
|
||
"color": "text-silver",
|
||
"price": 10000
|
||
},
|
||
"unblockable": {
|
||
"kind": "unblockable",
|
||
"title": "Unblockable",
|
||
"description": "Makes the recipient unblockable and removes all blocks on them.",
|
||
"icon": "far fa-laugh-squint",
|
||
"color": "text-lightgreen",
|
||
"price": 10000
|
||
},
|
||
"fish": {
|
||
"kind": "fish",
|
||
"title": "Fish",
|
||
"description": "This user cannot be unfollowed",
|
||
"icon": "fas fa-fish",
|
||
"color": "text-lightblue",
|
||
"price": 20000
|
||
},
|
||
"pause": {
|
||
"kind": "pause",
|
||
"title": "Pause",
|
||
"description": "Gives the recipient the ability to pause profile anthems.",
|
||
"icon": "fas fa-volume-mute",
|
||
"color": "text-danger",
|
||
"price": 20000
|
||
},
|
||
"unpausable": {
|
||
"kind": "unpausable",
|
||
"title": "Unpausable",
|
||
"description": "Makes the profile anthem of the recipient unpausable.",
|
||
"icon": "fas fa-volume",
|
||
"color": "text-success",
|
||
"price": 40000
|
||
},
|
||
"alt": {
|
||
"kind": "alt",
|
||
"title": "Alt-Seeing Eye",
|
||
"description": "Gives the recipient the ability to view alts.",
|
||
"icon": "fas fa-eye",
|
||
"color": "text-gold",
|
||
"price": 50000
|
||
},
|
||
}
|
||
|
||
AWARDS2 = deepcopy(AWARDS)
|
||
for k, val in AWARDS.items():
|
||
if val['description'] == '???': AWARDS2.pop(k)
|
||
|
||
|
||
AWARDS3 = {}
|
||
for k, val in AWARDS2.items():
|
||
if val['price'] == 300: AWARDS3[k] = val
|
||
|
||
TROLLTITLES = [
|
||
"how will @{username} ever recover?",
|
||
"@{username} BTFO",
|
||
"[META] Getting really sick of @{username}’s shit",
|
||
"Pretty sure this is @{username}'s Reddit account",
|
||
"Hey jannies can you please ban @{username}",
|
||
]
|
||
|
||
NOTIFIED_USERS = {
|
||
'aevan': AEVANN_ID,
|
||
'avean': AEVANN_ID,
|
||
'joan': JOAN_ID,
|
||
'pewkie': JOAN_ID,
|
||
'carp': CARP_ID,
|
||
'idio3': IDIO_ID,
|
||
'idio ': IDIO_ID,
|
||
'landlord_messiah': LLM_ID,
|
||
'landlordmessiah': LLM_ID,
|
||
' llm ': LLM_ID,
|
||
'landlet': LLM_ID,
|
||
'dong': DONGER_ID,
|
||
'kippy': KIPPY_ID,
|
||
'the_homocracy': HOMO_ID,
|
||
'soren': SOREN_ID,
|
||
}
|
||
|
||
patron = 'Patron'
|
||
|
||
REDDIT_NOTIFS = {
|
||
'idio3': IDIO_ID,
|
||
'aevann': AEVANN_ID,
|
||
'carpflo': CARP_ID,
|
||
'carpathianflorist': CARP_ID,
|
||
'carpathian florist': CARP_ID,
|
||
'the_homocracy': HOMO_ID
|
||
}
|
||
|
||
discounts = {
|
||
69: 0.02,
|
||
70: 0.04,
|
||
71: 0.06,
|
||
72: 0.08,
|
||
73: 0.10,
|
||
}
|
||
|
||
CF_KEY = environ.get("CF_KEY", "").strip()
|
||
CF_ZONE = environ.get("CF_ZONE", "").strip()
|
||
CF_HEADERS = {"Authorization": f"Bearer {CF_KEY}", "Content-Type": "application/json"}
|
||
|
||
WORDLE_LIST = ('aaron','about','above','abuse','acids','acres','actor','acute','adams','added','admin','admit','adopt','adult','after','again','agent','aging','agree','ahead','aimed','alarm','album','alert','alias','alice','alien','align','alike','alive','allah','allan','allen','allow','alloy','alone','along','alpha','alter','amber','amend','amino','among','angel','anger','angle','angry','anime','annex','annie','apart','apnic','apple','apply','april','areas','arena','argue','arise','armed','armor','array','arrow','aruba','ascii','asian','aside','asked','asset','atlas','audio','audit','autos','avoid','award','aware','awful','babes','bacon','badge','badly','baker','balls','bands','banks','barry','based','bases','basic','basin','basis','batch','baths','beach','beads','beans','bears','beast','beats','began','begin','begun','being','belle','belly','below','belts','bench','berry','betty','bible','bikes','bills','billy','bingo','birds','birth','bitch','black','blade','blair','blake','blame','blank','blast','blend','bless','blind','blink','block','blogs','blond','blood','bloom','blues','board','boats','bobby','bonds','bones','bonus','boobs','books','boost','booth','boots','booty','bored','bound','boxed','boxes','brain','brake','brand','brass','brave','bread','break','breed','brian','brick','bride','brief','bring','broad','broke','brook','brown','bruce','brush','bryan','bucks','buddy','build','built','bunch','bunny','burke','burns','burst','buses','busty','butts','buyer','bytes','cabin','cable','cache','cakes','calif','calls','camel','camps','canal','candy','canon','cards','carey','cargo','carlo','carol','carry','cases','casey','casio','catch','cause','cedar','cells','cents','chain','chair','chaos','charm','chart','chase','cheap','cheat','check','chess','chest','chevy','chick','chief','child','chile','china','chips','choir','chose','chris','chuck','cindy','cisco','cited','civic','civil','claim','clara','clark','class','clean','clear','clerk','click','cliff','climb','clips','clock','clone','close','cloth','cloud','clubs','coach','coast','cocks','codes','cohen','coins','colin','colon','color','combo','comes','comic','condo','congo','const','coral','corps','costa','costs','could','count','court','cover','crack','craft','craig','craps','crash','crazy','cream','creek','crest','crime','crops','cross','crowd','crown','crude','cubic','curve','cyber','cycle','czech','daddy','daily','dairy','daisy','dance','danny','dated','dates','david','davis','deals','dealt','death','debug','debut','decor','delay','delhi','delta','dense','depot','depth','derby','derek','devel','devil','devon','diana','diane','diary','dicke','dicks','diego','diffs','digit','dildo','dirty','disco','discs','disks','dodge','doing','dolls','donna','donor','doors','doubt','dover','dozen','draft','drain','rDrama','drawn','draws','dream','dress','dried','drill','drink','drive','drops','drove','drugs','drums','drunk','dryer','dubai','dutch','dying','dylan','eagle','early','earth','ebony','ebook','eddie','edgar','edges','egypt','eight','elder','elect','elite','ellen','ellis','elvis','emacs','email','emily','empty','ended','endif','enemy','enjoy','enter','entry','epson','equal','error','essay','essex','euros','evans','event','every','exact','exams','excel','exist','extra','faced','faces','facts','fails','fairy','faith','falls','false','fancy','fares','farms','fatal','fatty','fault','favor','fears','feeds','feels','fence','ferry','fever','fewer','fiber','fibre','field','fifth','fifty','fight','filed','files','filme','films','final','finds','fired','fires','firms','first','fixed','fixes','flags','flame','flash','fleet','flesh','float','flood','floor','flour','flows','floyd','fluid','flush','flyer','focal','focus','folks','fonts','foods','force','forge','forms','forth','forty','forum','found','frame','frank','fraud','fresh','front','frost','fruit','fully','funds','funky','funny','fuzzy','gains','games','gamma','gates','gauge','genes','genre','ghana','ghost','giant','gifts','girls','given','gives','glass','glenn','globe','glory','gnome','goals','going','gonna','goods','gotta','grace','grade','grain','grams','grand','grant','graph','grass','grave','great','greek','green','grill','gross','group','grove','grown','grows','guard','guess','guest','guide','guild','hairy','haiti','hands','handy','happy','harry','haven','hayes','heads','heard','heart','heath','heavy','helen','hello','helps','hence','henry','herbs','highs','hills','hindu','hints','hired','hobby','holds','holes','holly','homes','honda','honey','honor','hoped','hopes','horny','horse','hosts','hotel','hours','house','human','humor','icons','idaho','ideal','ideas','image','inbox','index','india','indie','inner','input','intel','inter','intro','iraqi','irish','isaac','islam','issue','italy','items','ivory','jacob','james','jamie','janet','japan','jason','jeans','jenny','jerry','jesse','jesus','jewel','jimmy','johns','joins','joint','jokes','jones','joyce','judge','juice','julia','julie','karen','karma','kathy','katie','keeps','keith','kelly','kenny','kenya','kerry','kevin','kills','kinda','kinds','kings','kitty','klein','knife','knock','known','knows','kodak','korea','label','labor','laden','lakes','lamps','lance','lands','lanes','lanka','large','larry','laser','later','latex','latin','laugh','laura','layer','leads','learn','lease','least','leave','leeds','legal','lemon','leone','level','lewis','lexus','light','liked','likes','limit','linda','lined','lines','links','linux','lions','lists','lived','liver','lives','lloyd','loads','loans','lobby','local','locks','lodge','logan','logic','login','logos','looks','loops','loose','lopez','lotus','louis','loved','lover','loves','lower','lucas','lucia','lucky','lunch','lycos','lying','lyric','macro','magic','mails','maine','major','maker','makes','males','malta','mambo','manga','manor','maple','march','marco','mardi','maria','marie','mario','marks','mason','match','maybe','mayor','mazda','meals','means','meant','medal','media','meets','menus','mercy','merge','merit','merry','metal','meter','metro','meyer','miami','micro','might','milan','miles','milfs','mills','minds','mines','minor','minus','mixed','mixer','model','modem','modes','money','monte','month','moore','moral','moses','motel','motor','mount','mouse','mouth','moved','moves','movie','mpegs','msgid','multi','music','myers','nails','naked','named','names','nancy','nasty','naval','needs','nepal','nerve','never','newer','newly','niger','night','nikon','noble','nodes','noise','nokia','north','noted','notes','notre','novel','nurse','nylon','oasis','occur','ocean','offer','often','older','olive','omaha','omega','onion','opens','opera','orbit','order','organ','oscar','other','ought','outer','owned','owner','oxide','ozone','packs','pages','paint','pairs','panel','panic','pants','paper','papua','paris','parks','parts','party','pasta','paste','patch','paths','patio','paxil','peace','pearl','peers','penis','penny','perry','perth','peter','phase','phone','photo','phpbb','piano','picks','piece','pills','pilot','pipes','pitch','pixel','pizza','place','plain','plane','plans','plant','plate','plays','plaza','plots','poems','point','poker','polar','polls','pools','porno','ports','posts','pound','power','press','price','pride','prime','print','prior','prize','probe','promo','proof','proud','prove','proxy','pulse','pumps','punch','puppy','purse','pussy','qatar','queen','query','quest','queue','quick','quiet','quilt','quite','quote','races','racks','radar','radio','raise','rally','ralph','ranch','randy','range','ranks','rapid','rated','rates','ratio','reach','reads','ready','realm','rebel','refer','rehab','relax','relay','remix','renew','reply','reset','retro','rhode','rider','rides','ridge','right','rings','risks','river','roads','robin','robot','rocks','rocky','roger','roles','rolls','roman','rooms','roots','roses','rouge','rough','round','route','rover','royal','rugby','ruled','rules','rural','safer','sagem','saint','salad','salem','sales','sally','salon','samba','samoa','sandy','santa','sanyo','sarah','satin','sauce','saudi','saved','saver','saves','sbjct','scale','scary','scene','scoop','scope','score','scott','scout','screw','scuba','seats','seeds','seeks','seems','sells','sends','sense','serum','serve','setup','seven','shade','shaft','shake','shall','shame','shape','share','shark','sharp','sheep','sheer','sheet','shelf','shell','shift','shine','ships','shirt','shock','shoes','shoot','shops','shore','short','shots','shown','shows','sides','sight','sigma','signs','silly','simon','since','singh','sites','sixth','sized','sizes','skill','skins','skirt','skype','slave','sleep','slide','slope','slots','sluts','small','smart','smell','smile','smith','smoke','snake','socks','solar','solid','solve','songs','sonic','sorry','sorts','souls','sound','south','space','spain','spank','sparc','spare','speak','specs','speed','spell','spend','spent','sperm','spice','spies','spine','split','spoke','sport','spots','spray','squad','stack','staff','stage','stamp','stand','stars','start','state','stats','stays','steal','steam','steel','steps','steve','stick','still','stock','stone','stood','stops','store','storm','story','strap','strip','stuck','study','stuff','style','sucks','sudan','sugar','suite','suits','sunny','super','surge','susan','sweet','swift','swing','swiss','sword','syria','table','tahoe','taken','takes','tales','talks','tamil','tampa','tanks','tapes','tasks','taste','taxes','teach','teams','tears','teddy','teens','teeth','tells','terms','terry','tests','texas','texts','thank','thats','theft','their','theme','there','these','thick','thing','think','third','thong','those','three','throw','thumb','tiger','tight','tiles','timer','times','tions','tired','tires','title','today','token','tokyo','tommy','toner','tones','tools','tooth','topic','total','touch','tough','tours','tower','towns','toxic','trace','track','tract','tracy','trade','trail','train','trans','trash','treat','trees','trend','trial','tribe','trick','tried','tries','trips','trout','truck','truly','trunk','trust','truth','tubes','tulsa','tumor','tuner','tunes','turbo','turns','tvcom','twice','twiki','twins','twist','tyler','types','ultra','uncle','under','union','units','unity','until','upper','upset','urban','usage','users','using','usual','utils','valid','value','valve','vault','vegas','venue','verde','verse','video','views','villa','vinyl','viral','virus','visit','vista','vital','vocal','voice','volvo','voted','votes','vsnet','wages','wagon','wales','walks','walls','wanna','wants','waste','watch','water','watts','waves','wayne','weeks','weird','wells','welsh','wendy','whale','whats','wheat','wheel','where','which','while','white','whole','whore','whose','wider','width','wiley','winds','wines','wings','wired','wires','witch','wives','woman','women','woods','words','works','world','worry','worse','worst','worth','would','wound','wrist','write','wrong','wrote','xanax','xerox','xhtml','yacht','yahoo','yards','years','yeast','yemen','yield','young','yours','youth','yukon','zones','gypsy','etika','funko','abort','gabby','soros','twink','biden','janny','chapo','4chan','tariq','tweet','trump','bussy','sneed','chink','nigga','wigga','caulk','putin','negus')
|
||
|
||
dues = int(environ.get("DUES").strip())
|
||
|
||
christian_emojis = (':#marseyjesus:',':#marseyimmaculate:',':#marseymothermary:',':#marseyfatherjoseph:',':#gigachadorthodox:',':#marseyorthodox:',':#marseyorthodoxpat:')
|
||
|
||
db = db_session()
|
||
marseys_const = [x[0] for x in db.query(Marsey.name).filter(Marsey.name!='chudsey').all()]
|
||
marseys_const2 = marseys_const + ['chudsey','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','exclamationpoint','period','questionmark']
|
||
db.close()
|
||
|
||
valid_username_chars = 'a-zA-Z0-9_\-'
|
||
valid_username_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$", flags=re.A)
|
||
mention_regex = re.compile('(^|\s|<p>)@(([a-zA-Z0-9_\-]){1,25})', flags=re.A)
|
||
mention_regex2 = re.compile('<p>@(([a-zA-Z0-9_\-]){1,25})', flags=re.A)
|
||
|
||
valid_password_regex = re.compile("^.{8,100}$", flags=re.A)
|
||
|
||
marseyaward_body_regex = re.compile(">[^<\s+]|[^>\s+]<", flags=re.A)
|
||
|
||
marseyaward_title_regex = re.compile("( *<img[^>]+>)+", flags=re.A)
|
||
|
||
marsey_regex = re.compile("[a-z0-9]{1,30}", flags=re.A)
|
||
|
||
tags_regex = re.compile("[a-z0-9: ]{1,200}", flags=re.A)
|
||
|
||
valid_sub_regex = re.compile("^[a-zA-Z0-9_\-]{3,20}$", flags=re.A)
|
||
|
||
query_regex = re.compile("(\w+):(\S+)", flags=re.A)
|
||
|
||
poll_regex = re.compile("\s*\$\$([^\$\n]+)\$\$\s*", flags=re.A)
|
||
bet_regex = re.compile("\s*\$\$\$([^\$\n]+)\$\$\$\s*", flags=re.A)
|
||
choice_regex = re.compile("\s*&&([^\$\n]+)&&\s*", flags=re.A)
|
||
|
||
title_regex = re.compile("[^\w ]", flags=re.A)
|
||
|
||
based_regex = re.compile("based and (.{1,20}?)(-| )pilled", flags=re.I|re.A)
|
||
|
||
controversial_regex = re.compile('["> ](https:\/\/old\.reddit\.com/r/[a-zA-Z0-9_]{3,20}\/comments\/[\w\-.#&/=\?@%+]{5,250})["< ]', flags=re.A)
|
||
|
||
fishylinks_regex = re.compile("https?://\S+", flags=re.A)
|
||
|
||
spoiler_regex = re.compile('''\|\|(.+)\|\|''', flags=re.A)
|
||
reddit_regex = re.compile('(^|\s|<p>)\/?((r|u)\/(\w|-){3,25})(?![^<]*<\/(code|pre|a)>)', flags=re.A)
|
||
sub_regex = re.compile('(^|\s|<p>)\/?(h\/(\w|-){3,25})', flags=re.A)
|
||
|
||
strikethrough_regex = re.compile('''~{1,2}([^~]+)~{1,2}''', flags=re.A)
|
||
|
||
mute_regex = re.compile("/mute @([a-z0-9_\-]{3,25}) ([0-9])+", flags=re.A)
|
||
|
||
emoji_regex = re.compile(f"[^a]>\s*(:[!#@]{{0,3}}[{valid_username_chars}]+:\s*)+<\/", flags=re.A)
|
||
emoji_regex2 = re.compile(f"(?<!\"):([!#@{valid_username_chars}]{{1,31}}?):", flags=re.A)
|
||
emoji_regex3 = re.compile(f"(?<!\"):([!@{valid_username_chars}]{{1,31}}?):", flags=re.A)
|
||
|
||
snappy_url_regex = re.compile('<a href=\"(https?:\/\/[a-z]{1,20}\.[\w:~,()\-.#&\/=?@%;+]{5,250})\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">([\w:~,()\-.#&\/=?@%;+]{5,250})<\/a>', flags=re.A)
|
||
|
||
# Technically this allows stuff that is not a valid email address, but realistically
|
||
# we care "does this email go to the correct person" rather than "is this email
|
||
# address syntactically valid", so if we care we should be sending a confirmation
|
||
# link, and otherwise should be pretty liberal in what we accept here.
|
||
email_regex = re.compile('[^@]+@[^@]+\.[^@]+', flags=re.A)
|
||
|
||
utm_regex = re.compile('utm_[a-z]+=[a-z0-9_]+&', flags=re.A)
|
||
utm_regex2 = re.compile('[?&]utm_[a-z]+=[a-z0-9_]+', flags=re.A)
|
||
|
||
YOUTUBE_KEY = environ.get("YOUTUBE_KEY", "").strip()
|
||
|
||
ADMINISTRATORS = (37696, 37697, 37749, 37833, 37838)
|
||
|
||
proxies = {"http":"http://127.0.0.1:18080","https":"http://127.0.0.1:18080"}
|
||
|
||
blackjack = environ.get("BLACKJACK", "").strip()
|
||
|
||
approved_embed_hosts = [
|
||
'rdrama.net',
|
||
'pcmemes.net',
|
||
'cringetopia.org',
|
||
'devrama.xyz',
|
||
'imgur.com',
|
||
'ibb.co',
|
||
'lain.la',
|
||
'pngfind.com',
|
||
'kym-cdn.com',
|
||
'redd.it',
|
||
'substack.com',
|
||
'blogspot.com',
|
||
'catbox.moe',
|
||
'pinimg.com',
|
||
'kindpng.com',
|
||
'shopify.com',
|
||
'discordapp.com',
|
||
'discordapp.net',
|
||
'twimg.com',
|
||
'wikimedia.org',
|
||
'wp.com',
|
||
'wordpress.com',
|
||
'seekpng.com',
|
||
'dailymail.co.uk',
|
||
'cdc.gov',
|
||
'media-amazon.com',
|
||
'ssl-images-amazon.com',
|
||
'washingtonpost.com',
|
||
'imgflip.com',
|
||
'flickr.com',
|
||
'9cache.com',
|
||
'ytimg.com',
|
||
'foxnews.com',
|
||
'duckduckgo.com',
|
||
'forbes.com',
|
||
'gr-assets.com',
|
||
'tenor.com',
|
||
'giphy.com',
|
||
'makeagif.com',
|
||
'gfycat.com',
|
||
'tumblr.com',
|
||
'yarn.co',
|
||
'gifer.com',
|
||
'prnt.sc',
|
||
'staticflickr.com',
|
||
'kiwifarms.net',
|
||
'amazonaws.com',
|
||
'githubusercontent.com',
|
||
'unilad.co.uk',
|
||
'grrrgraphics.com',
|
||
'redditmedia.com'
|
||
]
|
||
|
||
hosts = "|".join(approved_embed_hosts).replace('.','\.')
|
||
|
||
image_check_regex = re.compile(f'!\[\]\(((?!(https:\/\/([a-z0-9-]+\.)*({hosts})\/|\/)).*?)\)', flags=re.A)
|
||
|
||
embed_fullmatch_regex = re.compile(f'https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*', flags=re.A)
|
||
|
||
video_sub_regex = re.compile(f'(<p>[^<]*)(https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*?\.(mp4|webm|mov))', flags=re.A)
|
||
|
||
imgur_regex = re.compile('(https://i\.imgur\.com/([a-z0-9]+))\.(jpg|png|jpeg|webp)(?!<\/(code|pre|a)>)', flags=re.I|re.A)
|
||
|
||
youtube_regex = re.compile('(<p>[^<]*)(https:\/\/youtube\.com\/watch\?v\=([a-z0-9-_]{5,20})[\w\-.#&/=\?@%+]*)', flags=re.I|re.A)
|
||
|
||
yt_id_regex = re.compile('[a-z0-9-_]{5,20}', flags=re.I|re.A)
|
||
|
||
image_regex = re.compile("(^|\s)(https:\/\/[\w\-.#&/=\?@%;+]{5,250}(\.png|\.jpg|\.jpeg|\.gif|\.webp|maxwidth=9999|fidelity=high))($|\s)", flags=re.I|re.A)
|
||
|
||
procoins_li = (0,2500,5000,10000,25000,50000,125000,250000)
|
||
|
||
linefeeds_regex = re.compile("([^\n])\n([^\n])", flags=re.A)
|
||
|
||
def make_name(*args, **kwargs): return request.base_url
|