Move tracking online users to redis

This commit is contained in:
Jeremy Zhang
2018-01-21 03:14:25 +00:00
parent 6b1c6179d1
commit 2c949d911b
9 changed files with 66 additions and 36 deletions

View File

@ -138,7 +138,7 @@ def update_user_status(guild_id, username, user_key=None):
session['user_keys'].pop(guild_id, None)
return status
dbUser = UnauthenticatedUsers.query.filter(and_(UnauthenticatedUsers.guild_id == guild_id, UnauthenticatedUsers.user_key == user_key)).first()
dbUser.bumpTimestamp()
bump_user_presence_timestamp(guild_id, "UnauthenticatedUsers", user_key)
if dbUser.username != username or dbUser.ip_address != ip_address:
dbUser.username = username
dbUser.ip_address = ip_address
@ -161,10 +161,28 @@ def update_user_status(guild_id, username, user_key=None):
dbMember = get_guild_member(guild_id, status["user_id"])
if dbMember:
status["nickname"] = dbMember.nickname
dbUser = db.session.query(AuthenticatedUsers).filter(and_(AuthenticatedUsers.guild_id == guild_id, AuthenticatedUsers.client_id == status['user_id'])).first()
dbUser.bumpTimestamp()
bump_user_presence_timestamp(guild_id, "AuthenticatedUsers", status["user_id"])
return status
def bump_user_presence_timestamp(guild_id, user_type, client_key):
redis_key = "MemberPresence/{}/{}/{}".format(guild_id, user_type, client_key)
redis_store.set(redis_key, "", 15)
def get_online_embed_user_keys(guild_id="*", user_type=None):
if not user_type:
user_type = ["AuthenticatedUsers", "UnauthenticatedUsers"]
else:
user_type = [user_type]
usrs = {}
for utype in user_type:
usrs[utype] = []
keys = redis_store.keys("MemberPresence/{}/{}/*".format(guild_id, utype))
for key in keys:
key = str(key, "utf-8")
client_key = key.split("/")[-1]
usrs[utype].append(client_key)
return usrs
def check_user_in_guild(guild_id):
if user_unauthenticated():
return guild_id in session.get("user_keys", {})