diff --git a/files/classes/comment.py b/files/classes/comment.py index 8cc74a091..d299cc3bb 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -392,7 +392,15 @@ class Comment(Base): @lazy def ordered_flags(self): return self.flags.order_by(CommentFlag.id).all() - + def options_html(self, v): + html = "" + for o in self.options: + html += f'
'
+		return html
 
 class Notification(Base):
 
diff --git a/files/classes/user.py b/files/classes/user.py
index 79031f88a..67d3aa392 100644
--- a/files/classes/user.py
+++ b/files/classes/user.py
@@ -15,7 +15,7 @@ from .clients import *
 from files.__main__ import Base, cache
 from files.helpers.security import *
 import random
-from os import environ, remove
+from os import environ, remove, path
 
 site = environ.get("DOMAIN").strip()
 site_name = environ.get("SITE_NAME").strip()
@@ -466,18 +466,29 @@ class User(Base):
 
 		return data
 
-	def ban(self, admin=None, reason=None, days=0):
+	def deletepfp(self):
+		if self.highres and '/images/' in self.highres:
+			image = '/images/' + self.highres.split('/images/')[1]
+			if path.exists(image): remove(image)
+		if self.profileurl and '/images/' in self.profileurl:
+			image = '/images/' + self.profileurl.split('/images/')[1]
+			if path.exists(image): remove(image)
+		self.highres = None
+		self.profileurl = None
 
+	def deletebanner(self):
+		if self.bannerurl and '/images/' in self.bannerurl:
+			image = '/images/' + self.bannerurl.split('/images/')[1]
+			if path.exists(image): remove(image)
+		self.bannerurl = None
+
+	def ban(self, admin=None, reason=None, days=0):
 		if days > 0:
 			ban_time = int(time.time()) + (days * 86400)
 			self.unban_utc = ban_time
 		else:
-			if self.highres and '/images/' in self.highres: remove('/images/' + self.highres.split('/images/')[1])
-			if self.profileurl and '/images/' in self.profileurl: remove('/images/' + self.profileurl.split('/images/')[1])
-			if self.bannerurl and '/images/' in self.bannerurl: remove('/images/' + self.bannerurl.split('/images/')[1])
-
-			self.bannerurl = None
-			self.profileurl = None
+			self.deletepfp()
+			self.deletebanner()
 			if self.discord_id: remove_user(self)
 
 		self.is_banned = admin.id if admin else AUTOJANNY_ID
diff --git a/files/helpers/const.py b/files/helpers/const.py
index cadfd2596..221e36564 100644
--- a/files/helpers/const.py
+++ b/files/helpers/const.py
@@ -53,8 +53,8 @@ SLURS = {
 	"kill yourself": "keep yourself safe",
 	"kys": "keep yourself safe",
 	"kyle": "Kylie",
-	"nig": "🏀",
-	"nigger": "🏀",
+	"nig": "BIPOC",
+	"nigger": "BIPOC",
 	"rapist": "male feminist",
 	"steve akins": "penny verity oaken",
 	"trannie": "🚂🚃🚃",
diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py
index fd1fb1132..5a6efa8a5 100644
--- a/files/helpers/sanitize.py
+++ b/files/helpers/sanitize.py
@@ -165,26 +165,28 @@ def sanitize(sanitized, noimages=False):
 
 	if start in sanitized and end in sanitized and start in sanitized.split(end)[0] and end in sanitized.split(start)[1]: sanitized = sanitized.replace(start, '').replace(end, '')
 	
-	for i in re.finditer("[^a]>\s*(:!?\w+:\s*)+<\/", sanitized):
+	for i in re.finditer("[^a]>\s*(:[!#]?\w+:\s*)+<\/", sanitized):
 		old = i.group(0)
 		if 'marseylong1' in old or 'marseylong2' in old or 'marseyllama1' in old or 'marseyllama2' in old: new = old.lower().replace(">", " class='mb-0'>")
 		else: new = old.lower()
 		for i in re.finditer('(?', new)
-			
-					if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
-					else: session["favorite_emojis"][emoji] = 1
+				classes = 'class="bigemoji mirrored" '
+				remoji = emoji[1:]
+			elif emoji.startswith("#"):
+				classes = ""
+				remoji = emoji[1:]
+			else:
+				classes = 'class="bigemoji" '
+				remoji = emoji
 
-			elif path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
-				new = re.sub(f'(?', new)
+			if path.isfile(f'./files/assets/images/emojis/{remoji}.webp'):
+				new = re.sub(f'(?', new)
+
+				if remoji in session["favorite_emojis"]: session["favorite_emojis"][remoji] += 1
+				else: session["favorite_emojis"][remoji] = 1
 					
-				if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
-				else: session["favorite_emojis"][emoji] = 1
-
 		sanitized = sanitized.replace(old, new)
 
 
diff --git a/files/routes/admin.py b/files/routes/admin.py
index 7bc45fead..09fb995d7 100644
--- a/files/routes/admin.py
+++ b/files/routes/admin.py
@@ -754,14 +754,9 @@ def ban_user(user_id, v):
 
 	if user.admin_level >= v.admin_level: abort(403)
 
-	if 'form' in request.values:
-		days = float(request.values.get("days")) if request.values.get('days') else 0
-		reason = sanitize(request.values.get("reason", ""))[:256]
-		message = request.values.get("reason", "").strip()[:256]
-	else:
-		days = float(request.values.get("days")) if request.values.get('days') else 0
-		reason = sanitize(request.values.get("reason", ""))[:256]
-		message = request.values.get("reason", "").strip()[:256]
+	days = float(request.values.get("days")) if request.values.get('days') else 0
+	reason = sanitize(request.values.get("reason", ""))[:256]
+	message = request.values.get("reason", "").strip()[:256]
 
 	if not user: abort(400)
 	
diff --git a/files/routes/awards.py b/files/routes/awards.py
index c29346ae1..1dff45b95 100644
--- a/files/routes/awards.py
+++ b/files/routes/awards.py
@@ -803,7 +803,7 @@ def award_comment(cid, v):
 @admin_level_required(2)
 def admin_userawards_get(v):
 
-	if request.host == 'rdrama.net' and v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
+	if v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
 	return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v) 
 
 @app.post("/admin/awards")
@@ -850,5 +850,5 @@ def admin_userawards_post(v):
 
 	g.db.commit()
 
-	if request.host == 'rdrama.net' and v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
+	if v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
 	return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v) 
\ No newline at end of file
diff --git a/files/routes/comments.py b/files/routes/comments.py
index b0f6131d9..c0144f45a 100644
--- a/files/routes/comments.py
+++ b/files/routes/comments.py
@@ -646,6 +646,18 @@ def edit_comment(cid, v):
 			body = body.replace('I ', f'@{v.username} ')
 			body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
 
+		if not c.options:
+			for i in re.finditer('\s*\$\$([^\$\n]+)\$\$\s*', body):
+				body = body.replace(i.group(0), "")
+				c_option = Comment(author_id=AUTOPOLLER_ID,
+					parent_submission=c.parent_submission,
+					parent_comment_id=c.id,
+					level=c.level+1,
+					body_html=filter_title(i.group(1)),
+					upvotes=0
+					)
+				g.db.add(c_option)
+
 		body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
 
 		if v.marseyawarded and len(list(re.finditer('>[^<\s+]|[^>\s+]<', body_html))) > 0: return {"error":"You can only type marseys!"}, 403
@@ -816,7 +828,7 @@ def edit_comment(cid, v):
 
 		g.db.commit()
 
-	return c.body_html
+	return c.body_html + c.options_html(v)
 
 
 @app.post("/delete/comment/")
diff --git a/files/routes/posts.py b/files/routes/posts.py
index 4d57c2ac7..24830b2f8 100644
--- a/files/routes/posts.py
+++ b/files/routes/posts.py
@@ -275,6 +275,17 @@ def edit_post(pid, v):
 			body = body.replace('I ', f'@{v.username} ')
 			body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
 
+		if not p.options.count():
+			for i in re.finditer('\s*\$\$([^\$\n]+)\$\$\s*', body):
+				body = body.replace(i.group(0), "")
+				c = Comment(author_id=AUTOPOLLER_ID,
+					parent_submission=p.id,
+					level=1,
+					body_html=filter_title(i.group(1)),
+					upvotes=0
+					)
+				g.db.add(c)
+
 		body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
 
 		bans = filter_comment_html(body_html)
diff --git a/files/routes/settings.py b/files/routes/settings.py
index 0401c2108..c36112e70 100644
--- a/files/routes/settings.py
+++ b/files/routes/settings.py
@@ -504,7 +504,7 @@ def gumroad(v):
 
 	if v.email not in emails: return {"error": "Email not found"}, 404
 
-	response = response[0]
+	response = requests.get('https://api.gumroad.com/v2/sales', data=data, timeout=5).json()["sales"][0]
 	tier = tiers[response["variants_and_quantity"]]
 	if v.patron == tier: return {"error": f"{patron} rewards already claimed"}, 400
 
@@ -762,13 +762,11 @@ def settings_images_banner(v):
 @validate_formkey
 def settings_delete_profile(v):
 
-	if v.highres and '/images/' in v.highres: os.remove('/images/' + v.highres.split('/images/')[1])
-	if v.profileurl and '/images/' in v.profileurl: os.remove('/images/' + v.profileurl.split('/images/')[1])
+	if v.profileurl or v.highres:
+		v.deletepfp()
+		g.db.add(v)
+		g.db.commit()
 
-	v.highres = None
-	v.profileurl = None
-	g.db.add(v)
-	g.db.commit()
 	return render_template("settings_profile.html", v=v,
 						   msg="Profile picture successfully removed.")
 
@@ -779,8 +777,7 @@ def settings_delete_profile(v):
 def settings_delete_banner(v):
 
 	if v.bannerurl:
-		if '/images/' in v.bannerurl: os.remove('/images/' + v.bannerurl.split('/images/')[1])
-		v.bannerurl = None
+		v.deletebanner()
 		g.db.add(v)
 		g.db.commit()
 
diff --git a/files/routes/votes.py b/files/routes/votes.py
index 3b3b574bd..a03e16ca0 100644
--- a/files/routes/votes.py
+++ b/files/routes/votes.py
@@ -101,7 +101,7 @@ def api_vote_post(post_id, new, v):
 		post.author.coins += 1
 		post.author.truecoins += 1
 		g.db.add(post.author)
-		real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor
+		real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor and not v.agendaposter and not v.shadowbanned
 		vote = Vote(user_id=v.id,
 					vote_type=new,
 					submission_id=post_id,
@@ -169,7 +169,7 @@ def api_vote_comment(comment_id, new, v):
 		comment.author.coins += 1
 		comment.author.truecoins += 1
 		g.db.add(comment.author)
-		real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor
+		real = (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor) and not v.agendaposter and not v.shadowbanned
 		vote = CommentVote(user_id=v.id,
 						vote_type=new,
 						comment_id=comment_id,
diff --git a/files/templates/comment_failed.html b/files/templates/comment_failed.html
index aca4ece1e..88cc22826 100644
--- a/files/templates/comment_failed.html
+++ b/files/templates/comment_failed.html
@@ -29,9 +29,9 @@
 				 
 
 				
- - - + + +
diff --git a/files/templates/emoji_modal.html b/files/templates/emoji_modal.html index 9dc726543..de4b6f1b9 100644 --- a/files/templates/emoji_modal.html +++ b/files/templates/emoji_modal.html @@ -84,7 +84,7 @@ - +