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>
This commit is contained in:
Kowlin 2021-08-31 21:55:33 +02:00 committed by GitHub
parent b586c2f990
commit f05debc923
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 23 deletions

View File

@ -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 <t:{0}:D>. That's <t:{0}:R>!").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])

View File

@ -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 = "<t:{0}:D>\n(<t:{0}:R>)".format(user_created)
if joined_at is not None:
joined_on = "<t:{0}:D>\n(<t:{0}:R>)".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}"

View File

@ -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"<t:{int(end.timestamp())}>"
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"<t:{self.modified_at}>"
if isinstance(self.user, int):
if self.user == 0xDE1: