# .------.------.------.------.------.------.------.------.------.------. # |D.--. |4.--. |N.--. |1.--. |3.--. |L.--. |3.--. |K.--. |0.--. |0.--. | # | :/\: | :/\: | :(): | :/\: | :(): | :/\: | :(): | :/\: | :/\: | :/\: | # | (__) | :\/: | ()() | (__) | ()() | (__) | ()() | :\/: | :\/: | :\/: | # | '--'D| '--'4| '--'N| '--'1| '--'3| '--'L| '--'3| '--'K| '--'0| '--'0| # `------`------`------`------`------`------`------`------`------`------' # # Copyright 2023 t.me/D4n13l3k00 # Licensed under the Creative Commons CC BY-NC-ND 4.0 # # Full license text can be found at: # https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode # # Human-friendly one: # https://creativecommons.org/licenses/by-nc-nd/4.0 # meta developer: @D4n13l3k00 import base64 import io import requests import telethon from telethon.tl.types import * from .. import loader, utils # type: ignore @loader.tds class FDQuoteMod(loader.Module): strings = { "name": "FDQuote", "processing": "[FDQ] Processing...", "processing_api": "[FDQ] API Processing...", "photo": "Фото{}", "video": "Видео{}", "audio": "Аудио{}", "gif": "GIF{}", "voice": "Голосовое сообщение{}", "videonote": "Видеосообщение", "poll": "Опрос", "quiz": "Викторина", "sticker": "{}Стикер", "file": "Файл {}", "api_error": "[FDQ] API Error: {}", "error": "[FDQ] Err...", "deleted_acc": "Удалённый аккаунт", "need_reply": "[FDQ] Reply to message...", } def __init__(self): self.name = self.strings["name"] self.api_url = "https://api.d4n13l3k00.ru/quotes/generate" self.debug = False @loader.owner async def fdqcmd(self, m: Message): ".fdq <реплай на юзера и текст> или <@username и текст> или <реплай и @username> или <реплай> - Создать квотес" message = await m.get_reply_message() args = m.text.split(maxsplit=2) args.pop(0) catch_reply = reply = viabot = pic = None if message: if args: if args[0].startswith("@"): user_id = args[0][1:] text = message.text else: user_id = message.from_id or message.fwd_from.channel_id text = " ".join(args) else: user_id = message.from_id or message.fwd_from.channel_id text = message.text catch_reply = True elif len(args) == 2 and args[0].startswith("@"): user_id = args[0][1:] text = args[1] else: return await utils.answer(m, self.strings["need_reply"]) try: user = await m.client.get_entity(user_id) except ValueError: return await utils.answer(m, self.strings["error"]) await utils.answer(m, self.strings["processing"]) name = ( telethon.utils.get_display_name(user) if type(user) == Channel else ( self.strings["deleted_acc"] if user and user.deleted else telethon.utils.get_display_name(user) ) ) id = user.id avatar = await m.client.download_profile_photo(user, bytes) reply = await message.get_reply_message() ### / Message / ### if message.file and "image" in message.file.mime_type: pic = await message.download_media(bytes) elif message.video or message.gif: pic = await message.download_media(bytes, thumb=-1) if message.via_bot_id: viabot = str((await m.client.get_entity(message.via_bot_id)).username) ### / Reply / ### if reply and catch_reply: r = await m.client.get_entity(reply.from_id or reply.fwd_from.channel_id) if reply.photo: replText = self.strings["photo"].format( f", {reply.raw_text}" if reply.raw_text else "" ) elif reply.gif: replText = self.strings["gif"].format( f", {reply.raw_text}" if reply.raw_text else "" ) elif reply.video: if reply.video.attributes[0].round_message: replText = self.strings["videonote"] else: replText = self.strings["video"].format( f", {reply.raw_text}" if reply.raw_text else "" ) elif reply.audio: replText = self.strings["audio"].format( f", {reply.raw_text}" if reply.raw_text else "" ) elif reply.voice: replText = self.strings["voice"].format( f", {reply.raw_text}" if reply.raw_text else "" ) elif reply.poll: replText = ( self.strings["quiz"] if reply.media.poll.quiz else self.strings["poll"] ) elif reply.sticker: replText = self.strings["sticker"].format( reply.sticker.attributes[1].alt + " " ) elif reply.file: replText = self.strings["file"].format( f", {reply.raw_text}" if reply.caption else "" ) elif reply.raw_text: replText = reply.raw_text or "" reply = { "name": telethon.utils.get_display_name(r) if type(r) == Channel else ( self.strings["deleted_acc"] if r and r.deleted else telethon.utils.get_display_name(r) ), "text": replText, } else: reply = None await utils.answer(m, self.strings["processing_api"]) js = { "avatar": base64.b64encode(avatar).decode() if avatar else None, "name": name, "text": text, "id": id, "pic": base64.b64encode(pic).decode() if pic else None, "reply": reply, "viabot": viabot, } if self.debug: f = io.BytesIO(str(js).encode("utf-8")) f.name = "request.debug" await m.respond(file=f) r = requests.post(self.api_url, json=js) if r.status_code == 200: quote = io.BytesIO(r.content) quote.name = "q.webp" if message: await message.reply(file=quote) else: await m.respond(file=quote) await m.delete() else: await utils.answer(m, self.strings["api_error"].format(r.json()["err"]))