diff options
Diffstat (limited to 'bot/exts')
| -rw-r--r-- | bot/exts/christmas/advent_of_code/_cog.py | 7 | ||||
| -rw-r--r-- | bot/exts/christmas/advent_of_code/_helpers.py | 22 | ||||
| -rw-r--r-- | bot/exts/evergreen/source.py | 11 | ||||
| -rw-r--r-- | bot/exts/evergreen/trivia_quiz.py | 30 | 
4 files changed, 35 insertions, 35 deletions
| diff --git a/bot/exts/christmas/advent_of_code/_cog.py b/bot/exts/christmas/advent_of_code/_cog.py index ead84544..3d61753b 100644 --- a/bot/exts/christmas/advent_of_code/_cog.py +++ b/bot/exts/christmas/advent_of_code/_cog.py @@ -3,6 +3,7 @@ import logging  from datetime import datetime, timedelta  from pathlib import Path +import arrow  import discord  from discord.ext import commands @@ -100,11 +101,11 @@ class AdventOfCode(commands.Cog):      async def aoc_countdown(self, ctx: commands.Context) -> None:          """Return time left until next day."""          if not _helpers.is_in_advent(): -            datetime_now = datetime.now(_helpers.EST) +            datetime_now = arrow.now(_helpers.EST)              # 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=_helpers.EST) -            next_year = datetime(datetime_now.year + 1, 12, 1, tzinfo=_helpers.EST) +            this_year = arrow.get(datetime(datetime_now.year, 12, 1), _helpers.EST) +            next_year = arrow.get(datetime(datetime_now.year + 1, 12, 1), _helpers.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 diff --git a/bot/exts/christmas/advent_of_code/_helpers.py b/bot/exts/christmas/advent_of_code/_helpers.py index f4a258c0..96de90c4 100644 --- a/bot/exts/christmas/advent_of_code/_helpers.py +++ b/bot/exts/christmas/advent_of_code/_helpers.py @@ -9,8 +9,8 @@ import typing  from typing import Tuple  import aiohttp +import arrow  import discord -import pytz  from bot.bot import Bot  from bot.constants import AdventOfCode, Channels, Colours @@ -48,7 +48,7 @@ AOC_EMBED_THUMBNAIL = (  )  # Create an easy constant for the EST timezone -EST = pytz.timezone("EST") +EST = "America/New_York"  # Step size for the challenge countdown status  COUNTDOWN_STEP = 60 * 5 @@ -395,13 +395,13 @@ def is_in_advent() -> bool:      something for the next Advent of Code challenge should run. As the puzzle      published on the 25th is the last puzzle, this check excludes that date.      """ -    return datetime.datetime.now(EST).day in range(1, 25) and datetime.datetime.now(EST).month == 12 +    return arrow.now(EST).day in range(1, 25) and arrow.now(EST).month == 12  def time_left_to_est_midnight() -> Tuple[datetime.datetime, datetime.timedelta]:      """Calculate the amount of time left until midnight EST/UTC-5."""      # Change all time properties back to 00:00 -    todays_midnight = datetime.datetime.now(EST).replace( +    todays_midnight = arrow.now(EST).replace(          microsecond=0,          second=0,          minute=0, @@ -412,7 +412,7 @@ def time_left_to_est_midnight() -> Tuple[datetime.datetime, datetime.timedelta]:      tomorrow = todays_midnight + datetime.timedelta(days=1)      # Calculate the timedelta between the current time and midnight -    return tomorrow, tomorrow - datetime.datetime.now(EST) +    return tomorrow, tomorrow - arrow.now(EST)  async def wait_for_advent_of_code(*, hours_before: int = 1) -> None: @@ -430,9 +430,9 @@ async def wait_for_advent_of_code(*, hours_before: int = 1) -> None:      if we're already past the Advent of Code edition the bot is currently      configured for.      """ -    start = datetime.datetime(AdventOfCode.year, 12, 1, 0, 0, 0, tzinfo=EST) +    start = arrow.get(datetime.datetime(AdventOfCode.year, 12, 1), EST)      target = start - datetime.timedelta(hours=hours_before) -    now = datetime.datetime.now(EST) +    now = arrow.now(EST)      # If we've already reached or passed to target, we      # simply return immediately. @@ -474,10 +474,10 @@ async def countdown_status(bot: Bot) -> None:      # sleeping for the entire year, it will only wait in the currently      # configured year. This means that the task will only start hibernating once      # we start preparing the next event by changing environment variables. -    last_challenge = datetime.datetime(AdventOfCode.year, 12, 25, 0, 0, 0, tzinfo=EST) +    last_challenge = arrow.get(datetime.datetime(AdventOfCode.year, 12, 25), EST)      end = last_challenge + datetime.timedelta(hours=1) -    while datetime.datetime.now(EST) < end: +    while arrow.now(EST) < end:          _, time_left = time_left_to_est_midnight()          aligned_seconds = int(math.ceil(time_left.seconds / COUNTDOWN_STEP)) * COUNTDOWN_STEP @@ -534,8 +534,8 @@ async def new_puzzle_notification(bot: Bot) -> None:      # The last event day is 25 December, so we only have to schedule      # a reminder if the current day is before 25 December. -    end = datetime.datetime(AdventOfCode.year, 12, 25, tzinfo=EST) -    while datetime.datetime.now(EST) < end: +    end = arrow.get(datetime.datetime(AdventOfCode.year, 12, 25), EST) +    while arrow.now(EST) < end:          log.trace("Started puzzle notification loop.")          tomorrow, time_left = time_left_to_est_midnight() diff --git a/bot/exts/evergreen/source.py b/bot/exts/evergreen/source.py index 8fb72143..fc209bc3 100644 --- a/bot/exts/evergreen/source.py +++ b/bot/exts/evergreen/source.py @@ -33,7 +33,8 @@ class BotSource(commands.Cog):          Raise BadArgument if `source_item` is a dynamically-created object (e.g. via internal eval).          """          if isinstance(source_item, commands.Command): -            src = source_item.callback.__code__ +            callback = inspect.unwrap(source_item.callback) +            src = callback.__code__              filename = src.co_filename          else:              src = type(source_item) @@ -64,12 +65,8 @@ class BotSource(commands.Cog):          url, location, first_line = self.get_source_link(source_object)          if isinstance(source_object, commands.Command): -            if source_object.cog_name == "Help": -                title = "Help Command" -                description = source_object.__doc__.splitlines()[1] -            else: -                description = source_object.short_doc -                title = f"Command: {source_object.qualified_name}" +            description = source_object.short_doc +            title = f"Command: {source_object.qualified_name}"          else:              title = f"Cog: {source_object.qualified_name}"              description = source_object.description.splitlines()[0] diff --git a/bot/exts/evergreen/trivia_quiz.py b/bot/exts/evergreen/trivia_quiz.py index 419126dc..a8d10afd 100644 --- a/bot/exts/evergreen/trivia_quiz.py +++ b/bot/exts/evergreen/trivia_quiz.py @@ -465,22 +465,24 @@ class TriviaQuiz(commands.Cog):          Note: Only mods or the owner of the quiz can stop it.          """ -        if self.game_status[ctx.channel.id] is True: -            # Check if the author is the game starter or a moderator. -            if ctx.author == self.game_owners[ctx.channel.id] or any( -                Roles.moderator == role.id for role in ctx.author.roles -            ): - -                await ctx.send("Quiz stopped.") -                await self.declare_winner(ctx.channel, self.game_player_scores[ctx.channel.id]) - -                self.game_status[ctx.channel.id] = False -                del self.game_owners[ctx.channel.id] -                self.game_player_scores[ctx.channel.id] = {} +        try: +            if self.game_status[ctx.channel.id]: +                # Check if the author is the game starter or a moderator. +                if ctx.author == self.game_owners[ctx.channel.id] or any( +                    Roles.moderator == role.id for role in ctx.author.roles +                ): +                    self.game_status[ctx.channel.id] = False +                    del self.game_owners[ctx.channel.id] +                    self.game_player_scores[ctx.channel.id] = {} + +                    await ctx.send("Quiz stopped.") +                    await self.declare_winner(ctx.channel, self.game_player_scores[ctx.channel.id]) +                else: +                    await ctx.send(f"{ctx.author.mention}, you are not authorised to stop this game :ghost:!")              else: -                await ctx.send(f"{ctx.author.mention}, you are not authorised to stop this game :ghost:!") -        else: +                await ctx.send("No quiz running.") +        except KeyError:              await ctx.send("No quiz running.")      @quiz_game.command(name="leaderboard") | 
