From f05debc92369a8c8b26e015f83a3719df99fe5fe Mon Sep 17 00:00:00 2001 From: Kowlin Date: Tue, 31 Aug 2021 21:55:33 +0200 Subject: [PATCH] Initial support for Discord timestamping (#5155) * Initial support for Discord timestamping * Fix timezones * Fix userinfo for users with member.joined_at equal to None * Simplify Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> --- redbot/cogs/general/general.py | 6 ++---- redbot/cogs/mod/names.py | 24 +++++++++++------------- redbot/core/modlog.py | 10 ++++------ 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/redbot/cogs/general/general.py b/redbot/cogs/general/general.py index 54593d0f1..ab63df83a 100644 --- a/redbot/cogs/general/general.py +++ b/redbot/cogs/general/general.py @@ -254,10 +254,8 @@ class General(commands.Cog): Default to False. """ guild = ctx.guild - passed = (ctx.message.created_at - guild.created_at).days - created_at = _("Created on {date}. That's over {num} days ago!").format( - date=guild.created_at.strftime("%d %b %Y %H:%M"), - num=humanize_number(passed), + created_at = _("Created on . That's !").format( + int(guild.created_at.replace(tzinfo=datetime.timezone.utc).timestamp()), ) online = humanize_number( len([m.status for m in guild.members if m.status != discord.Status.offline]) diff --git a/redbot/cogs/mod/names.py b/redbot/cogs/mod/names.py index aa068e34a..f7f531ef6 100644 --- a/redbot/cogs/mod/names.py +++ b/redbot/cogs/mod/names.py @@ -1,4 +1,4 @@ -from datetime import datetime +import datetime from typing import cast import discord @@ -176,21 +176,16 @@ class ModInfo(MixinMeta): member = author # A special case for a special someone :^) - special_date = datetime(2016, 1, 10, 6, 8, 4, 443000) + special_date = datetime.datetime(2016, 1, 10, 6, 8, 4, 443000, datetime.timezone.utc) is_special = member.id == 96130341705637888 and guild.id == 133049272517001216 roles = member.roles[-1:0:-1] names, nicks = await self.get_names_and_nicks(member) - joined_at = member.joined_at if not is_special else special_date - since_created = (ctx.message.created_at - member.created_at).days - if joined_at is not None: - since_joined = (ctx.message.created_at - joined_at).days - user_joined = joined_at.strftime("%d %b %Y %H:%M") - else: - since_joined = "?" - user_joined = _("Unknown") - user_created = member.created_at.strftime("%d %b %Y %H:%M") + joined_at = member.joined_at.replace(tzinfo=datetime.timezone.utc) + if is_special: + joined_at = special_date + user_created = int(member.created_at.replace(tzinfo=datetime.timezone.utc).timestamp()) voice_state = member.voice member_number = ( sorted(guild.members, key=lambda m: m.joined_at or ctx.message.created_at).index( @@ -199,8 +194,11 @@ class ModInfo(MixinMeta): + 1 ) - created_on = _("{}\n({} days ago)").format(user_created, since_created) - joined_on = _("{}\n({} days ago)").format(user_joined, since_joined) + created_on = "\n()".format(user_created) + if joined_at is not None: + joined_on = "\n()".format(int(joined_at.timestamp())) + else: + joined_on = _("Unknown") if any(a.type is discord.ActivityType.streaming for a in member.activities): statusemoji = "\N{LARGE PURPLE CIRCLE}" diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py index e2cdaefa9..85f57d630 100644 --- a/redbot/core/modlog.py +++ b/redbot/core/modlog.py @@ -432,9 +432,9 @@ class Case: until = None duration = None if self.until: - start = datetime.utcfromtimestamp(self.created_at) - end = datetime.utcfromtimestamp(self.until) - end_fmt = end.strftime("%Y-%m-%d %H:%M:%S UTC") + start = datetime.fromtimestamp(self.created_at, tz=timezone.utc) + end = datetime.fromtimestamp(self.until, tz=timezone.utc) + end_fmt = f"" duration = end - start dur_fmt = _strfdelta(duration) until = end_fmt @@ -454,9 +454,7 @@ class Case: last_modified = None if self.modified_at: - last_modified = "{}".format( - datetime.utcfromtimestamp(self.modified_at).strftime("%Y-%m-%d %H:%M:%S UTC") - ) + last_modified = f"" if isinstance(self.user, int): if self.user == 0xDE1: