| import random | |
| from os.path import realpath | |
| import aiohttp | |
| from aiohttp import client_exceptions | |
| class UnableToFetchCarbon(Exception): | |
| pass | |
| themes = [ | |
| "3024-night", | |
| "a11y-dark", | |
| "blackboard", | |
| "base16-dark", | |
| "base16-light", | |
| "cobalt", | |
| "duotone-dark", | |
| "dracula-pro", | |
| "hopscotch", | |
| "lucario", | |
| "material", | |
| "monokai", | |
| "nightowl", | |
| "nord", | |
| "oceanic-next", | |
| "one-light", | |
| "one-dark", | |
| "panda-syntax", | |
| "parasio-dark", | |
| "seti", | |
| "shades-of-purple", | |
| "solarized+dark", | |
| "solarized+light", | |
| "synthwave-84", | |
| "twilight", | |
| "verminal", | |
| "vscode", | |
| "yeti", | |
| "zenburn", | |
| ] | |
| colour = [ | |
| "#FF0000", | |
| "#FF5733", | |
| "#FFFF00", | |
| "#008000", | |
| "#0000FF", | |
| "#800080", | |
| "#A52A2A", | |
| "#FF00FF", | |
| "#D2B48C", | |
| "#00FFFF", | |
| "#808000", | |
| "#800000", | |
| "#00FFFF", | |
| "#30D5C8", | |
| "#00FF00", | |
| "#008080", | |
| "#4B0082", | |
| "#EE82EE", | |
| "#FFC0CB", | |
| "#000000", | |
| "#FFFFFF", | |
| "#808080", | |
| ] | |
| class CarbonAPI: | |
| def __init__(self): | |
| self.language = "auto" | |
| self.drop_shadow = True | |
| self.drop_shadow_blur = "68px" | |
| self.drop_shadow_offset = "20px" | |
| self.font_family = "JetBrains Mono" | |
| self.width_adjustment = True | |
| self.watermark = False | |
| async def generate(self, text: str, user_id): | |
| async with aiohttp.ClientSession( | |
| headers={"Content-Type": "application/json"}, | |
| ) as ses: | |
| params = { | |
| "code": text, | |
| } | |
| params["backgroundColor"] = random.choice(colour) | |
| params["theme"] = random.choice(themes) | |
| params["dropShadow"] = self.drop_shadow | |
| params["dropShadowOffsetY"] = self.drop_shadow_offset | |
| params["dropShadowBlurRadius"] = self.drop_shadow_blur | |
| params["fontFamily"] = self.font_family | |
| params["language"] = self.language | |
| params["watermark"] = self.watermark | |
| params["widthAdjustment"] = self.width_adjustment | |
| try: | |
| request = await ses.post( | |
| "https://carbonara.solopov.dev/api/cook", | |
| json=params, | |
| ) | |
| except client_exceptions.ClientConnectorError: | |
| raise UnableToFetchCarbon("Can not reach the Host!") | |
| resp = await request.read() | |
| with open(f"/tmp/cache/carbon{user_id}.jpg", "wb") as f: | |
| f.write(resp) | |
| return realpath(f.name) | |