From bb181d90395f3168f1c5351fa94d2dd18f76534b Mon Sep 17 00:00:00 2001 From: Conatum Date: Sat, 4 Dec 2021 11:13:26 +0200 Subject: [PATCH] (badges): Update to account for session tracker. Include current sessions in new badge scans. Remove the voice update badge hook. Account for current session in the current badge view. --- bot/modules/study/badges/badge_tracker.py | 18 +++--------------- data/migration/v5-v6/migration.sql | 2 +- data/schema.sql | 2 +- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/bot/modules/study/badges/badge_tracker.py b/bot/modules/study/badges/badge_tracker.py index 34e97c3a..2c0d33fb 100644 --- a/bot/modules/study/badges/badge_tracker.py +++ b/bot/modules/study/badges/badge_tracker.py @@ -8,7 +8,6 @@ import discord from meta import client from data.conditions import GEQ -from core import Lion from core.data import lions from utils.lib import strfdur from settings import GuildSettings @@ -56,7 +55,8 @@ async def update_study_badges(full=False): # Retrieve member rows with out of date study badges if not full and client.appdata.last_study_badge_scan is not None: update_rows = new_study_badges.select_where( - _timestamp=GEQ(client.appdata.last_study_badge_scan or 0) + _timestamp=GEQ(client.appdata.last_study_badge_scan or 0), + _extra="OR session_start IS NOT NULL" ) else: update_rows = new_study_badges.select_where() @@ -287,7 +287,6 @@ async def study_badge_tracker(): """ while True: try: - Lion.sync() await update_study_badges() except Exception: # Unknown exception. Catch it so the loop doesn't die. @@ -304,11 +303,10 @@ async def study_badge_tracker(): await asyncio.sleep(60) -async def _update_member_studybadge(member): +async def update_member_studybadge(member): """ Checks and (if required) updates the study badge for a single member. """ - Lion.fetch(member.guild.id, member.id).flush() update_rows = new_study_badges.select_where( guildid=member.guild.id, userid=member.id @@ -332,16 +330,6 @@ async def _update_member_studybadge(member): await _update_guild_badges(member.guild, update_rows) -@client.add_after_event("voice_state_update") -async def voice_studybadge_updater(client, member, before, after): - if not client.is_ready(): - # The poll loop will pick it up - return - - if before.channel and not after.channel: - await _update_member_studybadge(member) - - @module.launch_task async def launch_study_badge_tracker(client): asyncio.create_task(study_badge_tracker()) diff --git a/data/migration/v5-v6/migration.sql b/data/migration/v5-v6/migration.sql index 3e64007a..99fcefbf 100644 --- a/data/migration/v5-v6/migration.sql +++ b/data/migration/v5-v6/migration.sql @@ -125,7 +125,7 @@ CREATE VIEW current_study_badges AS *, (SELECT r.badgeid FROM study_badges r - WHERE r.guildid = members_totals.guildid AND members_totals.tracked_time > r.required_time + WHERE r.guildid = members_totals.guildid AND members_totals.total_tracked_time > r.required_time ORDER BY r.required_time DESC LIMIT 1) AS current_study_badgeid FROM members_totals; diff --git a/data/schema.sql b/data/schema.sql index 9f821f01..230f462c 100644 --- a/data/schema.sql +++ b/data/schema.sql @@ -563,7 +563,7 @@ CREATE VIEW current_study_badges AS *, (SELECT r.badgeid FROM study_badges r - WHERE r.guildid = members_totals.guildid AND members_totals.tracked_time > r.required_time + WHERE r.guildid = members_totals.guildid AND members_totals.total_tracked_time > r.required_time ORDER BY r.required_time DESC LIMIT 1) AS current_study_badgeid FROM members_totals;