From aa352a019e9b466ed8e4f41db3714416e1f755d4 Mon Sep 17 00:00:00 2001 From: omg-xtao <100690902+omg-xtao@users.noreply.github.com> Date: Fri, 9 Feb 2024 22:32:06 +0800 Subject: [PATCH] =?UTF-8?q?carbon=20=E4=BB=A3=E7=A0=81=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- carbon/main.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 carbon/main.py diff --git a/carbon/main.py b/carbon/main.py new file mode 100644 index 00000000..467e6675 --- /dev/null +++ b/carbon/main.py @@ -0,0 +1,48 @@ +import os +from io import BytesIO + + +from pagermaid.enums import AsyncClient, Message +from pagermaid.listener import listener +from pagermaid.utils import lang + + +async def make_carbon(code: str, client: AsyncClient) -> BytesIO: + url = "https://carbonara.solopov.dev/api/cook" + resp = await client.post(url, json={"code": code}, timeout=60.0) + image = BytesIO(resp.read()) + image.name = "carbon.png" + return image + + +async def get_from_file(message: Message) -> str: + msg = None + reply = message.reply_to_message + if message.document and message.document.mime_type.startswith("text"): + msg = message + elif reply.document and reply.document.mime_type.startswith("text"): + msg = reply + if msg: + path = await msg.download() + try: + with open(path, "r", encoding="utf-8") as f: + text = f.read() + except UnicodeDecodeError: + return "" + finally: + os.remove(path) + return text + + +@listener(command="carbon", description="Take an image of code snippet.", parameters="code") +async def carbon_func(client: AsyncClient, message: Message): + code = await get_from_file(message) + if not code: + code = message.obtain_message() + if not code: + return await message.edit(lang("arg_error")) + message = await message.edit("`Preparing Carbon . . .`") + carbon = await make_carbon(code, client) + message = await message.edit("`Uploading . . .`") + await message.reply_photo(carbon, quote=False) + await message.safe_delete()