Skip to content

Commit

Permalink
Fix: Rayso (#455)
Browse files Browse the repository at this point in the history
* Fix: Rayso

Fixed Rayso, with a dynamic selector and updated themes list

* Update beautify.py
  • Loading branch information
ufoptg authored Feb 20, 2025
1 parent f5b7889 commit 1951b1c
Showing 1 changed file with 76 additions and 43 deletions.
119 changes: 76 additions & 43 deletions plugins/beautify.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,13 @@ async def crbn(event):
"crimson",
"falcon",
"sunset",
"noir",
"midnight",
"bitmap",
"ice",
"sand",
"forest",
"mono",
]


Expand All @@ -108,57 +114,84 @@ 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..")
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) > 2:
if spli[1] in RaySoTheme:
theme = spli[1]
dark = spli[2].lower().strip() in ["true", "t"]
elif len(spli) > 1:
if len(spli) > 1:
if spli[1] in RaySoTheme:
theme = spli[1]
elif spli[1] == "list":
text = "**List of Rayso Themes:**\n" + "\n".join(
[f"- `{th_}`" for th_ in RaySoTheme]
)

await proc.eor(text)
return
if len(spli) > 2:
text = " ".join(spli[2:])
else:
try:
text = ult.text.split(maxsplit=1)[1]
except IndexError:
pass
if not theme or theme not in RaySoTheme:
theme = random.choice(RaySoTheme)
text = " ".join(spli[1:])
if ult.is_reply:
msg = await ult.get_reply_message()
text = msg.message
title = get_display_name(msg.sender)
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
}
data = {"darkMode": dark, "theme": theme, "title": title}
url = f"https://ray.so/#{urlencode(data)}"
async with async_playwright() as play:
chrome = await play.chromium.launch()
page = await chrome.new_page()
await page.goto(url)
await page.wait_for_load_state("networkidle")
elem = await page.query_selector("textarea[class='Editor_textarea__sAyL_']")
await elem.type(text)
button = await page.query_selector("button[class='ExportButton_button__d___t']")
await button.click()
async with page.expect_download() as dl:
dled = await dl.value
await dled.save_as(name)
await proc.reply(
file=name
)
await proc.try_delete()
os.remove(name)
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.")

0 comments on commit 1951b1c

Please sign in to comment.