* Ultroid 2025 Co-authored-by: New-dev0 <New-dev0@users.noreply.github.com> Co-authored-by: Amit Sharma <buddhhu@users.noreply.github.com> Co-authored-by: TechiError <techierror@users.noreply.github.com> Co-authored-by: Aditya <me@xditya.me> Co-authored-by: Arnab Paryali <Arnabxd@users.noreply.github.com> Co-authored-by: hellboi_atul <hellboi-atul@users.noreply.github.com> Co-authored-by: sppidy <sppidy@users.noreply.github.com>
198 lines
6.1 KiB
Python
198 lines
6.1 KiB
Python
# Ultroid - UserBot
|
|
# Copyright (C) 2021-2025 TeamUltroid
|
|
#
|
|
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
|
|
# PLease read the GNU Affero General Public License in
|
|
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
|
|
|
|
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.")
|