from io import BytesIO from typing import Union import discord from ralgo.ralgo import Ralgo from tuxbot.cogs.Crypto.functions.file import find_ext def encode(params: dict) -> Union[str, discord.File]: statement = Ralgo(params["message"]) params = params["params"] encoded = statement.encode(chars=params["chars"]) if params["compressed"]: return str(encoded.compress()) if params["graphical"]: output = encoded.graphical().encode() return discord.File(BytesIO(output.to_bytes()), "output.png") return str(encoded) def decode(params: dict) -> Union[str, discord.File]: statement = Ralgo(params["message"]) params = params["params"] if params["graphical"]: output = Ralgo(statement.graphical().decode()).decode() elif params["compressed"]: output = Ralgo(statement.decompress()).decode() else: output = statement.decode(chars=params["chars"]) if isinstance(output, bytes): return discord.File(BytesIO(output), f"output.{find_ext(output)}") output = discord.utils.escape_markdown(str(output)) output = discord.utils.escape_mentions(output) return output if len(output) > 0 else "no content..."