import telethon
from telethon.types import Message
from .. import loader, utils
from ..inline.types import InlineCall
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
import asyncio
import random
from telethon.errors.common import AlreadyInConversationError
"""
███ ███ ██ ██ ██████ ██ ██ ██ ██████ ███████ ███████
████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ████ ██ ██ ██ ██████ ██ ██ ██ ██ ██ ███████ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██████ ██ ██ ██████ ███████ ██████ ███████ ███████
YamiManager
📜 Licensed under the GNU AGPLv3
"""
# meta banner: https://0x0.st/HYVA.jpg
# meta desc: desc
# meta developer: @BruhHikkaModules
@loader.tds
class YamiManager(loader.Module):
"""Module for @YamiChat_bot """
strings = {
"name": "YamiManager",
"timeout-error": "🚫 The bot did not respond within three minutes, it is disabled or you asked it too complex request in /img",
"wait": "Waiting...\n\nInteresting fact! If the bot doesn't respond within three minutes, there will be an error",
"alive": "💖 Bot is alive",
"dead": "💔 Bot is dead...",
"answer": "🔀 Bot answer:\n\n{}",
"aleardyconv": "⛔ You can't execute more than one command",
"genimgdisabled": "At the moment generate images disabled:\n\n{}",
"sub-req": "Subscription is required for yami work, otherwise the module will not be removed and will not work before subscription",
"copyright": "Result from Yami's bot 💘",
}
strings_ru = {
"timeout-error": "🚫 Бот не ответил в течении трёх минут, он отключён либо же вы задали ему слишком сложный запрос в /img",
"wait": "Ожидаю...\n\nИнтересный факт! Если бот не ответит в течении трёх минут, то будет ошибка",
"alive": "💖 Бот жив!",
"dead": "💔 Бот мёртв...",
"answer": "🔀 Ответ бота:\n\n{}",
"aleardyconv": "⛔ Нельзя выполнять больше одной команды",
"genimgdisabled": "В данный момент генерация изображений отключена:\n\n{}",
"sub-req": "Подписка необходима для работы ями, иначе модуль не будет удалён и не будет работать до подписки",
"copyright": "Результат из бота Ями 💘",
"_cls_doc": "Модуль для @YamiChat_bot",
}
def __init__(self):
self.bot = "YamiChat_bot"
@loader.command(
ru_doc=" [команда] [запрос] - Отправить команду Ями бот\nПример: .scmmnd /img аргументы с запросом"
)
async def scmmnd(self, message: Message):
"""[cmd] [request] - Send command to Yami bot\nExample: .scmmnd /img arguments with req"""
args = utils.get_args_raw(message).split()
req = " ".join(args[1:])
await utils.answer(message, f"☁ {self.strings['wait']}")
try:
async with self.client.conversation(self.bot, timeout=180) as conv:
try:
await conv.send_message(f"{args[0]} {req}")
res = await conv.get_response()
if "❌ Чтобы использовать эту функцию, подпишись на мой канал @YamiSpace! ><" in res.raw_text:
await utils.answer(
message, f"Check @{self.inline.bot_username}"
)
return await self.yami_request_join()
if (
"✅ Запрос принят"
in res.raw_text
):
await asyncio.sleep(10)
res = await conv.get_response()
elif (
"❌ Технические работы. Попробуй позже.."
in res.raw_text
):
return await utils.answer(
message, self.strings["genimgdisabled"].format(res.text)
)
await conv.mark_read()
except asyncio.TimeoutError:
return await utils.answer(message, self.strings["timeout-error"])
except AlreadyInConversationError:
return await utils.answer(message, self.strings["aleardyconv"])
if res.media is not None:
return await utils.answer(
message,
res.media,
caption=self.strings["answer"].format(res.text)
+ (
("\n\n") + self.strings["copyright"]
if random.randint(0, 10) <= 5
else ""
),
as_file=True,
)
else:
return await utils.answer(
message,
self.strings["answer"].format(res.text)
+ (
("\n\n") + self.strings["copyright"]
if random.randint(0, 10) <= 5
else ""
),
)
@loader.command(ru_doc=" - Проверьте, жив ли бот")
async def chalive(self, message: Message):
"""- Check, to see if the bot is alive"""
try:
async with self.client.conversation(self.bot, timeout=10) as conv:
try:
await conv.send_message("/start")
except asyncio.TimeoutError:
return await utils.answer(message, self.strings["dead"])
finally:
conv.cancel()
except AlreadyInConversationError:
return await utils.answer(message, self.strings["aleardyconv"])
await utils.answer(message, self.strings["alive"])
async def yami_request_join(self):
reply_markup = InlineKeyboardMarkup()
reply_markup.add(InlineKeyboardButton(text="✅ Approve", callback_data="approve"))
reply_markup.add(InlineKeyboardButton(text="❌ Decline", callback_data="decline"))
await self.inline.bot.send_message(self.tg_id, self.strings["sub-req"], reply_markup=reply_markup)
async def yami_sub_callback_handler(self, call: InlineCall):
if call.data == 'decline':
await call.answer('❌')
await self.invoke("unloadmod", "YamiManager", call.message.chat.id)
await call.message.delete()
elif call.data == 'approve':
await self.client(telethon.tl.functions.channels.JoinChannelRequest(
channel='YamiSpace'
))
await call.answer('✅')
await call.message.delete()