From 3207ccfd987fec5a7c3ec04247212884229b3184 Mon Sep 17 00:00:00 2001 From: Aevann Date: Fri, 23 Feb 2024 18:19:18 +0200 Subject: [PATCH] add 4chan offsite mentions --- files/classes/user.py | 2 +- files/helpers/cron.py | 4 ++ files/helpers/offsite_mentions/fourchan.py | 50 ++++++++++++++++++++++ files/routes/notifications.py | 2 +- 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 files/helpers/offsite_mentions/fourchan.py diff --git a/files/classes/user.py b/files/classes/user.py index 52ffe622f..aba6b3439 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -891,7 +891,7 @@ class User(Base): return g.db.query(Comment).filter( Comment.created_utc > self.last_viewed_offsite_notifs, Comment.is_banned == False, Comment.deleted_utc == 0, - Comment.body_html.like('%

New site mention by New site mention by%'), Comment.parent_post == None, Comment.author_id == AUTOJANNY_ID).count() @property diff --git a/files/helpers/cron.py b/files/helpers/cron.py index e7ed20724..fd7fca78c 100644 --- a/files/helpers/cron.py +++ b/files/helpers/cron.py @@ -28,6 +28,7 @@ from files.helpers.sanitize import filter_emojis_only, sanitize from files.helpers.useractions import * from files.helpers.offsite_mentions.reddit import * from files.helpers.offsite_mentions.lemmy import * +from files.helpers.offsite_mentions.fourchan import * from files.cli import app, db_session, g @@ -66,6 +67,9 @@ def cron_fn(every_5m, every_1d, every_1mo): lemmy_mentions_task() g.db.commit() + fourchan_mentions_task() + g.db.commit() + if every_1d or (not cache.get('stats') and not IS_LOCALHOST): if IS_HOMOWEEN(): g.db.execute(text( diff --git a/files/helpers/offsite_mentions/fourchan.py b/files/helpers/offsite_mentions/fourchan.py new file mode 100644 index 000000000..36ca36809 --- /dev/null +++ b/files/helpers/offsite_mentions/fourchan.py @@ -0,0 +1,50 @@ +import requests +from flask import g + +from files.helpers.config.const import * +from files.classes.comment import Comment +from files.helpers.sanitize import * +from files.helpers.alerts import push_notif +from files.classes.notifications import Notification + +def fourchan_mentions_task(): + queries = OFFSITE_NOTIF_QUERIES - {'r/drama'} + for q in queries: + url = f'https://archived.moe/_/api/chan/search?text={q}' + data = requests.get(url, headers=HEADERS, timeout=5).json()['0']['posts'] + + for thing in data: + board = thing['board']['shortname'] + author_string = thing['name'] + num = thing["num"] + thread_num = thing["thread_num"] + + if num != thread_num: + text = f'

{thing["comment"]}

' + permalink = f'https://archived.moe/{board}/thread/{thread_num}/#{num}' + else: + text = f'

{thing["title"]}


{thing["comment"]}

' + permalink = f'https://archived.moe/{board}/thread/{thread_num}' + + text = f'New site mention by {author_string}\n\n{permalink}\n\n{text}' + text = sanitize(text, blackjack="fourchan mention", golden=False) + + existing_comment = g.db.query(Comment.id).filter_by( + author_id=AUTOJANNY_ID, + parent_post=None, + body_html=text).one_or_none() + if existing_comment: break + + created_utc = thing["timestamp"] + + new_comment = Comment( + author_id=AUTOJANNY_ID, + parent_post=None, + body_html=text, + distinguished=True, + created_utc=created_utc, + ) + + g.db.add(new_comment) + g.db.flush() + new_comment.top_comment_id = new_comment.id diff --git a/files/routes/notifications.py b/files/routes/notifications.py index 13ee9625b..591a112e5 100644 --- a/files/routes/notifications.py +++ b/files/routes/notifications.py @@ -278,7 +278,7 @@ def notifications_offsite(v): if not v.can_view_offsite_mentions: abort(403) listing = g.db.query(Comment).filter( - Comment.body_html.like('%

New site mention by New site mention by%'), Comment.parent_post == None, Comment.author_id == AUTOJANNY_ID )