|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from . import get_help |
|
|
|
__doc__ = get_help("help_beautify") |
|
|
|
|
|
import os |
|
import random |
|
|
|
from telethon.utils import get_display_name |
|
from urllib.parse import urlencode |
|
from . import Carbon, ultroid_cmd, get_string, inline_mention |
|
from secrets import token_hex |
|
|
|
_colorspath = "resources/colorlist.txt" |
|
|
|
if os.path.exists(_colorspath): |
|
with open(_colorspath, "r") as f: |
|
all_col = f.read().split() |
|
else: |
|
all_col = [] |
|
|
|
|
|
@ultroid_cmd( |
|
pattern="(rc|c)arbon", |
|
) |
|
async def cr_bn(event): |
|
xxxx = await event.eor(get_string("com_1")) |
|
te = event.pattern_match.group(1) |
|
col = random.choice(all_col) if te[0] == "r" else "White" |
|
if event.reply_to_msg_id: |
|
temp = await event.get_reply_message() |
|
if temp.media: |
|
b = await event.client.download_media(temp) |
|
with open(b) as a: |
|
code = a.read() |
|
os.remove(b) |
|
else: |
|
code = temp.message |
|
else: |
|
try: |
|
code = event.text.split(" ", maxsplit=1)[1] |
|
except IndexError: |
|
return await xxxx.eor(get_string("carbon_2")) |
|
xx = await Carbon(code=code, file_name="ultroid_carbon", backgroundColor=col) |
|
if isinstance(xx, dict): |
|
await xxxx.edit(f"`{xx}`") |
|
return |
|
await xxxx.delete() |
|
await event.reply( |
|
f"Carbonised by {inline_mention(event.sender)}", |
|
file=xx, |
|
) |
|
|
|
|
|
@ultroid_cmd( |
|
pattern="ccarbon( (.*)|$)", |
|
) |
|
async def crbn(event): |
|
match = event.pattern_match.group(1).strip() |
|
if not match: |
|
return await event.eor(get_string("carbon_3")) |
|
msg = await event.eor(get_string("com_1")) |
|
if event.reply_to_msg_id: |
|
temp = await event.get_reply_message() |
|
if temp.media: |
|
b = await event.client.download_media(temp) |
|
with open(b) as a: |
|
code = a.read() |
|
os.remove(b) |
|
else: |
|
code = temp.message |
|
else: |
|
try: |
|
match = match.split(" ", maxsplit=1) |
|
code = match[1] |
|
match = match[0] |
|
except IndexError: |
|
return await msg.eor(get_string("carbon_2")) |
|
xx = await Carbon(code=code, backgroundColor=match) |
|
await msg.delete() |
|
await event.reply( |
|
f"Carbonised by {inline_mention(event.sender)}", |
|
file=xx, |
|
) |
|
|
|
|
|
RaySoTheme = [ |
|
"meadow", |
|
"breeze", |
|
"raindrop", |
|
"candy", |
|
"crimson", |
|
"falcon", |
|
"sunset", |
|
"noir", |
|
"midnight", |
|
"bitmap", |
|
"ice", |
|
"sand", |
|
"forest", |
|
"mono", |
|
] |
|
|
|
|
|
@ultroid_cmd(pattern="rayso") |
|
async def pass_on(ult): |
|
try: |
|
from playwright.async_api import async_playwright |
|
except ImportError: |
|
await ult.eor( |
|
"`playwright` is not installed!\nPlease install it to use this command.." |
|
) |
|
return |
|
|
|
proc = await ult.eor(get_string("com_1")) |
|
spli = ult.text.split() |
|
theme, dark, title, text = None, True, get_display_name(ult.chat), None |
|
if len(spli) > 1: |
|
if spli[1] in RaySoTheme: |
|
theme = spli[1] |
|
if len(spli) > 2: |
|
text = " ".join(spli[2:]) |
|
else: |
|
text = " ".join(spli[1:]) |
|
if ult.is_reply: |
|
try: |
|
msg = await ult.get_reply_message() |
|
text = msg.message if not text else text |
|
title = get_display_name(msg.sender) |
|
if not theme and spli[1] in RaySoTheme: |
|
theme = spli[1] |
|
except Exception as sam: |
|
LOGS.exception(sam) |
|
if not text: |
|
await proc.eor("No text to beautify!") |
|
return |
|
if not theme: |
|
theme = random.choice(RaySoTheme) |
|
cleaned_text = "\n".join([line.strip() for line in text.splitlines()]) |
|
name = token_hex(8) + ".png" |
|
data = {"darkMode": dark, "theme": theme, "title": title} |
|
url = f"https://ray.so/#{urlencode(data)}" |
|
async with async_playwright() as play: |
|
try: |
|
browser = await play.chromium.launch() |
|
page = await browser.new_page() |
|
await page.goto(url) |
|
await page.wait_for_load_state("networkidle") |
|
try: |
|
await page.wait_for_selector( |
|
"div[class*='Editor_editor__']", timeout=60000 |
|
) |
|
editor = await page.query_selector("div[class*='Editor_editor__']") |
|
await editor.focus() |
|
await editor.click() |
|
|
|
for line in cleaned_text.split("\n"): |
|
await page.keyboard.type(line) |
|
await page.keyboard.press("Enter") |
|
|
|
await page.evaluate( |
|
"""() => { |
|
const button = document.querySelector('button[aria-label="Export as PNG"]'); |
|
button.click(); |
|
}""" |
|
) |
|
|
|
async with page.expect_download() as download_info: |
|
download = await download_info.value |
|
await download.save_as(name) |
|
except playwright._impl._errors.TimeoutError: |
|
LOGS.error("Timeout error: Selector not found within 60 seconds.") |
|
await proc.eor("Failed to find the editor within 60 seconds.") |
|
return |
|
except Exception as e: |
|
LOGS.error(f"Error occurred during playwright operation: {e}") |
|
await proc.eor("An error occurred during the operation.") |
|
return |
|
finally: |
|
if os.path.exists(name): |
|
try: |
|
await ult.reply(file=name) |
|
await proc.try_delete() |
|
os.remove(name) |
|
except Exception as e: |
|
LOGS.error(f"Error occurred while replying with the file: {e}") |
|
await proc.eor("Failed to send the file.") |
|
else: |
|
LOGS.error(f"Error: File {name} not found or inaccessible.") |
|
await proc.eor("Failed to save the file.") |
|
|