hikari_uploader/hikari/hikari.py
2022-10-06 06:41:26 +02:00

67 lines
1.6 KiB
Python
Executable file

#!/usr/bin/env python3
import hashlib
from pathlib import Path
import orjson
import pyperclip
import requests
import typer
HIKARI_BASE = "https://hikari.butaishoujo.moe"
HIKARI_URL = f"{HIKARI_BASE}/upload"
def upload(file: Path,
obstruct: bool = typer.Option(
False, "--obstruct", "-o",
help="Obstruct filename (by hashing)"
),
filename: str = typer.Option(
None, "--name", "-n",
help="Rename the uploaded file."
),
copy: bool = typer.Option(
False, "--copy", "-c",
help="Copy file URL to clipboard."
),
hash: bool = typer.Option(
False, "--hash", "-h",
help="Hash file before uploading to avoid having to send the whole file twice."
)):
if copy:
pyperclip.copy("")
if obstruct:
filename = hashlib.sha256(file.name.encode()).hexdigest()
elif filename is None:
filename = file.name
if hash:
h = hashlib.sha256()
with file.open('br') as f:
while buf := f.read(1024**2):
h.update(buf)
h.hexdigest()[:8]
url = f"{HIKARI_URL}/{h.hexdigest()[:8]}"
else:
url = HIKARI_URL
with file.open('br') as f:
files = {'file': (filename, f)}
with requests.post(url, files=files, stream=True) as req:
resp = req.raw.read()
data = orjson.loads(resp)
if copy:
pyperclip.copy(data['url'])
else:
print(resp.decode())
def main():
typer.run(upload)