From 74fd56e81f81079db51c36603f4f55bcf4eab303 Mon Sep 17 00:00:00 2001 From: Twentysix Date: Sat, 17 Dec 2016 04:16:16 +0100 Subject: [PATCH] [Core] Improved `[p]uptime` --- cogs/owner.py | 29 +++++++++++++++++++++++++---- red.py | 6 +++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/cogs/owner.py b/cogs/owner.py index 78a0e67fd..50169652f 100644 --- a/cogs/owner.py +++ b/cogs/owner.py @@ -731,10 +731,10 @@ class Owner: @commands.command() async def uptime(self): """Shows Red's uptime""" - now = datetime.datetime.now() - uptime = (now - self.bot.uptime).seconds - uptime = datetime.timedelta(seconds=uptime) - await self.bot.say("`Uptime: {}`".format(uptime)) + since = self.bot.uptime.strftime("%Y-%m-%d %H:%M:%S") + passed = self.get_bot_uptime() + await self.bot.say("Been up for: **{}** (since {} UTC)" + "".format(passed, since)) @commands.command() async def version(self): @@ -823,6 +823,27 @@ class Owner: return embed + def get_bot_uptime(self, *, brief=False): + # Courtesy of Danny + now = datetime.datetime.utcnow() + delta = now - self.bot.uptime + hours, remainder = divmod(int(delta.total_seconds()), 3600) + minutes, seconds = divmod(remainder, 60) + days, hours = divmod(hours, 24) + + if not brief: + if days: + fmt = '{d} days, {h} hours, {m} minutes, and {s} seconds' + else: + fmt = '{h} hours, {m} minutes, and {s} seconds' + else: + fmt = '{h}h {m}m {s}s' + if days: + fmt = '{d}d ' + fmt + + return fmt.format(d=days, h=hours, m=minutes, s=seconds) + + def check_files(): if not os.path.isfile("data/red/disabled_commands.json"): print("Creating empty disabled_commands.json...") diff --git a/red.py b/red.py index e42a20176..88060aa7e 100644 --- a/red.py +++ b/red.py @@ -60,7 +60,7 @@ class Bot(commands.Bot): return bot.settings.get_prefixes(message.server) self.counter = Counter() - self.uptime = datetime.datetime.now() # Will be refreshed before login + self.uptime = datetime.datetime.utcnow() # Refreshed before login self._message_modifiers = [] self.settings = Settings() self._intro_displayed = False @@ -209,7 +209,7 @@ async def on_ready(): servers = len(bot.servers) channels = len([c for c in bot.get_all_channels()]) - login_time = datetime.datetime.now() - bot.uptime + login_time = datetime.datetime.utcnow() - bot.uptime login_time = login_time.seconds + login_time.microseconds/1E6 print("Login successful. ({}ms)\n".format(login_time)) @@ -527,7 +527,7 @@ def main(): load_cogs() print("Logging into Discord...") - bot.uptime = datetime.datetime.now() + bot.uptime = datetime.datetime.utcnow() if settings.login_credentials: yield from bot.login(*settings.login_credentials,