Add /timestamp

This commit is contained in:
Zeva Rose 2022-03-27 02:24:32 -06:00
parent 46693f2443
commit 3100ea1f62

View file

@ -4,9 +4,11 @@ import platform
import re import re
import secrets import secrets
import string import string
from datetime import timezone
from io import BytesIO from io import BytesIO
import numpy as np import numpy as np
from dateparser import parse
from dis_snek import InteractionContext, Scale, Snake, const from dis_snek import InteractionContext, Scale, Snake, const
from dis_snek.models.discord.channel import GuildCategory, GuildText, GuildVoice from dis_snek.models.discord.channel import GuildCategory, GuildText, GuildVoice
from dis_snek.models.discord.embed import EmbedField 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.command import cooldown
from dis_snek.models.snek.cooldowns import Buckets from dis_snek.models.snek.cooldowns import Buckets
from PIL import Image from PIL import Image
from tzlocal import get_localzone
import jarvis import jarvis
from jarvis.data import pigpen from jarvis.data import pigpen
@ -296,6 +299,7 @@ class UtilCog(Scale):
if length > 256: if length > 256:
await ctx.send("Please limit password to 256 characters", ephemeral=True) await ctx.send("Please limit password to 256 characters", ephemeral=True)
return return
choices = [ choices = [
string.ascii_letters, string.ascii_letters,
string.hexdigits, string.hexdigits,
@ -329,6 +333,35 @@ class UtilCog(Scale):
outp += "`" outp += "`"
await ctx.send(outp[:2000]) 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"<t:{ts_utc}:F>\n`<t:{ts_utc}:F>`"),
EmbedField(name="Relative Time", value=f"<t:{ts_utc}:R>\n`<t:{ts_utc}:R>`"),
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: def setup(bot: Snake) -> None:
"""Add UtilCog to J.A.R.V.I.S.""" """Add UtilCog to J.A.R.V.I.S."""