# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © Copyright 2022
#
# https://t.me/hikariatama
#
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# meta pic: https://static.dan.tatar/craiyon_icon.png
# meta banner: https://mods.hikariatama.ru/badges/craiyon.jpg
# meta developer: @hikarimods
# scope: hikka_only
# scope: hikka_min 1.2.10
import base64
import requests
from telethon.tl.types import Message
from .. import loader, utils
@loader.tds
class CrAIyonMod(loader.Module):
"""Generates images by description using Craiyon AI (DALL-E)"""
strings = {
"name": "CrAIyon",
"args": "🚫 No photo description specified",
"generating": (
"🖌 Drawing request {} using craiyon. Be patient,"
" this takes some time"
),
"error": "🚫 I can't draw {}",
"drawing": "🖌 This is delicious {}",
}
strings_ru = {
"args": "🚫 Не указано описание фотографии",
"generating": (
"🖌 Рисую запрос {} через craiyon. Будьте терпеливы,"
" это занимает некоторое время"
),
"error": "🚫 Я не могу нарисовать {}",
"drawing": "🖌 Восхитительный {}",
"_cmd_doc_craiyon": (
"<описание> - Сгенерировать изображение по описанию с помощью Craiyon AI"
" (DALL-E)"
),
"_cls_doc": "Генерирует изображения по описанию с помощью Craiyon AI (DALL-E)",
}
strings_de = {
"args": "🚫 Keine Bildbeschreibung angegeben",
"generating": (
"🖌 Zeichne Anfrage {} mit craiyon. Sei geduldig,"
" das dauert ein wenig"
),
"error": "🚫 Kann nicht zeichnen {}",
"drawing": "🖌 Das ist lecker {}",
"_cmd_doc_craiyon": (
" - Generiert ein Bild nach Beschreibung mit Craiyon AI"
" (DALL-E)"
),
"_cls_doc": "Generiert Bilder nach Beschreibung mit Craiyon AI (DALL-E)",
}
strings_hi = {
"args": "🚫 कोई फोटो विवरण निर्दिष्ट नहीं किया गया",
"generating": (
"🖌 craiyon के साथ अनुरोध रचना {}। धैर्य रखें,"
" यह कुछ समय लेता है"
),
"error": "🚫 मैं नहीं चित्र बना सकता {}",
"drawing": "🖌 यह अद्भुत है {}",
"_cmd_doc_craiyon": (
"<विवरण> - Craiyon AI (DALL-E) का उपयोग करके विवरण के अनुसार एक छवि उत्पन्न"
" करता है"
),
"_cls_doc": "Craiyon AI (DALL-E) का उपयोग करके विवरण के अनुसार छवियां उत्पन्न करता है",
}
strings_uz = {
"args": "🚫 Rasm tavsifi ko'rsatilmadi",
"generating": (
"🖌 craiyon orqali so'rovni chizish {}."
" Sabr qiling, bu bir necha vaqt oladi"
),
"error": "🚫 Rasmni chizib bo'lmadi {}",
"drawing": "🖌 Bu juda yaxshi {}",
"_cmd_doc_craiyon": (
" - Craiyon AI (DALL-E) orqali tavsifga mos rasm yaratadi"
),
"_cls_doc": "Craiyon AI (DALL-E) orqali tavsifga mos rasmlar yaratadi",
}
strings_tr = {
"args": "🚫 Fotoğraf açıklaması belirtilmedi",
"generating": (
"🖌 craiyon ile istek çizimi {}."
" Sabırlı olun, bu biraz zaman alır"
),
"error": "🚫 Çizemiyorum {}",
"drawing": "🖌 Bu lezzetli {}",
"_cmd_doc_craiyon": (
" - Craiyon AI (DALL-E) kullanarak açıklamaya göre bir resim"
" oluşturun"
),
"_cls_doc": "Craiyon AI (DALL-E) kullanarak açıklamaya göre resimler oluşturur",
}
async def craiyoncmd(self, message: Message):
""" - Generate an image by description using Craiyon AI (DALL-E)"""
args = utils.get_args_raw(message)
if not args:
await utils.answer(message, self.strings("args"))
return
form = await self.inline.form(
self.strings("generating").format(utils.escape_html(args)),
message=message,
gif="https://pa1.narvii.com/6074/b2f0163e5dd1ff7ee6582e1e032eb906b25228ac_hq.gif",
silent=True,
reply_markup={"text": "🧑🎨 Drawing...", "data": "empty"},
ttl=24 * 60 * 60,
)
result = (
await utils.run_sync(
requests.post,
"https://backend.craiyon.com/generate",
json={"prompt": args},
headers={
"accept": "application/json",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,ru;q=0.8",
"content-type": "application/json",
"origin": "https://www.craiyon.com",
"referer": "https://www.craiyon.com/",
"user-agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
" (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
),
},
)
).json()
if not result.get("images"):
await form.edit(
self.strings("error").format(args),
reply_markup=None,
gif="https://data.whicdn.com/images/61134119/original.gif",
)
return
images = [base64.b64decode(i.encode()) for i in result["images"]]
await message.respond(self.strings("drawing").format(args), file=images)
await form.delete()