forked from rDrama/rDrama
1
0
Fork 0

refactor push notifs

master
Aevann1 2022-06-27 21:02:24 +02:00
parent 73190a8164
commit a0cb5874cc
4 changed files with 61 additions and 89 deletions

View File

@ -3,6 +3,8 @@ from flask import g
from .sanitize import * from .sanitize import *
from .const import * from .const import *
from .regex import * from .regex import *
from pusher_push_notifications import PushNotifications
from sys import stdout
def create_comment(text_html, autojanny=False): def create_comment(text_html, autojanny=False):
if autojanny: author_id = AUTOJANNY_ID if autojanny: author_id = AUTOJANNY_ID
@ -134,3 +136,32 @@ def notify_mod_action(by_id, msg):
for admin in send_to: for admin in send_to:
notif = Notification(comment_id=new_comment.id, user_id=admin.id) notif = Notification(comment_id=new_comment.id, user_id=admin.id)
g.db.add(notif) g.db.add(notif)
if PUSHER_ID != 'blahblahblah':
beams_client = PushNotifications(instance_id=PUSHER_ID, secret_key=PUSHER_KEY)
def pusher_thread(interests, title, notifbody, url):
beams_client.publish_to_interests(
interests=[interests],
publish_body={
'web': {
'notification': {
'title': title,
'body': notifbody,
'deep_link': url,
'icon': f'{SITE_FULL}/assets/images/{SITE_NAME}/icon.webp?v=1015',
}
},
'fcm': {
'notification': {
'title': title,
'body': notifbody,
},
'data': {
'url': url,
}
}
},
)
stdout.flush()

View File

@ -10,6 +10,8 @@ import files.routes.static as route_static
from files.routes.subs import sub_inactive_purge_task from files.routes.subs import sub_inactive_purge_task
from files.routes.admin import give_monthly_marseybux_task from files.routes.admin import give_monthly_marseybux_task
from sys import stdout
@app.cli.command('cron', help='Run scheduled tasks.') @app.cli.command('cron', help='Run scheduled tasks.')
@click.option('--every-5m', is_flag=True, help='Call every 5 minutes.') @click.option('--every-5m', is_flag=True, help='Call every 5 minutes.')
@click.option('--every-1h', is_flag=True, help='Call every 1 hour.') @click.option('--every-1h', is_flag=True, help='Call every 1 hour.')
@ -35,3 +37,4 @@ def cron(every_5m, every_1h, every_1d, every_1mo):
g.db.commit() g.db.commit()
g.db.close() g.db.close()
stdout.flush()

View File

@ -11,7 +11,6 @@ from files.helpers.get import *
from files.classes import * from files.classes import *
from files.routes.front import comment_idlist from files.routes.front import comment_idlist
from files.routes.static import marsey_list from files.routes.static import marsey_list
from pusher_push_notifications import PushNotifications
from flask import * from flask import *
from files.__main__ import app, limiter from files.__main__ import app, limiter
from files.helpers.sanitize import filter_emojis_only from files.helpers.sanitize import filter_emojis_only
@ -21,44 +20,12 @@ from json import loads
from collections import Counter from collections import Counter
from enchant import Dict from enchant import Dict
import gevent import gevent
from sys import stdout
import os import os
d = Dict("en_US") d = Dict("en_US")
if PUSHER_ID != 'blahblahblah':
beams_client = PushNotifications(instance_id=PUSHER_ID, secret_key=PUSHER_KEY)
WORDLE_COLOR_MAPPINGS = {-1: "🟥", 0: "🟨", 1: "🟩"} WORDLE_COLOR_MAPPINGS = {-1: "🟥", 0: "🟨", 1: "🟩"}
def pusher_thread(interests, c, username):
if len(c.body) > 500: notifbody = c.body[:500] + '...'
else: notifbody = c.body
beams_client.publish_to_interests(
interests=[interests],
publish_body={
'web': {
'notification': {
'title': f'New reply by @{username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/comment/{c.id}?context=8&read=true#context',
'icon': f'{SITE_FULL}/assets/images/{SITE_NAME}/icon.webp?v=1015',
}
},
'fcm': {
'notification': {
'title': f'New reply by @{username}',
'body': notifbody,
},
'data': {
'url': f'/comment/{c.id}?context=8&read=true#context',
}
}
},
)
stdout.flush()
@app.get("/comment/<cid>") @app.get("/comment/<cid>")
@app.get("/post/<pid>/<anything>/<cid>") @app.get("/post/<pid>/<anything>/<cid>")
@app.get("/h/<sub>/comment/<cid>") @app.get("/h/<sub>/comment/<cid>")
@ -597,9 +564,17 @@ def api_comment(v):
n = Notification(comment_id=c.id, user_id=x) n = Notification(comment_id=c.id, user_id=x)
g.db.add(n) g.db.add(n)
if parent.author.id != v.id and PUSHER_ID != 'blahblahblah' and not v.shadowbanned: if parent.author.id != v.id and PUSHER_ID != 'blahblahblah' and not v.shadowbanned:
try: gevent.spawn(pusher_thread, f'{request.host}{parent.author.id}', c, c.author_name) interests = f'{request.host}{parent.author.id}'
except: pass
title = f'New reply by @{c.author_name}'
if len(c.body) > 500: notifbody = c.body[:500] + '...'
else: notifbody = c.body
url = f'{SITE_FULL}/comment/{c.id}?context=8&read=true#context'
gevent.spawn(pusher_thread, interests, title, notifbody, url)

View File

@ -11,39 +11,11 @@ from flask import *
from files.__main__ import app, limiter, db_session from files.__main__ import app, limiter, db_session
import sqlalchemy import sqlalchemy
from sqlalchemy import text from sqlalchemy import text
from pusher_push_notifications import PushNotifications
from collections import Counter from collections import Counter
import gevent import gevent
from sys import stdout from sys import stdout
import os import os
if PUSHER_ID != 'blahblahblah':
beams_client = PushNotifications(instance_id=PUSHER_ID, secret_key=PUSHER_KEY)
def pusher_thread2(interests, notifbody, username):
beams_client.publish_to_interests(
interests=[interests],
publish_body={
'web': {
'notification': {
'title': f'New message from @{username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/notifications?messages=true',
'icon': f'{SITE_FULL}/assets/images/{SITE_NAME}/icon.webp?v=1015',
}
},
'fcm': {
'notification': {
'title': f'New message from @{username}',
'body': notifbody,
},
'data': {
'url': '/notifications?messages=true',
}
}
},
)
stdout.flush()
def leaderboard_thread(): def leaderboard_thread():
global users9, users9_25, users13, users13_25 global users9, users9_25, users13, users13_25
@ -708,11 +680,16 @@ def message2(v, username):
if PUSHER_ID != 'blahblahblah' and not v.shadowbanned: if PUSHER_ID != 'blahblahblah' and not v.shadowbanned:
interests = f'{request.host}{user.id}'
title = f'New message from @{username}'
if len(message) > 500: notifbody = message[:500] + '...' if len(message) > 500: notifbody = message[:500] + '...'
else: notifbody = message else: notifbody = message
try: gevent.spawn(pusher_thread2, f'{request.host}{user.id}', notifbody, v.username) url = f'{SITE_FULL}/notifications?messages=true'
except: pass
gevent.spawn(pusher_thread, interests, title, notifbody, url)
return {"message": "Message sent!"} return {"message": "Message sent!"}
@ -774,31 +751,17 @@ def messagereply(v):
g.db.delete(n) g.db.delete(n)
if PUSHER_ID != 'blahblahblah' and not v.shadowbanned: if PUSHER_ID != 'blahblahblah' and not v.shadowbanned:
interests = f'{request.host}{user_id}'
title = f'New message from @{v.username}'
if len(body) > 500: notifbody = body[:500] + '...' if len(body) > 500: notifbody = body[:500] + '...'
else: notifbody = body else: notifbody = body
beams_client.publish_to_interests( url = f'{SITE_FULL}/notifications?messages=true'
interests=[f'{request.host}{user_id}'],
publish_body={ gevent.spawn(pusher_thread, interests, title, notifbody, url)
'web': {
'notification': {
'title': f'New message from @{v.username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/notifications?messages=true',
'icon': f'{SITE_FULL}/assets/images/{SITE_NAME}/icon.webp"a=1015',
}
},
'fcm': {
'notification': {
'title': f'New message from @{v.username}',
'body': notifbody,
},
'data': {
'url': '/notifications?messages=true',
}
}
},
)
if c.top_comment.sentto == 2: if c.top_comment.sentto == 2: