MissKatyPyro/misskaty/plugins/webss.py
2022-12-01 22:27:03 +07:00

76 lines
2.2 KiB
Python

from asyncio import gather
from base64 import b64decode
from io import BytesIO
from pyrogram import filters
from misskaty import app
from misskaty.vars import COMMAND_HANDLER
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.http import post
__MODULE__ = "WebSS"
__HELP__ = """
/webss [URL] [FULL_SIZE?, use (y|yes|true) to get full size image. (optional)] - Take A Screenshot Of A Webpage.
"""
async def take_screenshot(url: str, full: bool = False):
url = url if url.startswith("http") else f"https://{url}"
payload = {
"url": url,
"width": 1920,
"height": 1080,
"scale": 1,
"format": "jpeg",
}
if full:
payload["full"] = True
data = await post(
"https://webscreenshot.vercel.app/api",
data=payload,
)
if "image" not in data:
return None
b = data["image"].replace("data:image/jpeg;base64,", "")
file = BytesIO(b64decode(b))
file.name = "webss.jpg"
return file
@app.on_message(filters.command(["webss"], COMMAND_HANDLER))
@capture_err
async def take_ss(_, message):
if len(message.command) < 2:
return await message.reply("Give A Url To Fetch Screenshot.")
if len(message.command) == 2:
url = message.text.split(None, 1)[1]
full = False
elif len(message.command) == 3:
url = message.text.split(None, 2)[1]
full = message.text.split(None, 2)[2].lower().strip() in [
"yes",
"y",
"1",
"true",
]
else:
return await message.reply("Invalid Command.")
m = await message.reply("Capturing screenshot...")
try:
photo = await take_screenshot(url, full)
if not photo:
return await m.edit("Failed To Take Screenshot")
m = await m.edit("Uploading...")
if not full:
# Full size images have problem with reply_photo, that's why
# we need to only use reply_photo if we're not using full size
await gather(*[message.reply_document(photo), message.reply_photo(photo)])
else:
await message.reply_document(photo)
await m.delete()
except Exception as e:
await m.edit(str(e))