From 3100ea1f62be8ba54832f4a9ef1b8a539e6c6a1d Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Sun, 27 Mar 2022 02:24:32 -0600 Subject: [PATCH] Add `/timestamp` --- jarvis/cogs/util.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/jarvis/cogs/util.py b/jarvis/cogs/util.py index 61b3da2..d2dd557 100644 --- a/jarvis/cogs/util.py +++ b/jarvis/cogs/util.py @@ -4,9 +4,11 @@ import platform import re import secrets import string +from datetime import timezone from io import BytesIO import numpy as np +from dateparser import parse from dis_snek import InteractionContext, Scale, Snake, const from dis_snek.models.discord.channel import GuildCategory, GuildText, GuildVoice from dis_snek.models.discord.embed import EmbedField @@ -23,6 +25,7 @@ from dis_snek.models.snek.application_commands import ( from dis_snek.models.snek.command import cooldown from dis_snek.models.snek.cooldowns import Buckets from PIL import Image +from tzlocal import get_localzone import jarvis from jarvis.data import pigpen @@ -296,6 +299,7 @@ class UtilCog(Scale): if length > 256: await ctx.send("Please limit password to 256 characters", ephemeral=True) return + choices = [ string.ascii_letters, string.hexdigits, @@ -329,6 +333,35 @@ class UtilCog(Scale): outp += "`" await ctx.send(outp[:2000]) + @slash_command( + name="timestamp", description="Convert a datetime or timestamp into it's counterpart" + ) + @slash_option( + name="string", description="String to convert", opt_type=OptionTypes.STRING, required=True + ) + async def _timestamp(self, ctx: InteractionContext, string: str) -> None: + timestamp = parse(string) + if not timestamp: + await ctx.send("Valid time not found, try again", ephemeral=True) + return + + if not timestamp.tzinfo: + timestamp = timestamp.replace(tzinfo=get_localzone()).astimezone(tz=timezone.utc) + + timestamp_utc = timestamp.astimezone(tz=timezone.utc) + + ts = int(timestamp.timestamp()) + ts_utc = int(timestamp_utc.timestamp()) + fields = [ + EmbedField(name="Unix Epoch", value=f"`{ts}`"), + EmbedField(name="Unix Epoch (UTC)", value=f"`{ts_utc}`"), + EmbedField(name="Absolute Time", value=f"\n``"), + EmbedField(name="Relative Time", value=f"\n``"), + EmbedField(name="ISO8601", value=timestamp.isoformat()), + ] + embed = build_embed(title="Converted Time", description="", fields=fields) + await ctx.send(embed=embed) + def setup(bot: Snake) -> None: """Add UtilCog to J.A.R.V.I.S."""