Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions commanderbot/core/commander_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
EventErrorHandler,
)
from commanderbot.lib import AllowedMentions, EventData, Intents
from commanderbot.lib.utils.utils import utcnow_aware


class CommanderBot(CommanderBotBase):
Expand All @@ -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.
Expand Down Expand Up @@ -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]]:
Expand All @@ -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):
Expand Down
4 changes: 2 additions & 2 deletions commanderbot/ext/status/status_cog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
29 changes: 15 additions & 14 deletions commanderbot/ext/status/status_details.py
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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
Expand All @@ -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"<t:{self._get_epoch(self.started_at)}:R>",
"Last reconnect": f"<t:{self._get_epoch(self.last_reconnect)}:R>",
"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"<t:{datetime_to_int(dt)}:R>"

if dt := self.last_reconnect:
all_fields["Last reconnect"] = f"<t:{datetime_to_int(dt)}:R>"

if td := self.uptime:
all_fields["Uptime"] = f"`{self._format_timedelta(td)}`"

return all_fields