# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # scope: hikka_min 1.2.10 # meta pic: https://img.icons8.com/color/480/000000/comedy.png # meta banner: https://mods.hikariatama.ru/badges/rpmod.jpg # meta developer: @hikarimods import io import json import grapheme from telethon.tl.types import Message from telethon.utils import get_display_name from .. import loader, utils @loader.tds class RPMod(loader.Module): """RPMod by HikariMods""" strings = { "name": "RPMod", "args": "🚫 Incorrect args", "success": "✅ Success", "rp_on": "✅ RPM on", "rp_off": "✅ RPM off", "rplist": "🦊 Current RP commands\n\n{}", "backup_caption": ( "🦊 My RP commands. Restore with .rprestore" ), "no_file": "🚫 Reply to file", "restored": ( "✅ RP Commands restored. See them with .rplist" ), } strings_ru = { "args": "🚫 Неверные аргументы", "success": "✅ Успешно", "rp_on": "✅ RPM включен", "rp_off": "✅ RPM выключен", "rplist": "🦊 Текущие RP команды\n\n{}", "backup_caption": ( "🦊 Мои RP команды. Ты можешь восстановить их используя" " .rprestore" ), "no_file": "🚫 Ответь на файл", "restored": ( "✅ RP команды восстановлены. Их можно посмотреть используя" " .rplist" ), "_cmd_doc_rp": ( " - Добавить RP команду. Если не указано сообщение," " команда будет удалена" ), "_cmd_doc_rptoggle": "Включить\\выключить RP режим в текущем чате", "_cmd_doc_rplist": "Показать RP команды", "_cmd_doc_rpbackup": "Сохранить RP команды в файл", "_cmd_doc_rprestore": "Восстановить RP команды из файла", "_cmd_doc_rpchats": "Показать чаты, где активен режим RP", "_cls_doc": "RPMod от HikariMods", } async def client_ready(self, client, db): self.rp = self.get( "rp", { "поцеловать": " 💋 поцеловал", "чмок": " ❤️ чмокнул", "обнять": "☺️ обнял", "лизнуть": "👅 лизнул", "напоить": "🥃 напоил", "связать": "⛓ связал", "приковать": "🔗 приковал", "трахнуть": "👉👌 сочно трахнул", "убить": "🔪 убил", "уничтожить": " 💥 низвёл до атомов", "расстрелять": "🔫 расстрелял", "отдаться": "🥵 страстно отдался", "раб": "⛓ забрал в рабство", }, ) self.chats = self.get("active", []) async def rpcmd(self, message: Message): """ - Add RP Command. If message unspecified, remove command""" args = utils.get_args_raw(message) try: command = args.split(" ", 1)[0] msg = args.split(" ", 1)[1] except Exception: if not args or command not in self.rp: await utils.answer(message, self.strings("args")) else: del self.rp[command] self.set("rp", self.rp) await utils.answer(message, self.strings("success")) return self.rp[command] = msg self.set("rp", self.rp) await utils.answer(message, self.strings("success")) async def rptogglecmd(self, message: Message): """Toggle RP Mode in current chat""" cid = str(utils.get_chat_id(message)) if cid in self.chats: self.chats.remove(cid) await utils.answer(message, self.strings("rp_off")) else: self.chats += [cid] await utils.answer(message, self.strings("rp_on")) self.set("active", self.chats) @loader.unrestricted async def rplistcmd(self, message: Message): """List RP Commands""" await utils.answer( message, self.strings("rplist").format( "\n".join( [f" ▫️ {command} - {msg}" for command, msg in self.rp.items()] ) ), ) async def rpbackupcmd(self, message: Message): """Backup RP Commands to file""" file = io.BytesIO(json.dumps(self.rp).encode("utf-8")) file.name = "rp-backup.json" await self._client.send_file( utils.get_chat_id(message), file, caption=self.strings("backup_caption"), ) await message.delete() async def rprestorecmd(self, message: Message): """Restore RP Commands from file""" reply = await message.get_reply_message() if not reply or not reply.media: await utils.answer(message, self.strings("no_file")) return file = (await self._client.download_file(reply.media, bytes)).decode("utf-8") self.rp = json.loads(file) self.set("rp", self.rp) await utils.answer(message, self.strings("restored")) async def rpchatscmd(self, message: Message): """List chats, where RPM is active""" await utils.answer( message, f"🦊 RPM is active in {len(self.chats)} chats:\n\n" + "\n".join( [ " 🇯🇵" f" {utils.escape_html(get_display_name(await self._client.get_entity(int(chat))))}" for chat in self.chats ] ), ) async def watcher(self, message: Message): cid = str(utils.get_chat_id(message)) try: if ( cid not in self.chats or not isinstance(message, Message) or not hasattr(message, "raw_text") or message.raw_text.split(maxsplit=1)[0].lower() not in self.rp ): return except IndexError: return try: cmd = message.raw_text.split(maxsplit=1)[0].lower() except IndexError: return msg = self.rp[cmd] entity = None try: entity = await self._client.get_entity( message.raw_text.split(maxsplit=2)[1] ) except Exception: pass reply = await message.get_reply_message() try: reply = await self._client.get_entity(reply.sender_id) except Exception: pass if not reply and not entity: return if reply and entity or not reply: reply = entity sender = await self._client.get_entity(message.sender_id) if utils.emoji_pattern.match(next(grapheme.graphemes(msg))): msg = list(grapheme.graphemes(msg)) emoji = msg[0] msg = "".join(msg[1:]) else: emoji = "🦊" await utils.answer( message, ( f"{emoji} {utils.escape_html(sender.first_name)}' f" {utils.escape_html(msg)} {utils.escape_html(reply.first_name)}' ), )