|
|
|
import os |
|
import time |
|
import base64 |
|
import requests |
|
from pyrogram import * |
|
from pyrogram.types import * |
|
from akn.utils.handler import * |
|
from akn.utils.logger import LOGS |
|
from akn.utils.prefixprem import command |
|
from config import * |
|
|
|
from typing import List, Dict, Tuple |
|
|
|
def generate_quote(messages: List[Dict]) -> Tuple[bool, str]: |
|
json = { |
|
"type": "quote", |
|
"format": "webp", |
|
"backgroundColor": "#260746/#6100c2", |
|
"width": 512, |
|
"height": 768, |
|
"scale": 2, |
|
"messages": messages, |
|
} |
|
try: |
|
response = requests.post("https://bot.lyo.su/quote/generate", json=json).json() |
|
image = base64.b64decode(str(response["result"]["image"]).encode("utf-8")) |
|
file_name = f"Quote_{int(time.time())}.webp" |
|
with open(file_name, "wb") as f: |
|
f.write(image) |
|
return True, file_name |
|
except Exception as e: |
|
return False, str(e) |
|
|
|
def get_entities(message: Message) -> List[Dict]: |
|
entities = [] |
|
if message.entities: |
|
for entity in message.entities: |
|
entities.append( |
|
{ |
|
"type": entity.type.name.lower(), |
|
"offset": entity.offset, |
|
"length": entity.length, |
|
} |
|
) |
|
return entities |
|
|
|
@Akeno( |
|
~filters.scheduled |
|
& command(["q"]) |
|
& filters.me |
|
& ~filters.forwarded |
|
) |
|
async def quotely(client: Client, message: Message): |
|
if not message.reply_to_message: |
|
return await message.reply_text("Reply to a message to quote it.") |
|
if message.reply_to_message.media: |
|
if message.reply_to_message.caption: |
|
message.reply_to_message.text = message.reply_to_message.caption |
|
else: |
|
return await message.reply_text("Reply to a text message to quote it.") |
|
cmd = None |
|
if len(message.command) > 1: |
|
cmd = message.command[1].lower() |
|
pro = await message.reply_text("__Generating quote...__") |
|
msg_data = [] |
|
if cmd and cmd == "r": |
|
await pro.edit_text("__Generating quote with reply...__") |
|
reply_msg_id = message.reply_to_message.reply_to_message_id |
|
if reply_msg_id: |
|
reply_msg = await client.get_messages(message.chat.id, reply_msg_id) |
|
if reply_msg and reply_msg.text: |
|
replied_name = reply_msg.from_user.first_name |
|
if reply_msg.from_user.last_name: |
|
replied_name += f" {reply_msg.from_user.last_name}" |
|
reply_message = { |
|
"chatId": reply_msg.from_user.id, |
|
"entities": get_entities(reply_msg), |
|
"name": replied_name, |
|
"text": reply_msg.text, |
|
} |
|
else: |
|
reply_message = {} |
|
else: |
|
reply_message = {} |
|
else: |
|
reply_message = {} |
|
name = message.reply_to_message.from_user.first_name |
|
if message.reply_to_message.from_user.last_name: |
|
name += f" {message.reply_to_message.from_user.last_name}" |
|
emoji_status = None |
|
if message.reply_to_message.from_user.emoji_status: |
|
emoji_status = str(message.reply_to_message.from_user.emoji_status.custom_emoji_id) |
|
msg_data.append( |
|
{ |
|
"entities": get_entities(message.reply_to_message), |
|
"avatar": True, |
|
"from": { |
|
"id": message.reply_to_message.from_user.id, |
|
"name": name, |
|
"emoji_status": emoji_status, |
|
}, |
|
"text": message.reply_to_message.text, |
|
"replyMessage": reply_message, |
|
} |
|
) |
|
status, path = generate_quote(msg_data) |
|
if not status: |
|
return await message.reply_text(f"`{path}`") |
|
await message.reply_sticker(path) |
|
await pro.delete() |
|
os.remove(path) |
|
|
|
module = modules_help.add_module("quote", __file__) |
|
module.add_command("q", "Generate a quote sticker of the replied message.") |
|
module.add_command("q r", "Generate a quote sticker of the replied message with it's reply message.") |