From 2a00c2f07d1bcb0cb4879437229e978a4f40a251 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Sun, 15 Dec 2019 15:23:22 -0900 Subject: [PATCH] Fix user and snowflake commands --- geeksbot/exts/inspect.py | 10 ++++++---- geeksbot/imports/utils.py | 11 ++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/geeksbot/exts/inspect.py b/geeksbot/exts/inspect.py index d2e41fe..bea3378 100644 --- a/geeksbot/exts/inspect.py +++ b/geeksbot/exts/inspect.py @@ -1,7 +1,7 @@ import discord from discord.ext import commands from datetime import datetime, timedelta -from geeksbot.imports.utils import process_snowflake +from geeksbot.imports.utils import process_snowflake, create_date_string class Inspect(commands.Cog): @@ -22,10 +22,10 @@ class Inspect(commands.Cog): value=f'{member.bot}', inline=True) em.add_field(name=f'Joined Guild:', - value=f'{self.create_date_string(member.joined_at, ctx.message.created_at)}', + value=f'{create_date_string(member.joined_at, ctx.message.created_at)}', inline=False) em.add_field(name=f'Joined Discord:', - value=f'{self.create_date_string(member.created_at, ctx.message.created_at)}', + value=f'{create_date_string(member.created_at, ctx.message.created_at)}', inline=False) em.add_field(name=f'Current Status:', value=f'{member.status}', @@ -49,8 +49,10 @@ class Inspect(commands.Cog): snowflake = int(snowflake) except ValueError: await ctx.send('That is not a valid snowflake') - if len(bin(snowflake))-2 < 63 or len(bin(snowflake))-2 > 64: + return + if len(bin(snowflake))-2 < 23 or len(bin(snowflake))-2 > 64: await ctx.send('That is not a valid snowflake') + return creation_time, worker, process, counter = process_snowflake(snowflake) em = discord.Embed(title=str(snowflake), description=f'Created At: {creation_time.strftime("%c")}\n' diff --git a/geeksbot/imports/utils.py b/geeksbot/imports/utils.py index de63cb5..17bacf7 100644 --- a/geeksbot/imports/utils.py +++ b/geeksbot/imports/utils.py @@ -8,6 +8,15 @@ async def get_guild_config(bot, guild_id): guild_config = bot.cache.get() +def create_date_string(time, time_now): + diff = (time_now - time) + date_str = time.strftime('%Y-%m-%d %H:%M:%S') + return f"{diff.days} {'day' if diff.days == 1 else 'days'} " \ + f"{diff.seconds // 3600} {'hour' if diff.seconds // 3600 == 1 else 'hours'} " \ + f"{diff.seconds % 3600 // 60} {'minute' if diff.seconds % 3600 // 60 == 1 else 'minutes'} " \ + f"{diff.seconds % 3600 % 60} {'second' if diff.seconds % 3600 % 60 == 1 else 'seconds'} ago.\n{date_str}" + + def process_snowflake(snowflake: int) -> typing.Tuple[datetime, int, int, int]: DISCORD_EPOCH = 1420070400000 TIME_BITS_LOC = 22 @@ -16,7 +25,7 @@ def process_snowflake(snowflake: int) -> typing.Tuple[datetime, int, int, int]: PROCESS_ID_LOC = 12 PROCESS_ID_MASK = 0x1F000 INCREMENT_MASK = 0xFFF - creation_time = datetime.fromtimestamp((snowflake >> TIME_BITS_LOC) + DISCORD_EPOCH) + creation_time = datetime.fromtimestamp(((snowflake >> TIME_BITS_LOC) + DISCORD_EPOCH) / 1000.0) worker_id = (snowflake >> WORKER_ID_LOC) & WORKER_ID_MASK process_id = (snowflake >> PROCESS_ID_LOC) & PROCESS_ID_MASK counter = snowflake & INCREMENT_MASK