antispam: under siege mode

pull/32/head
justcool393 2022-11-30 11:37:35 -06:00
parent b59e4cadaa
commit 0106a4e340
10 changed files with 36 additions and 18 deletions

View File

@ -12,8 +12,10 @@ from files.classes.notifications import Notification
from files.helpers.alerts import send_repeatable_notification
from files.helpers.const import *
from files.helpers.const_stateful import *
from files.helpers.discord import discord_message_send
from files.helpers.get import *
from files.helpers.sanitize import *
from files.helpers.settings import get_setting
from files.helpers.slots import check_slots_command
@ -38,7 +40,6 @@ def archive_url(url):
url = url.replace('https://instagram.com/', 'https://imginn.com/')
gevent.spawn(_archiveorg, url)
def execute_snappy(post, v):
snappy = get_account(SNAPPY_ID)
@ -360,18 +361,6 @@ def execute_antispam_submission_check(title, v, url):
return True
def execute_blackjack_custom(v, target, body, type):
if v.age < (10 * 60):
v.shadowbanned = 'AutoJanny'
if not v.is_banned: v.ban_reason = f"Under Siege"
v.is_muted = True
g.db.add(v)
with open(f"/under_siege.log", "a", encoding="utf-8") as f:
t = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
f.write(f"[{t}] {v.id} @{v.username} {type} {v.age}s\n")
from files.helpers.discord import discord_message_send
discord_message_send("1041917843094110239",
f"<{SITE_FULL}/id/{v.id}> `@{v.username} {type} {v.age}s`")
return False
return True
def execute_blackjack(v, target, body, type):
@ -458,6 +447,21 @@ def execute_antispam_comment_check(body:str, v:User):
g.db.commit()
abort(403, "Too much spam!")
def execute_under_siege(v:User, target:Optional[Union[Submission, Comment]], body, type:str):
if not get_setting("under_siege"): return True
if v.age < UNDER_SIEGE_AGE_THRESHOLD and not v.admin_level >= PERMS['SITE_BYPASS_UNDER_SIEGE_MODE']:
v.shadowbanned = 'AutoJanny'
if not v.is_banned: v.ban_reason = f"Under Siege"
v.is_muted = True
g.db.add(v)
with open(f"/under_siege.log", "a", encoding="utf-8") as f:
t = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
f.write(f"[{t}] {v.id} @{v.username} {type} {v.age}s\n")
discord_message_send(UNDER_SIEGE_CHANNEL_ID,
f"<{SITE_FULL}/id/{v.id}> `@{v.username} {type} {v.age}s`")
return False
return True
def execute_lawlz_actions(v:User, p:Submission):
if v.id != LAWLZ_ID: return
if SITE_NAME != 'rDrama': return

View File

@ -199,6 +199,7 @@ AGENDAPOSTER_MSG_HTML = """<p>Hi <a href="/id/{id}"><img loading="lazy" src="/pp
DISCORD_CHANGELOG_CHANNEL_ID = 1034632681788538980
WPD_CHANNEL_ID = 1013990963846332456
UNDER_SIEGE_CHANNEL_ID = 1041917843094110239
PIN_AWARD_TEXT = " (pin award)"
THEMES = ["4chan","classic","classic_dark","coffee","dark","dramblr","light","midnight","transparent","tron","win98"]
@ -271,6 +272,7 @@ PERMS = { # Minimum admin_level to perform action.
'VIEW_VOTE_BUTTONS_ON_USER_PAGE': 2,
'PRINT_MARSEYBUX_FOR_KIPPY_ON_PCMEMES': 3, # note: explicitly disabled on rDrama
'SITE_BYPASS_READ_ONLY_MODE': 1,
'SITE_BYPASS_UNDER_SIEGE_MODE': 1,
'SITE_SETTINGS': 3,
'SITE_SETTINGS_SIDEBARS_BANNERS_BADGES': 3,
'SITE_SETTINGS_SNAPPY_QUOTES': 3,
@ -407,6 +409,7 @@ PFP_DEFAULT_MARSEY = True
NEW_USER_HAT_AGE = 0 # seconds of age to show new-user forced hat
NOTIFICATION_SPAM_AGE_THRESHOLD = 0.5 * 86400
COMMENT_SPAM_LENGTH_THRESHOLD = 50
UNDER_SIEGE_AGE_THRESHOLD = 10
HOLE_NAME = 'hole'
HOLE_STYLE_FLAIR = False

View File

@ -12,6 +12,7 @@ _SETTINGS = {
"Read-only mode": False,
"Signups": True,
"login_required": False,
"under_siege": False,
}
def get_setting(setting:str):

View File

@ -11,7 +11,7 @@ from files.helpers.get import *
from files.helpers.media import *
from files.helpers.sanitize import *
from files.helpers.security import *
from files.helpers.settings import toggle_setting
from files.helpers.settings import get_settings, toggle_setting
from files.helpers.useractions import *
from files.routes.routehelpers import check_for_alts
from files.routes.wrappers import *
@ -455,6 +455,8 @@ def admin_git_head():
@app.post("/admin/site_settings/<setting>")
@admin_level_required(PERMS['SITE_SETTINGS'])
def change_settings(v, setting):
if setting not in get_settings().keys():
abort(404, f"Setting '{setting}' not found")
val = toggle_setting(setting)
if val: word = 'enable'
else: word = 'disable'
@ -463,7 +465,7 @@ def change_settings(v, setting):
user_id=v.id,
)
g.db.add(ma)
return {'message': f"{setting} {word}d successfully!"}
return {'message': f"{setting.replace('_', ' ').title()} {word}d successfully!"}
@app.post("/admin/clear_cloudflare_cache")
@admin_level_required(PERMS['SITE_CACHE_PURGE_CDN'])

View File

@ -239,6 +239,7 @@ def comment(v):
g.db.flush()
execute_blackjack(v, c, c.body, "comment")
execute_under_siege(v, c, c.body, "comment")
if c.level == 1: c.top_comment_id = c.id
else: c.top_comment_id = parent.top_comment_id
@ -444,6 +445,7 @@ def edit_comment(cid, v):
c.body_html = body_html
execute_blackjack(v, c, c.body, "comment")
execute_under_siege(v, c, c.body, "comment")
if c.post.id not in ADMIGGER_THREADS and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in c.body.lower() and c.post.sub != 'chudrama':
abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your comment!')

View File

@ -392,7 +392,9 @@ def edit_post(pid, v):
p.body = body
for text in {p.body, p.title, p.url}:
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 len(body_html) > POST_BODY_HTML_LENGTH_LIMIT:

View File

@ -18,6 +18,7 @@ from files.__main__ import app, limiter, cache
def flag_post(pid, v):
post = get_post(pid)
reason = request.values.get("reason", "").strip()
execute_under_siege(v, post, reason, 'flag')
execute_blackjack(v, post, reason, 'flag')
if v.is_muted: abort(403, "You are forbidden from making reports.")
reason = reason[:100]
@ -76,6 +77,7 @@ def flag_comment(cid, v):
if existing: abort(409, "You already reported this comment!")
reason = request.values.get("reason", "").strip()
execute_under_siege(v, comment, reason, 'flag')
execute_blackjack(v, comment, reason, 'flag')
reason = reason[:100]
reason = filter_emojis_only(reason)

View File

@ -231,6 +231,7 @@ def submit_contact(v):
g.db.add(new_comment)
g.db.flush()
execute_blackjack(v, new_comment, new_comment.body_html, 'modmail')
execute_under_siege(v, new_comment, new_comment.body_html, 'modmail')
new_comment.top_comment_id = new_comment.id
admins = g.db.query(User).filter(User.admin_level >= PERMS['NOTIFICATIONS_MODMAIL'], User.id != AEVANN_ID)

View File

@ -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
from files.helpers.actions import execute_blackjack, execute_under_siege
from files.helpers.alerts import *
from files.helpers.const import *
from files.helpers.mail import *
@ -461,6 +461,7 @@ def message2(v, username):
g.db.add(c)
g.db.flush()
execute_blackjack(v, c, c.body_html, 'message')
execute_under_siege(v, c, c.body_html, 'message')
c.top_comment_id = c.id
if user.id not in bots:
@ -536,6 +537,7 @@ def messagereply(v):
g.db.add(c)
g.db.flush()
execute_blackjack(v, c, c.body_html, 'message')
execute_under_siege(v, c, c.body_html, 'message')
if user_id and user_id not in (v.id, 2, bots):
notif = g.db.query(Notification).filter_by(comment_id=c.id, user_id=user_id).one_or_none()

View File

@ -80,7 +80,6 @@ echo "psql -U postgres" > /p
echo "tmux -S /tmp/s a -t 0" > /c
echo "tmux -S /tmp/s a -t 1" > /c2
echo "cd /rDrama && git pull" > /g
echo '{"Bots": true, "Fart mode": false, "Read-only mode": false, "Signups": true, "login_required": false}' > /site_settings.json
cd ./chat
yarn install