Add DevCog with hash utility
This commit is contained in:
parent
a43f45dfbb
commit
f861c758d8
1 changed files with 68 additions and 0 deletions
68
jarvis/cogs/dev.py
Normal file
68
jarvis/cogs/dev.py
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
import jarvis
|
||||||
|
import hashlib
|
||||||
|
from discord.ext import commands
|
||||||
|
from jarvis.utils import build_embed, convert_bytesize
|
||||||
|
from jarvis.utils.field import Field
|
||||||
|
|
||||||
|
|
||||||
|
supported_hashes = {
|
||||||
|
x for x in hashlib.algorithms_guaranteed if "shake" not in x
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def hash_obj(hash, data, text: bool = True) -> str:
|
||||||
|
"""
|
||||||
|
Hash data with hash object
|
||||||
|
|
||||||
|
Data can be text or binary
|
||||||
|
"""
|
||||||
|
if text:
|
||||||
|
hash.update(data)
|
||||||
|
return hash.hexdigest()
|
||||||
|
BSIZE = 65536
|
||||||
|
while block := data.read(BSIZE):
|
||||||
|
hash.update(block)
|
||||||
|
return hash.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
class DevCog(commands.Cog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@commands.command(name="hash")
|
||||||
|
async def _hash(self, ctx, method: str, *, data: str):
|
||||||
|
if method not in supported_hashes:
|
||||||
|
algo_txt = ", ".join(f"`{x}`" for x in supported_hashes)
|
||||||
|
await ctx.send(
|
||||||
|
"Unsupported hash algorithm. Supported:\n" + algo_txt
|
||||||
|
)
|
||||||
|
return
|
||||||
|
if len(data) == 0 and len(ctx.message.attachments) == 0:
|
||||||
|
await ctx.send(
|
||||||
|
"No data to hash. Either attach a file or send text to hash"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
text = True
|
||||||
|
if len(ctx.message.attachments) > 0:
|
||||||
|
text = False
|
||||||
|
data = await ctx.message.attachments[0].read()
|
||||||
|
# Default to sha256, just in case
|
||||||
|
hash = getattr(hashlib, method, hashlib.sha256)()
|
||||||
|
hash = hash_obj(hash, data, text)
|
||||||
|
|
||||||
|
data_size = convert_bytesize(len(data))
|
||||||
|
title = data if text else ctx.message.attachments[0].filename
|
||||||
|
description = "Hashed using " + method
|
||||||
|
fields = [
|
||||||
|
Field("Data Size", data_size, False),
|
||||||
|
Field("Hash", hash, False),
|
||||||
|
]
|
||||||
|
|
||||||
|
embed = build_embed(
|
||||||
|
title=title, description=description, fields=fields
|
||||||
|
)
|
||||||
|
await ctx.send(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
|
def setup(bot):
|
||||||
|
bot.add_cog(DevCog(bot))
|
Loading…
Add table
Reference in a new issue