# █▀▀▄ █▀▄▀█ █▀█ █▀▄ █▀
# ▀▀▀█ ▄ █ ▀ █ █▄█ █▄▀ ▄█
# #### Copyright (c) 2025 Archquise #####
# 💬 Contact: https://t.me/archquise
# 🔒 Licensed under the GNU AGPLv3.
# 📄 LICENSE: https://raw.githubusercontent.com/archquise/Q.Mods/main/LICENSE
# ---------------------------------------------------------------------------------
# Name: IrisSimpleMod
# Description: Module for basic interaction with Iris.
# Author: @quise_m
# ---------------------------------------------------------------------------------
# meta developer: @quise_m
# meta banner: https://raw.githubusercontent.com/archquise/qmods_meta/main/IrisSimpleMod.png
# ---------------------------------------------------------------------------------
import logging
from .. import loader, utils
__version__ = (1, 0, 1)
logger = logging.getLogger(__name__)
@loader.tds
class IrisSimpleMod(loader.Module):
"""Module for basic interaction with Iris bot."""
strings = { # noqa: RUF012
"name": "IrisSimpleMod",
"checking_bag": "🌎 Checking bag...",
"bag_result": "✅ Your bag: {}",
"farming": "🌎 Farming iris-coins...",
"farm_result": "✅ Farm result: {}",
"getting_stats": "🌎 Getting user stats...",
"stats_result": "✅ User stats: {}",
"bot_stats": "🌎 Getting bot stats...",
"bot_stats_result": "✅ Bot stats: {}",
"error_no_response": "❌ No response from bot. Please try again.",
"error_timeout": "❌ Request timeout. Please try again.",
"error_general": "❌ An error occurred: {error}",
}
strings_ru = { # noqa: RUF012
"checking_bag": "🌎 Проверка мешка...",
"bag_result": "✅ Ваш мешок: {}",
"farming": "🌎 Фарм ирис-коинов...",
"farm_result": "✅ Результат фарма: {}",
"getting_stats": "🌎 Получение статистики пользователя...",
"stats_result": "✅ Статистика пользователя: {}",
"bot_stats": "🌎 Получение статистики ботов...",
"bot_stats_result": "✅ Статистика ботов: {}",
"error_no_response": "❌ Нет ответа от бота. Попробуйте еще раз.",
"error_timeout": "❌ Таймаут запроса. Попробуйте еще раз.",
"error_general": "❌ Произошла ошибка: {error}",
"_cls_doc": "Модуль для базового взаимодействия с Ирисом!",
}
async def _send_and_delete(
self,
message,
command_message: str,
response_timeout: int = 15, # noqa: ANN001
) -> str | None:
"""Send command to Iris and get response with timeout."""
try:
async with self.client.conversation(
707693258,
timeout=response_timeout,
) as conv:
msg = await conv.send_message(command_message)
await msg.delete()
response_msg = await conv.get_response()
if response_msg:
await utils.answer(message, response_msg.text)
return response_msg.text
return None
except Exception as e:
logger.exception("Error in conversation!")
await utils.answer(
message,
self.strings["error_general"].format(error=str(e)),
)
return None
@loader.command(
ru_doc="Проверить мешок",
en_doc="Check bag",
)
async def bag(self, message): # noqa: ANN001, ANN201
"""Check bag."""
await utils.answer(message, self.strings["checking_bag"])
result = await self._send_and_delete(message, "мешок", response_timeout=20)
if result:
await utils.answer(message, self.strings["bag_result"].format(result))
@loader.command(
ru_doc="Зафармить ирис-коины",
en_doc="Farm iris-coins",
)
async def farm(self, message): # noqa: ANN001, ANN201
"""Farm iris-coins."""
await utils.answer(message, self.strings["farming"])
result = await self._send_and_delete(message, "ферма", response_timeout=25)
if result:
await utils.answer(message, self.strings["farm_result"].format(result))
@loader.command(
ru_doc="Вывести анкету",
en_doc="Display user stats",
)
async def irisstats(self, message): # noqa: ANN001, ANN201
"""Display user stats."""
await utils.answer(message, self.strings["getting_stats"])
result = await self._send_and_delete(message, "анкета", response_timeout=20)
if result:
await utils.answer(message, self.strings["stats_result"].format(result))