import eventlet from modules.track.logging import log from modules.data.database import connect as db_connect from modules.data.config import read as config_read from modules.data.datetime import timestamp from modules.handler import outgoing from modules.user.content import notification from modules.user.info import auth as auth_info from modules.start.start import final_startup def user_service(sio, sid): user_id = sio.get_session(sid)['id'] db = db_connect() db.create(None) log("INFO", f"Starting user service for {user_id}") while True: eventlet.sleep(30) user_notification_service(db, sio, sid, user_id) def user_notification_service(db_con, sio, sid, user_id): notifications = notification(user_id=user_id) notifications.columns = ['notification_id','title', 'content'] username = auth_info(user_id=user_id).get()['username'] notif_queue = notifications.get_unsent()['notifications'] if notif_queue: for notif in notif_queue: outgoing.send_notification(sio, notif, sid, username) db_con.cur.execute("UPDATE notifications_sent SET time_sent = ?, sent = ? WHERE user_id = ? AND notification_id = ?", (timestamp().now, True, user_id, notif['notification_id'])) db_con.commit() def post_time_notification(): if timestamp().is_valid_time(): log("INFO", "Sending post time notifications") post_time_limit = int(config_read('posts', 'posttimelimit')) title = "post-" + config_read('miscellaneous', 'ServerCode') content = f"you have {post_time_limit} minutes to post" target = "all-" + config_read('miscellaneous', 'ServerCode') # notifications has a sepcial code for sending notifications accross the server # if the target is set to "all-" the entire server is notified notification_data = {'title': title, 'content': content, 'target_id': target, "expire_after": post_time_limit*60} notification().create(notification_data) notification_created = True log("INFO", "Sent post time notifications") else: notification_created = False return notification_created def notification_remove(db_con): db_con.cur.execute("SELECT notification_id, time_created, expire_after FROM notifications") rez = db_con.cur.fetchall() if rez: for notif in rez: if notif[1] + notif[2] < timestamp().now: notification(notification_id=notif[0]).delete() def startup_notif(): server_code = config_read('miscellaneous', 'servercode') notif_data = {'target_id': "all-"+server_code, 'title': "Server is up", 'content': "The server is now on and functioning", 'expire_after': 180} notification().create(notif_data) def server_service(session): db = db_connect() db.create(None) log("INFO", f"Starting server background service") while session.mode != "normal": eventlet.sleep(1) log("INFO", "Server mode normal, continuing startup") final_startup(session) startup_notif() while True: # keeps the service running forever post_notification = False post_notif_title = "post-" + config_read('miscellaneous','ServerCode') db.cur.execute("SELECT time_created FROM notifications WHERE title=?", (post_notif_title,)) rez = db.cur.fetchall() if rez: for notif in rez: if timestamp().start < notif[0] and timestamp().end > notif[0]: post_notification = True today_end = timestamp().end while timestamp().now < today_end: # keeps running this loop until the end of the day then it returns to the while above on the start of the new day #print(f"now: {timestamp().now}") eventlet.sleep(10) # removes expired notifications notification_remove(db) if not post_notification: post_notification = post_time_notification()