From 6eba45800046864e1450130c8e29ad314faa0dcd Mon Sep 17 00:00:00 2001 From: Ersatz Date: Sun, 24 Oct 2021 18:32:06 -0700 Subject: [PATCH] Fixed more instances of timezone unaware utcnow() and updated StatusDetails to use datetime_to_int() --- commanderbot/core/commander_bot.py | 7 +++--- commanderbot/ext/status/status_cog.py | 4 ++-- commanderbot/ext/status/status_details.py | 29 ++++++++++++----------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/commanderbot/core/commander_bot.py b/commanderbot/core/commander_bot.py index 1e50ee8..0627df2 100644 --- a/commanderbot/core/commander_bot.py +++ b/commanderbot/core/commander_bot.py @@ -13,6 +13,7 @@ EventErrorHandler, ) from commanderbot.lib import AllowedMentions, EventData, Intents +from commanderbot.lib.utils.utils import utcnow_aware class CommanderBot(CommanderBotBase): @@ -37,7 +38,7 @@ def __init__(self, *args, **kwargs): self.log: Logger = getLogger("CommanderBot") # Remember when we started and the last time we connected. - self._started_at: datetime = datetime.utcnow() + self._started_at: datetime = utcnow_aware() self._connected_since: Optional[datetime] = None # Create an error handling component. @@ -101,7 +102,7 @@ def connected_since(self) -> Optional[datetime]: @property def uptime(self) -> Optional[timedelta]: if self.connected_since is not None: - return datetime.utcnow() - self.connected_since + return utcnow_aware() - self.connected_since # @implements CommanderBotBase def get_extension_options(self, ext_name: str) -> Optional[Dict[str, Any]]: @@ -119,7 +120,7 @@ def add_command_error_handler(self, handler: CommandErrorHandler): # @overrides Bot async def on_connect(self): self.log.warning("Connected to Discord.") - self._connected_since = datetime.utcnow() + self._connected_since = utcnow_aware() # @overrides Bot async def on_disconnect(self): diff --git a/commanderbot/ext/status/status_cog.py b/commanderbot/ext/status/status_cog.py index c2a233a..cb22ee4 100644 --- a/commanderbot/ext/status/status_cog.py +++ b/commanderbot/ext/status/status_cog.py @@ -13,7 +13,7 @@ async def cmd_status(self, ctx: Context): status_details = StatusDetails(self.bot) status_embed: Embed = Embed(color=0x00ACED) - for k, v in status_details.rows.items(): - status_embed.add_field(name=f"{k}", value=f"{v}") + for k, v in status_details.fields.items(): + status_embed.add_field(name=k, value=v) await ctx.send(embed=status_embed) diff --git a/commanderbot/ext/status/status_details.py b/commanderbot/ext/status/status_details.py index 31205bb..f403b4f 100644 --- a/commanderbot/ext/status/status_details.py +++ b/commanderbot/ext/status/status_details.py @@ -1,12 +1,13 @@ import re import sys -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta from importlib.metadata import version from typing import Dict, Optional from discord.ext.commands import Bot from commanderbot.core.utils import check_commander_bot +from commanderbot.lib.utils.datetimes import datetime_to_int class StatusDetails: @@ -32,12 +33,6 @@ def __init__(self, bot: Bot): self.last_reconnect = cb.connected_since self.uptime = cb.uptime - def _get_epoch(self, dt: Optional[datetime]) -> Optional[int]: - if dt: - return int(dt.replace(tzinfo=timezone.utc).timestamp()) - else: - return None - def _format_timedelta(self, td: Optional[timedelta]) -> Optional[str]: if not td: return None @@ -49,14 +44,20 @@ def _format_timedelta(self, td: Optional[timedelta]) -> Optional[str]: return f"0d {times[0]}h {times[1]}m {times[2]}s" @property - def rows(self) -> Dict[str, str]: - all_rows = { + def fields(self) -> Dict[str, str]: + all_fields = { "Python version": f"`{self.python_version}`", "Discord.py version": f"`{self.discord_py_version}`", "CommanderBot version": f"`{self.commanderbot_version}`", - "Started": f"", - "Last reconnect": f"", - "Uptime": f"`{self._format_timedelta(self.uptime)}`", } - non_empty_rows = {k: v for k, v in all_rows.items() if v} - return non_empty_rows + + if dt := self.started_at: + all_fields["Started"] = f"" + + if dt := self.last_reconnect: + all_fields["Last reconnect"] = f"" + + if td := self.uptime: + all_fields["Uptime"] = f"`{self._format_timedelta(td)}`" + + return all_fields