diff options
author | 2019-11-30 15:42:38 -0500 | |
---|---|---|
committer | 2019-11-30 15:42:38 -0500 | |
commit | cff62e0baf1eb3c6105431c695ef3b0e679576db (patch) | |
tree | dc1b68ee73b15b32ebfd12f1001d1603a7d47d2a | |
parent | Update icon path for 2019 festive season (#316) (diff) |
Fix AOC countdown logic
The current time delta until the next AOC event assumes that the next event is next year's. While this is was a safe assumption when written, since the command would not be available until the season is loaded on December 1st, it provides an incorrect answer if the season is loaded prior. The logic has been adjusted to return the closest December 1st that is not in the past.
The feedback string has also been adjusted to give hours remaining if we're less than a day away from the event starting.
-rw-r--r-- | bot/seasons/christmas/adventofcode.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/bot/seasons/christmas/adventofcode.py b/bot/seasons/christmas/adventofcode.py index 007e4783..bbfe0a69 100644 --- a/bot/seasons/christmas/adventofcode.py +++ b/bot/seasons/christmas/adventofcode.py @@ -170,10 +170,21 @@ class AdventOfCode(commands.Cog): """Return time left until next day.""" if not is_in_advent(): datetime_now = datetime.now(EST) - december_first = datetime(datetime_now.year + 1, 12, 1, tzinfo=EST) - delta = december_first - datetime_now + + # Calculate the delta to this & next year's December 1st to see which one is closest and not in the past + this_year = datetime(datetime_now.year, 12, 1, tzinfo=EST) + next_year = datetime(datetime_now.year + 1, 12, 1, tzinfo=EST) + deltas = (dec_first - datetime_now for dec_first in (this_year, next_year)) + delta = min(delta for delta in deltas if delta >= timedelta()) # timedelta() gives 0 duration delta + + # Add a finer timedelta if there's less than a day left + if delta.days == 0: + delta_str = f"approximately {delta.seconds // 3600} hours" + else: + delta_str = f"{delta.days} days" + await ctx.send(f"The Advent of Code event is not currently running. " - f"The next event will start in {delta.days} days.") + f"The next event will start in {delta_str}.") return tomorrow, time_left = time_left_to_aoc_midnight() |