mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 07:04:19 +02:00
Commited backup
This commit is contained in:
362
SkillsAngels/Modules/IrisLab.py
Normal file
362
SkillsAngels/Modules/IrisLab.py
Normal file
@@ -0,0 +1,362 @@
|
||||
import contextlib
|
||||
|
||||
__version__ = (0, 0, 2)
|
||||
|
||||
# _ _ _ _
|
||||
# | | | | (_) |
|
||||
# | | ___ | |_ ___ ___ _| | __
|
||||
# | | / _ \| __/ _ \/ __| | |/ /
|
||||
# | |___| (_) | || (_) \__ \ | <
|
||||
# \_____/\___/ \__\___/|___/_|_|\_\
|
||||
#
|
||||
# © Copyright 2022
|
||||
#
|
||||
# developed by @lotosiiik, @byateblan
|
||||
|
||||
# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ ▄▀█ ▀█▀ ▄▀█ █▀▄▀█ ▄▀█
|
||||
# █▀█ █ █ █ █▀█ █▀▄ █ ▄ █▀█ █ █▀█ █ ▀ █ █▀█
|
||||
#
|
||||
# 🔒 Licensed under the GNU AGPLv3
|
||||
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
|
||||
# meta developer: @hikkaftgmods
|
||||
# meta banner: https://i.imgur.com/2KZ38Pv.jpeg
|
||||
# meta pic: https://i.imgur.com/QntqxyH.jpeg
|
||||
|
||||
import logging
|
||||
import re
|
||||
import asyncio
|
||||
from .. import loader, utils
|
||||
from telethon.tl.types import Message
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class IrisLabMod(loader.Module):
|
||||
"""Показывает лаб/жертв. Возможны задержки на получение инф-ции"""
|
||||
|
||||
strings = {
|
||||
"name": "IrisLab",
|
||||
"saved": "💾 <b>Заметка с именем </b><code>{}</code><b> сохранена</b>.",
|
||||
"no_reply": "🚫 <b>Требуется реплай на контент заметки.</b>",
|
||||
"no_name": "🚫 <b>Укажите имя заметки.</b>",
|
||||
"no_note": "🚫 <b>Данная заметка не найдена или она не существует.</b>",
|
||||
"available_notes": "💾 <b>Текущие заметки:</b>\n",
|
||||
"no_notes": "😔 <b>У тебя пока что нет заметок</b>",
|
||||
"deleted": "🙂 <b>Заметка с именем </b><code>{}</code> <b>удалена</b>",
|
||||
"lab_data": {
|
||||
"d": "(.*) Досье лаборатории (.*)",
|
||||
"s": "(.*) Руководитель: (.*)",
|
||||
"с": "(.*) В составе Корпорации (.*)",
|
||||
"n": "(.*) Имя патогена: (.*)",
|
||||
"p": "(.*) Готовых патогенов: (.*) из (.*)",
|
||||
"q": "(.*) Квалификация учёных: (.*)",
|
||||
"np": "(.*) Новый патоген: (.*)",
|
||||
"inf": "(.*) Заразность: (.*)",
|
||||
"imn": "(.*) Иммунитет: (.*)",
|
||||
"m": "(.*) Летальность: (.*)",
|
||||
"ss": "(.*) Служба безопасности: (.*)",
|
||||
"be": "(.*) Био-опыт: (.*)",
|
||||
"br": "(.*) Био-ресурс: (.*)",
|
||||
"so": "(.*) Спецопераций: (.*)",
|
||||
"prev": "(.*) Предотвращены: (.*)",
|
||||
"i": "(.*) Заражённых: (.*)",
|
||||
"dis": "(.*) Своих болезней: (.*)",
|
||||
"f": "<b> Руководитель в состоянии горячки",
|
||||
},
|
||||
}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
db.set("Iris", "chat_biowar", "@iris_black_bot")
|
||||
|
||||
self.client = client
|
||||
self.db = db
|
||||
self._notes = self.get("victims_list", {})
|
||||
|
||||
async def message_q(
|
||||
self,
|
||||
text: str,
|
||||
user_id: int,
|
||||
mark_read: bool = False,
|
||||
delete: bool = False,
|
||||
):
|
||||
"""Отправляет сообщение и возращает ответ"""
|
||||
async with self.client.conversation(user_id) as conv:
|
||||
msg = await conv.send_message(text)
|
||||
response = await conv.get_response()
|
||||
if mark_read:
|
||||
await conv.mark_read()
|
||||
|
||||
if delete:
|
||||
await msg.delete()
|
||||
await response.delete()
|
||||
|
||||
return response
|
||||
|
||||
async def labcmd(self, message):
|
||||
"""Модуль который выдаст вам статистику вашей лаборатории (лаб)"""
|
||||
bot = "@iris_black_bot"
|
||||
lab = await self.message_q(".Лаб", bot, mark_read=True, delete=True)
|
||||
args_raw = utils.get_args_raw(message)
|
||||
if not args_raw:
|
||||
return await utils.answer(message, lab.text)
|
||||
|
||||
data, text = self.strings("lab_data"), []
|
||||
flags = "".join(args_raw.split(" ")).split("-")
|
||||
if "" in flags:
|
||||
flags.remove("")
|
||||
for flag in flags:
|
||||
search = re.search(data[flag], lab.text) if flag in data else None
|
||||
if search:
|
||||
if flag == "be":
|
||||
num = search.group().split(":")[-1].replace(" ", "")
|
||||
if num[-1] == "k":
|
||||
num = (
|
||||
int(num[:-1].replace(",", "")) * 100 / 100 * 10
|
||||
if "," in num
|
||||
else int(num[:-1]) * 1000 / 100 * 10
|
||||
)
|
||||
elif num[:-1] != "k":
|
||||
num = int(num) / 100 * 10
|
||||
text.append(f"{search.group()} | {num}")
|
||||
elif flag == "d":
|
||||
text.append(search.group()[:-1])
|
||||
else:
|
||||
text.append(search.group())
|
||||
elif flag == "parametrs":
|
||||
text = """
|
||||
d: Имя лаборатории
|
||||
s: Руководитель
|
||||
с: Корпорация
|
||||
|
||||
n: Имя патогена
|
||||
p: Готовых патогенов
|
||||
q: Квалификация учёных 👨🔬
|
||||
np: Новый патоген через... ⏱
|
||||
|
||||
inf: Заразность
|
||||
imn: Иммунитет 🛡️
|
||||
m: Летальность ☠️
|
||||
ss: Служба безопасности
|
||||
|
||||
be: Био-опыт ☣️
|
||||
br: Био-ресурс 🧬
|
||||
so: Спецопераций 😷
|
||||
prev: Предотвращены 🥽
|
||||
|
||||
i: заражённых 🤒
|
||||
dis: Своих болезней 🤒
|
||||
|
||||
f: Горячка руководителя
|
||||
v: Ежедневная премия(ежа) 💸"""
|
||||
return await utils.answer(message, text)
|
||||
elif flag == "v":
|
||||
await asyncio.sleep(3)
|
||||
bot = "@iris_black_bot"
|
||||
victims = await self.message_q(
|
||||
"Мои жертвы", bot , mark_read=True, delete=True
|
||||
)
|
||||
result = re.search(
|
||||
r"""(.*) Ежедневная премия: (.*)""", victims.text
|
||||
).group()
|
||||
text.append(result)
|
||||
elif flag in data:
|
||||
app_text = (
|
||||
"✅ Все патогены приготовлены" if flag == "np" else "❌ Горячки нету"
|
||||
)
|
||||
text.append(app_text)
|
||||
else:
|
||||
text.append(f"Параметр -{flag} не указан.")
|
||||
return await utils.answer(message, "\n".join(text))
|
||||
|
||||
async def victimscmd(self, message):
|
||||
"""Комманда показывает ваши жертвы"""
|
||||
bot = "@iris_black_bot"
|
||||
victims = await self.message_q(
|
||||
"Мои жертвы",
|
||||
bot,
|
||||
mark_read=True,
|
||||
delete=True,
|
||||
)
|
||||
|
||||
args_raw = utils.get_args_raw(message)
|
||||
|
||||
if not args_raw:
|
||||
await utils.answer(message, victims.text)
|
||||
|
||||
async def upgcmd(self, message):
|
||||
"""Увеличивает зз/имун и тд.Как использовать(Пример) .upg летальность (число 1-5)"""
|
||||
args = utils.get_args(message)
|
||||
bot = "@iris_black_bot"
|
||||
characteristics = (
|
||||
"заразность",
|
||||
"летальность",
|
||||
"иммунитет",
|
||||
"безопасность",
|
||||
"разработка",
|
||||
"патоген",
|
||||
)
|
||||
if len(args) != 2:
|
||||
await utils.answer(message, "Указано больше или меньше двух параметров")
|
||||
elif args[0].lower() not in characteristics:
|
||||
await utils.answer(message, "Данного улучшения не существует")
|
||||
elif not args[1].isdigit():
|
||||
await utils.answer(message, "Второй параметр не является числом")
|
||||
elif int(args[1]) > 5 or int(args[1]) < 0:
|
||||
await utils.answer(message, "Уровень указан вне допустимого диапазона")
|
||||
else:
|
||||
upgrade = await self.message_q(
|
||||
f"++{args[0].lower()} {args[1]}",
|
||||
bot,
|
||||
mark_read=True,
|
||||
delete=True,
|
||||
)
|
||||
|
||||
args_raw = utils.get_args_raw(message)
|
||||
|
||||
|
||||
await utils.answer(message, upgrade.text)
|
||||
|
||||
async def gcmd(self, message: Message):
|
||||
"""<name> - показывает заметку"""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
asset = self._get_note(args)
|
||||
if not asset:
|
||||
await utils.answer(message, self.strings("no_note"))
|
||||
return
|
||||
|
||||
await self._client.send_message(
|
||||
message.peer_id,
|
||||
await self._db.fetch_asset(asset["id"]),
|
||||
reply_to=getattr(message, "reply_to_msg_id", False),
|
||||
)
|
||||
|
||||
if message.out:
|
||||
await message.delete()
|
||||
|
||||
async def svcmd(self, message):
|
||||
"""<name> - для сохранения заметки"""
|
||||
args = utils.get_args_raw(message)
|
||||
folder = "victims_list"
|
||||
|
||||
reply = await message.get_reply_message()
|
||||
if not (reply and args):
|
||||
await utils.answer(message, self.strings("no_reply"))
|
||||
return
|
||||
if folder not in self._notes:
|
||||
self._notes[folder] = {}
|
||||
logger.warning(f"Created new folder {folder}")
|
||||
|
||||
asset = await self._db.store_asset(reply)
|
||||
|
||||
type_ = "☣️"
|
||||
|
||||
self._notes[folder][args] = {"id": asset, "type": type_}
|
||||
|
||||
self.set("victims_list", self._notes)
|
||||
|
||||
await utils.answer(message, self.strings("saved").format(args, folder))
|
||||
|
||||
def _get_note(self, name: str):
|
||||
for notes in self._notes.values():
|
||||
for note, asset in notes.items():
|
||||
if note == name:
|
||||
return asset
|
||||
|
||||
def _del_note(self, name: str):
|
||||
for category, notes in self._notes.copy().items():
|
||||
for note in notes.copy():
|
||||
if note == name:
|
||||
del self._notes[category][note]
|
||||
|
||||
if not self._notes[category]:
|
||||
del self._notes[category]
|
||||
|
||||
self.set("victims_list", self._notes)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
async def dcmd(self, message: Message):
|
||||
"""<name> - удаляет заметку"""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
asset = self._get_note(args)
|
||||
if not asset:
|
||||
await utils.answer(message, self.strings("no_note"))
|
||||
return
|
||||
|
||||
with contextlib.suppress(Exception):
|
||||
await (await self._db.fetch_asset(asset["id"])).delete()
|
||||
|
||||
self._del_note(args)
|
||||
|
||||
await utils.answer(message, self.strings("deleted").format(args))
|
||||
|
||||
async def listcmd(self, message: Message):
|
||||
"""[folder] - показывает все заметки"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
if not self._notes:
|
||||
await utils.answer(message, self.strings("no_notes"))
|
||||
return
|
||||
|
||||
result = self.strings("available_notes")
|
||||
if not args or args not in self._notes:
|
||||
for category, notes in self._notes.items():
|
||||
result += f"\n🔸 <b>{category}</b>\n"
|
||||
for note, asset in notes.items():
|
||||
result += f" {asset['type']} <code>{note}</code>\n"
|
||||
|
||||
await utils.answer(message, result)
|
||||
return
|
||||
|
||||
for note, asset in self._notes[args].items():
|
||||
result += f"{asset['type']} <code>{note}</code>\n"
|
||||
|
||||
await utils.answer(message, result)
|
||||
|
||||
async def iccmd(self, message: Message):
|
||||
"""Комманда котрая вычисляет сколько 🧬Био-ресурсов или же ic☣️ нужно\nПример: .ic <характеристика> <уровень С> <уровень До>"""
|
||||
args = utils.get_args(message)
|
||||
if not args or len(args) != 3 or not args[1].isdigit() or not args[2].isdigit() or int(args[2]) == int(args[1]) or int(args[2]) < int(args[1]):
|
||||
await utils.answer(
|
||||
message, "🚫| <b>Чтобы использовать калькулятор напишите .ic <навык> <уровень С> <уровень До></b>"
|
||||
)
|
||||
return
|
||||
|
||||
skill, from_lvl, to_lvl = args
|
||||
from_lvl, to_lvl = int(from_lvl), int(to_lvl)
|
||||
amount = (
|
||||
await self._client.inline_query(
|
||||
"@hikkaftgbot", f"{skill}#{from_lvl}#{to_lvl}"
|
||||
)
|
||||
)[0].title
|
||||
|
||||
if not amount.isdigit():
|
||||
await utils.answer(message, amount)
|
||||
return
|
||||
|
||||
amount = f"{int(amount):,}".replace(",", " ")
|
||||
|
||||
await utils.answer(
|
||||
message,
|
||||
f"🍀| Чтобы увеличить навык «{skill}» с {from_lvl} до {to_lvl} уровня"
|
||||
f" потребуется: {amount} био-ресурсов🧬 или же ic☣️",
|
||||
)
|
||||
|
||||
async def listcmd(self, message):
|
||||
"""Помощь по ирис лабу."""
|
||||
|
||||
hi = '🍀| <b>Флаги которые помогут узнать отдельную часть лаборатории:</b>\n\n"d": "Досье лаборатории ",\n"s": "Руководитель: ",\n"с": "В составе Корпорации ",\n"n": "Имя патогена: ",\n"p": "Готовых патогенов: ",\n"q": "Квалификация учёных: ",\n"np": "Новый патоген: ",\n"inf": "Заразность: ",\n"imn": "Иммунитет: ",\n"m": "Летальность: ",\n"ss": "Служба безопасности: ",\n"be": "Био-опыт: ",\n"br": "Био-ресурс: ",\n"so": " Спецопераций: ",\n"prev": " Предотвращены: ",\n"i": " Заражённых: ",\n"dis": "Своих болезней: ",\n"f": "Руководитель в состоянии горячки"\n\n <b>Пример использования флагов: .lab v or .lab np</b>'
|
||||
|
||||
await utils.answer(message, f"{hi}")
|
||||
Reference in New Issue
Block a user