mirror of
https://github.com/FAUSheppy/tmnf-replay-server.git
synced 2025-12-06 07:01:37 +01:00
Compare commits
3 Commits
master
...
notificati
| Author | SHA1 | Date | |
|---|---|---|---|
| ccc3122f3c | |||
| 8433e0f47e | |||
| a2ee6065c1 |
24
notifications.py
Normal file
24
notifications.py
Normal file
@@ -0,0 +1,24 @@
|
||||
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"]
|
||||
|
||||
if not url:
|
||||
return
|
||||
|
||||
# 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)
|
||||
39
server.py
39
server.py
@@ -77,6 +77,19 @@ class Map(db.Model):
|
||||
delta = datetime.datetime.now() - parsed
|
||||
return delta.days
|
||||
|
||||
class UserSettings(db.Model):
|
||||
|
||||
__tablename__ = "user_settings"
|
||||
|
||||
user = Column(String, primary_key=True)
|
||||
|
||||
show_tm_2020 = Column(Boolean)
|
||||
show_tmnf = Column(Boolean)
|
||||
show_tm_2020_current = Column(Boolean)
|
||||
|
||||
notifcations_all = Column(Boolean)
|
||||
notifcations_self = Column(Boolean)
|
||||
|
||||
class ParsedReplay(db.Model):
|
||||
|
||||
__tablename__ = "replays"
|
||||
@@ -103,7 +116,7 @@ class ParsedReplay(db.Model):
|
||||
else:
|
||||
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_string = str(t)
|
||||
if t.seconds < 60*60:
|
||||
@@ -390,6 +403,7 @@ def upload():
|
||||
replay = replay_from_path(fullpath, uploader=uploader)
|
||||
db.session.add(replay)
|
||||
db.session.commit()
|
||||
check_replay_trigger(replay)
|
||||
except ValueError as e:
|
||||
results += [(fname, str(e))]
|
||||
continue
|
||||
@@ -405,9 +419,32 @@ def upload():
|
||||
else:
|
||||
return flask.render_template("upload.html")
|
||||
|
||||
def check_replay_trigger(replay):
|
||||
|
||||
map_obj = db.session.get(Map).filter(Map.map_uid == replay.map_uid).first()
|
||||
assert(map_uid)
|
||||
|
||||
best = map_obj.get_best_replay()
|
||||
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():
|
||||
|
||||
db.create_all()
|
||||
|
||||
app.config["DISPATCH_SERVER"] = os.environ.get("DISPATCH_SERVER")
|
||||
if app.config["DISPATCH_SERVER"]:
|
||||
app.config["DISPATCH_AUTH"] = (os.environ["DISPATCH_AUTH_USER"], os.environ["DISPATCH_AUTH_PASSWORD"])
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
parser = argparse.ArgumentParser(description='TM Replay Server',
|
||||
|
||||
Reference in New Issue
Block a user