This commit is contained in:
2024-01-13 04:08:18 +01:00
parent a2ee6065c1
commit 8433e0f47e
2 changed files with 39 additions and 6 deletions

21
notifications.py Normal file
View File

@@ -0,0 +1,21 @@
import sys
import requests
def send_notification(app, target_user, mapname, old_replay, new_replay):
'''Build notification and handoff to dispatcher'''
url = app.config["DISPATCH_SERVER"]
# send to event dispatcher #
message = "Trackmania: Record broken on {}".format(mapname)
message += "Old time: {}".format(old_replay.get_human_readable_time())
message += "New time: {}".format(new_replay.get_human_readable_time())
message += "by {}".format(new_replay.clean_login())
payload = { "users": [user], "msg" : message }
r = requests.post(app.config["DISPATCH_SERVER"] + "/smart-send",
json=payload, auth=app.config["DISPATCH_AUTH"])
if not r.ok:
print("Error handing off notification to dispatch ({})".format(r.status_code), file=sys.stderr)

View File

@@ -81,6 +81,8 @@ class UserSettings(db.Model):
__tablename__ = "user_settings" __tablename__ = "user_settings"
user = Column(String, primary_key=True)
show_tm_2020 = Column(Boolean) show_tm_2020 = Column(Boolean)
show_tmnf = Column(Boolean) show_tmnf = Column(Boolean)
show_tm_2020_current = Column(Boolean) show_tm_2020_current = Column(Boolean)
@@ -114,7 +116,7 @@ class ParsedReplay(db.Model):
else: else:
return self.login return self.login
def get_human_readable_time(self): def get_human_readable_time(self, thousands=False):
t = datetime.timedelta(microseconds=self.race_time*1000) t = datetime.timedelta(microseconds=self.race_time*1000)
t_string = str(t) t_string = str(t)
if t.seconds < 60*60: if t.seconds < 60*60:
@@ -419,11 +421,21 @@ def upload():
def check_replay_trigger(replay): def check_replay_trigger(replay):
# get replay rank map_obj = db.session.get(Map).filter(Map.map_uid == replay.map_uid).first()
# get second best assert(map_uid)
# uploader = second best owner
# check notifications on best = map_obj.get_best_replay()
# request to dispatch second = map_obj.get_second_best_replay()
if replay.filehash != best.filehash:
return
if second.uploader == replay.uploader:
return
settings = db.session.query(UserSettings).filter(UserSettings.user == second.uploader).first()
if settings and settings.notifcations_self:
notifications.send_notification(app, settings.user, map_obj.map_uid, second, replay)
def create_app(): def create_app():
db.create_all() db.create_all()