expand blackjack
parent
95938ee3ec
commit
88814ee208
|
@ -343,55 +343,6 @@ def execute_antispam_submission_check(title, v, url):
|
|||
return False
|
||||
return True
|
||||
|
||||
def execute_blackjack(v, target, body, type):
|
||||
if not blackjack or not body: return True
|
||||
|
||||
execute = False
|
||||
for x in blackjack.split(','):
|
||||
if all(i in body.lower() for i in x.split()):
|
||||
execute = True
|
||||
shadowban = v.truescore < 100
|
||||
|
||||
if execute:
|
||||
if shadowban:
|
||||
v.shadowbanned = AUTOJANNY_ID
|
||||
|
||||
ma = ModAction(
|
||||
kind="shadowban",
|
||||
user_id=AUTOJANNY_ID,
|
||||
target_user_id=v.id,
|
||||
_note='reason: "Blackjack"'
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
v.ban_reason = "Blackjack"
|
||||
g.db.add(v)
|
||||
elif type in {'submission', 'comment', 'message'}:
|
||||
target.is_banned = True
|
||||
|
||||
notified_ids = [x[0] for x in g.db.query(User.id).filter(User.admin_level >= PERMS['BLACKJACK_NOTIFICATIONS'])]
|
||||
extra_info = "unknown entity"
|
||||
|
||||
if type == 'submission':
|
||||
extra_info = target.permalink
|
||||
elif type == 'chat':
|
||||
extra_info = "chat message"
|
||||
elif type == 'flag':
|
||||
extra_info = f"reports on {target.permalink}"
|
||||
elif type == 'modmail':
|
||||
extra_info = "modmail"
|
||||
elif type in {'comment', 'message'}:
|
||||
for id in notified_ids:
|
||||
n = Notification(comment_id=target.id, user_id=id)
|
||||
g.db.add(n)
|
||||
g.db.flush()
|
||||
extra_info = None
|
||||
|
||||
if extra_info:
|
||||
for id in notified_ids:
|
||||
send_repeatable_notification(id, f"Blackjack for @{v.username}: {extra_info}")
|
||||
return True
|
||||
|
||||
def execute_antispam_duplicate_comment_check(v:User, body_html:str):
|
||||
'''
|
||||
Sanity check for newfriends
|
||||
|
|
|
@ -28,7 +28,7 @@ def send_repeatable_notification(uid, text):
|
|||
|
||||
if uid in bots: return
|
||||
|
||||
text_html = sanitize(text)
|
||||
text_html = sanitize(text, blackjack="notification")
|
||||
|
||||
existing_comments = g.db.query(Comment.id).filter_by(author_id=AUTOJANNY_ID, parent_submission=None, body_html=text_html, is_bot=True).order_by(Comment.id).all()
|
||||
|
||||
|
@ -53,7 +53,7 @@ def send_notification(uid, text):
|
|||
|
||||
def notif_comment(text):
|
||||
|
||||
text_html = sanitize(text)
|
||||
text_html = sanitize(text, blackjack="notification")
|
||||
|
||||
g.db.flush()
|
||||
|
||||
|
@ -94,7 +94,7 @@ def notif_comment2(p):
|
|||
else:
|
||||
text = f"@{p.author.username} has mentioned you: [{p.title}](/post/{p.id})"
|
||||
if p.sub: text += f" in <a href='/h/{p.sub}'>/h/{p.sub}"
|
||||
text_html = sanitize(text)
|
||||
text_html = sanitize(text, blackjack="notification")
|
||||
return create_comment(text_html)
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import files.helpers.config.const as const
|
|||
from files.classes.badges import Badge
|
||||
from files.classes.comment import Comment
|
||||
from files.classes.user import User
|
||||
from files.helpers.sanitize import sanitize
|
||||
from files.helpers.sanitize import *
|
||||
from files.classes.notifications import Notification
|
||||
|
||||
# Note: while https://api.pushshift.io/meta provides the key
|
||||
|
@ -94,7 +94,7 @@ def notify_mentions(mentions, send_to=None, mention_str='site mention'):
|
|||
for m in mentions:
|
||||
author = m['author']
|
||||
permalink = m['permalink']
|
||||
text = sanitize(m['text'], golden=False)
|
||||
text = sanitize(m['text'], blackjack="reddit mention", golden=False)
|
||||
notif_text = (
|
||||
f'<p>New {mention_str} by <a href="https://old.reddit.com/u/{author}" '
|
||||
f'rel="nofollow noopener" target="_blank">/u/{author}</a></p>'
|
||||
|
|
|
@ -13,6 +13,8 @@ from bleach.linkifier import LinkifyFilter
|
|||
from bs4 import BeautifulSoup
|
||||
from mistletoe import markdown
|
||||
from files.classes.domains import BannedDomain
|
||||
from files.classes.mod_logs import ModAction
|
||||
from files.classes.notifications import Notification
|
||||
|
||||
from files.helpers.config.const import *
|
||||
from files.helpers.const_stateful import *
|
||||
|
@ -148,6 +150,85 @@ def callback(attrs, new=False):
|
|||
|
||||
return attrs
|
||||
|
||||
def create_comment_duplicated(text_html):
|
||||
new_comment = Comment(author_id=AUTOJANNY_ID,
|
||||
parent_submission=None,
|
||||
body_html=text_html,
|
||||
distinguish_level=6,
|
||||
is_bot=True)
|
||||
g.db.add(new_comment)
|
||||
g.db.flush()
|
||||
|
||||
new_comment.top_comment_id = new_comment.id
|
||||
|
||||
return new_comment.id
|
||||
|
||||
def send_repeatable_notification_duplicated(uid, text):
|
||||
|
||||
if uid in bots: return
|
||||
|
||||
text_html = sanitize(text)
|
||||
|
||||
existing_comments = g.db.query(Comment.id).filter_by(author_id=AUTOJANNY_ID, parent_submission=None, body_html=text_html, is_bot=True).order_by(Comment.id).all()
|
||||
|
||||
for c in existing_comments:
|
||||
existing_notif = g.db.query(Notification.user_id).filter_by(user_id=uid, comment_id=c.id).one_or_none()
|
||||
if not existing_notif:
|
||||
notif = Notification(comment_id=c.id, user_id=uid)
|
||||
g.db.add(notif)
|
||||
return
|
||||
|
||||
cid = create_comment_duplicated(text_html)
|
||||
notif = Notification(comment_id=cid, user_id=uid)
|
||||
g.db.add(notif)
|
||||
|
||||
|
||||
def execute_blackjack(v, target, body, type):
|
||||
if not blackjack or not body: return False
|
||||
|
||||
execute = False
|
||||
for x in blackjack.split(','):
|
||||
if all(i in body.lower() for i in x.split()):
|
||||
execute = True
|
||||
shadowban = v.truescore < 100 or not target
|
||||
|
||||
if not execute: return False
|
||||
|
||||
if shadowban:
|
||||
v.shadowbanned = AUTOJANNY_ID
|
||||
|
||||
ma = ModAction(
|
||||
kind="shadowban",
|
||||
user_id=AUTOJANNY_ID,
|
||||
target_user_id=v.id,
|
||||
_note='reason: "Blackjack"'
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
v.ban_reason = "Blackjack"
|
||||
g.db.add(v)
|
||||
elif target and type in {'submission', 'comment', 'message'}:
|
||||
target.is_banned = True
|
||||
|
||||
notified_ids = [x[0] for x in g.db.query(User.id).filter(User.admin_level >= PERMS['BLACKJACK_NOTIFICATIONS'])]
|
||||
extra_info = type
|
||||
|
||||
if target:
|
||||
if type == 'submission':
|
||||
extra_info = target.permalink
|
||||
elif type == 'flag':
|
||||
extra_info = f"reports on {target.permalink}"
|
||||
elif type in {'comment', 'message'}:
|
||||
for id in notified_ids:
|
||||
n = Notification(comment_id=target.id, user_id=id)
|
||||
g.db.add(n)
|
||||
g.db.flush()
|
||||
extra_info = None
|
||||
|
||||
if extra_info:
|
||||
for id in notified_ids:
|
||||
send_repeatable_notification_duplicated(id, f"Blackjack for @{v.username}: {extra_info}")
|
||||
return True
|
||||
|
||||
def render_emoji(html, regexp, golden, marseys_used, b=False):
|
||||
emojis = list(regexp.finditer(html))
|
||||
|
@ -270,9 +351,12 @@ def handle_youtube_links(url):
|
|||
return html
|
||||
|
||||
@with_sigalrm_timeout(10)
|
||||
def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys=False, torture=False, sidebar=False, snappy=False, chat=False):
|
||||
def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys=False, torture=False, snappy=False, blackjack=None):
|
||||
sanitized = sanitized.strip()
|
||||
|
||||
if blackjack and execute_blackjack(g.v, None, sanitized, blackjack):
|
||||
sanitized = 'g'
|
||||
|
||||
sanitized = utm_regex.sub('', sanitized)
|
||||
sanitized = utm_regex2.sub('', sanitized)
|
||||
|
||||
|
@ -431,7 +515,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
domain_list.add(d.lower())
|
||||
|
||||
def error(error):
|
||||
if chat:
|
||||
if blackjack == "chat":
|
||||
return error, 403
|
||||
else:
|
||||
abort(403, error)
|
||||
|
@ -445,7 +529,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
if discord_username_regex.match(sanitized):
|
||||
return error("Stop grooming!")
|
||||
|
||||
if '<pre>' not in sanitized and not sidebar:
|
||||
if '<pre>' not in sanitized and blackjack != "rules":
|
||||
sanitized = sanitized.replace('\n','')
|
||||
|
||||
if showmore:
|
||||
|
|
|
@ -67,7 +67,7 @@ def edit_rules_get(v):
|
|||
@admin_level_required(PERMS['EDIT_RULES'])
|
||||
def edit_rules_post(v):
|
||||
rules = request.values.get('rules', '').strip()
|
||||
rules = sanitize(rules, sidebar=True, showmore=False)
|
||||
rules = sanitize(rules, blackjack="rules", showmore=False)
|
||||
|
||||
with open(f'files/templates/rules_{SITE_NAME}.html', 'w+', encoding="utf-8") as f:
|
||||
f.write(rules)
|
||||
|
|
|
@ -9,7 +9,7 @@ from files.helpers.alerts import *
|
|||
from files.helpers.config.const import *
|
||||
from files.helpers.regex import *
|
||||
from files.helpers.media import process_image
|
||||
from files.helpers.sanitize import sanitize
|
||||
from files.helpers.sanitize import *
|
||||
from files.helpers.alerts import push_notif
|
||||
from files.routes.wrappers import *
|
||||
|
||||
|
@ -113,7 +113,7 @@ def speak(data, v):
|
|||
emit("online", [online, muted], broadcast=True)
|
||||
self_only = True
|
||||
|
||||
if self_only or v.shadowbanned or not execute_blackjack(v, None, text, "chat"):
|
||||
if self_only or v.shadowbanned or execute_blackjack(v, None, text, "chat"):
|
||||
emit('speak', data)
|
||||
else:
|
||||
emit('speak', data, broadcast=True)
|
||||
|
|
|
@ -63,7 +63,7 @@ def request_api_keys(v):
|
|||
g.db.add(new_app)
|
||||
|
||||
body = f"@{v.username} has requested API keys for `{request.values.get('name')}`. You can approve or deny the request [here](/admin/apps)."
|
||||
body_html = sanitize(body)
|
||||
body_html = sanitize(body, blackjack="app description")
|
||||
|
||||
new_comment = Comment(author_id=AUTOJANNY_ID,
|
||||
parent_submission=None,
|
||||
|
|
|
@ -312,7 +312,7 @@ def edit_post(pid, v):
|
|||
execute_under_siege(v, p, p.body, 'submission')
|
||||
|
||||
for text in [p.body, p.title, p.url]:
|
||||
if not execute_blackjack(v, p, text, 'submission'): break
|
||||
if execute_blackjack(v, p, text, 'submission'): break
|
||||
|
||||
if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT:
|
||||
abort(400, f"Submission body_html too long!")
|
||||
|
@ -708,7 +708,7 @@ def submit_post(v:User, sub=None):
|
|||
g.db.flush()
|
||||
|
||||
for text in {post.body, post.title, post.url}:
|
||||
if not execute_blackjack(v, post, text, 'submission'): break
|
||||
if execute_blackjack(v, post, text, 'submission'): break
|
||||
|
||||
process_poll_options(post, SubmissionOption, bets, 2, "Bet", g.db)
|
||||
process_poll_options(post, SubmissionOption, options, 0, "Poll", g.db)
|
||||
|
|
|
@ -227,7 +227,7 @@ def settings_personal_post(v):
|
|||
|
||||
elif not updated and v.patron and request.values.get("sig"):
|
||||
sig = request.values.get("sig")[:200].replace('\n','').replace('\r','')
|
||||
sig_html = sanitize(sig)
|
||||
sig_html = sanitize(sig, blackjack="signature")
|
||||
if len(sig_html) > 1000:
|
||||
return render_template("settings/personal.html",
|
||||
v=v,
|
||||
|
@ -243,7 +243,7 @@ def settings_personal_post(v):
|
|||
elif not updated and FEATURES['USERS_PROFILE_BODYTEXT'] and request.values.get("friends"):
|
||||
friends = request.values.get("friends")[:1000]
|
||||
|
||||
friends_html = sanitize(friends)
|
||||
friends_html = sanitize(friends, blackjack="friends")
|
||||
|
||||
if len(friends_html) > 5000:
|
||||
return render_template("settings/personal.html",
|
||||
|
@ -268,7 +268,7 @@ def settings_personal_post(v):
|
|||
elif not updated and FEATURES['USERS_PROFILE_BODYTEXT'] and request.values.get("enemies"):
|
||||
enemies = request.values.get("enemies")[:1000]
|
||||
|
||||
enemies_html = sanitize(enemies)
|
||||
enemies_html = sanitize(enemies, blackjack="enemies")
|
||||
|
||||
if len(enemies_html) > 5000:
|
||||
return render_template("settings/personal.html",
|
||||
|
@ -294,7 +294,7 @@ def settings_personal_post(v):
|
|||
bio = request.values.get("bio")[:1500]
|
||||
bio += process_files(request.files, v)
|
||||
bio = bio.strip()
|
||||
bio_html = sanitize(bio)
|
||||
bio_html = sanitize(bio, blackjack="bio")
|
||||
|
||||
if len(bio_html) > 10000:
|
||||
return render_template("settings/personal.html",
|
||||
|
|
|
@ -406,7 +406,7 @@ def post_sub_sidebar(v:User, sub):
|
|||
if v.shadowbanned: return redirect(f'/h/{sub}/settings')
|
||||
|
||||
sub.sidebar = request.values.get('sidebar', '').strip()[:10000]
|
||||
sub.sidebar_html = sanitize(sub.sidebar, showmore=False)
|
||||
sub.sidebar_html = sanitize(sub.sidebar, blackjack=f"/h/{sub} sidebar", showmore=False)
|
||||
if len(sub.sidebar_html) > 20000: abort(400, "Sidebar is too big!")
|
||||
|
||||
g.db.add(sub)
|
||||
|
|
|
@ -13,7 +13,7 @@ from files.classes import *
|
|||
from files.classes.leaderboard import Leaderboard
|
||||
from files.classes.transactions import *
|
||||
from files.classes.views import *
|
||||
from files.helpers.actions import execute_blackjack, execute_under_siege
|
||||
from files.helpers.actions import execute_under_siege
|
||||
from files.helpers.alerts import *
|
||||
from files.helpers.config.const import *
|
||||
from files.helpers.mail import *
|
||||
|
|
Loading…
Reference in New Issue