flash / Database /sql /afk_sql.py
Karma
Add files via upload
f45efbd
raw
history blame
2.25 kB
import threading
from datetime import datetime
from sqlalchemy import BigInteger, Boolean, Column, DateTime, UnicodeText
from Database.sql import BASE, SESSION
class AFK(BASE):
__tablename__ = "afk_user"
user_id = Column(BigInteger, primary_key=True)
is_afk = Column(Boolean)
reason = Column(UnicodeText)
time = Column(DateTime)
def __init__(self, user_id: int, reason: str = "", is_afk: bool = True):
self.user_id = user_id
self.reason = reason
self.is_afk = is_afk
self.time = datetime.now()
def __repr__(self):
return "afk_status for {}".format(self.user_id)
AFK.__table__.create(checkfirst=True)
INSERTION_LOCK = threading.RLock()
AFK_USERS = {}
def is_afk(user_id):
return user_id in AFK_USERS
def check_afk_status(user_id):
try:
return SESSION.query(AFK).get(user_id)
finally:
SESSION.close()
def set_afk(user_id, reason=""):
with INSERTION_LOCK:
curr = SESSION.query(AFK).get(user_id)
if not curr:
curr = AFK(user_id, reason, True)
else:
curr.is_afk = True
AFK_USERS[user_id] = {"reason": reason, "time": curr.time}
SESSION.add(curr)
SESSION.commit()
def rm_afk(user_id):
with INSERTION_LOCK:
curr = SESSION.query(AFK).get(user_id)
if curr:
if user_id in AFK_USERS: # sanity check
del AFK_USERS[user_id]
SESSION.delete(curr)
SESSION.commit()
return True
SESSION.close()
return False
def toggle_afk(user_id, reason=""):
with INSERTION_LOCK:
curr = SESSION.query(AFK).get(user_id)
if not curr:
curr = AFK(user_id, reason, True)
elif curr.is_afk:
curr.is_afk = False
elif not curr.is_afk:
curr.is_afk = True
SESSION.add(curr)
SESSION.commit()
def __load_afk_users():
global AFK_USERS
try:
all_afk = SESSION.query(AFK).all()
AFK_USERS = {
user.user_id: {"reason": user.reason, "time": user.time}
for user in all_afk
if user.is_afk
}
finally:
SESSION.close()
__load_afk_users()