(stats): Rewrite to include session data.

Complete `stats` command rewrite to include session data.
Added `get_member_rank` query to get accurate time and coin ranks.
This commit is contained in:
2021-12-06 20:48:28 +02:00
parent 179b6ebf4e
commit 971446ffb5
2 changed files with 255 additions and 42 deletions

View File

@@ -50,8 +50,6 @@ lions = RowTable(
attach_as='lions'
)
lion_ranks = Table('member_ranks', attach_as='lion_ranks')
@lions.save_query
def add_pending(pending):
@@ -83,6 +81,35 @@ def add_pending(pending):
return lions._make_rows(*data)
lion_ranks = Table('member_ranks', attach_as='lion_ranks')
@lions.save_query
def get_member_rank(guildid, userid, untracked):
"""
Get the time and coin ranking for the given member, ignoring the provided untracked members.
"""
with lions.conn as conn:
with conn.cursor() as curs:
curs.execute(
"""
SELECT
time_rank, coin_rank
FROM (
SELECT
userid,
row_number() OVER (ORDER BY total_tracked_time DESC, userid ASC) AS time_rank,
row_number() OVER (ORDER BY total_coins DESC, userid ASC) AS coin_rank
FROM members_totals
WHERE
guildid=%s AND userid NOT IN %s
) AS guild_ranks WHERE userid=%s
""",
(guildid, tuple(untracked), userid)
)
return curs.fetchone() or (None, None)
global_guild_blacklist = Table('global_guild_blacklist')
global_user_blacklist = Table('global_user_blacklist')
ignored_members = Table('ignored_members')