# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © 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/notes_icon.png # meta banner: https://mods.hikariatama.ru/badges/notes.jpg # meta developer: @hikarimods # scope: hikka_only # scope: hikka_min 1.2.10 import logging from telethon.tl.types import Message from .. import loader, utils logger = logging.getLogger(__name__) @loader.tds class NotesMod(loader.Module): """Advanced notes module with folders and other features""" strings = { "name": "Notes", "saved": ( "💾 Saved note with name {}.\nFolder:" " {}." ), "no_reply": "🚫 Reply and note name are required.", "no_name": "🚫 Specify note name.", "no_note": "🚫 Note not found.", "available_notes": "💾 Current notes:\n", "no_notes": "😔 You have no notes yet", "deleted": "🙂 Deleted note {}", } strings_ru = { "saved": ( "💾 Заметка с именем {} сохранена.\nПапка:" " {}." ), "no_reply": "🚫 Требуется реплай на контент заметки.", "no_name": "🚫 Укажи имя заметки.", "no_note": "🚫 Заметка не найдена.", "available_notes": "💾 Текущие заметки:\n", "no_notes": "😔 У тебя пока что нет заметок", "deleted": "🙂 Заметка с именем {} удалена", "_cmd_doc_hsave": "[папка] <имя> - Сохранить заметку", "_cmd_doc_hget": "<имя> - Показать заметку", "_cmd_doc_hdel": "<имя> - Удалить заметку", "_cmd_doc_hlist": "[папка] - Показать все заметки", "_cls_doc": "Модуль заметок с расширенным функционалом. Папки и категории", } strings_de = { "saved": ( "💾 Notiz mit dem Namen {} gespeichert.\nOrdner:" " {}." ), "no_reply": "🚫 Antworte auf den Inhalt der Notiz.", "no_name": "🚫 Gib einen Namen für die Notiz an.", "no_note": "🚫 Notiz nicht gefunden.", "available_notes": "💾 Aktuelle Notizen:\n", "no_notes": "😔 Du hast noch keine Notizen", "deleted": "🙂 Notiz mit dem Namen {} gelöscht", "_cmd_doc_hsave": "[Ordner] - Speichert eine neue Notiz", "_cmd_doc_hget": " - Zeigt eine Notiz an", "_cmd_doc_hdel": " - Löscht eine Notiz", "_cmd_doc_hlist": "[Ordner] - Zeigt alle Notizen an", "_cls_doc": "Notizenmodul mit erweiterten Funktionen. Ordner und Kategorien", } strings_tr = { "saved": ( "💾 Notu adı {} kaydedildi.\nKlasör:" " {}." ), "no_reply": "🚫 Not içeriğine yanıt verin.", "no_name": "🚫 Bir not adı belirtin.", "no_note": "🚫 Not bulunamadı.", "available_notes": "💾 Mevcut notlar:\n", "no_notes": "😔 Henüz notunuz yok", "deleted": "🙂 Not adı {} silindi", "_cmd_doc_hsave": "[Klasör] - Yeni bir not kaydedin", "_cmd_doc_hget": " - Bir notu göster", "_cmd_doc_hdel": " - Bir notu sil", "_cmd_doc_hlist": "[Klasör] - Tüm notları göster", "_cls_doc": "Gelişmiş not modülü. Klasörler ve diğer özellikler", } strings_uz = { "saved": ( "💾 Qayd nomi {} saqlandi.\nJild:" " {}." ), "no_reply": "🚫 Qayd tarkibiga javob bering.", "no_name": "🚫 Qayd nomini kiriting.", "no_note": "🚫 Qayd topilmadi.", "available_notes": "💾 Mavjud qaydlar:\n", "no_notes": "😔 Hozircha sizda qayd yo'q", "deleted": "🙂 Qayd nomi {} o'chirildi", "_cmd_doc_hsave": "[Jild] - Yangi qayd saqlash", "_cmd_doc_hget": " - Qaydni ko'rsatish", "_cmd_doc_hdel": " - Qaydni o'chirish", "_cmd_doc_hlist": "[Jild] - Barcha qaydlarni ko'rsatish", "_cls_doc": "Kengaytirilgan qayd moduli. Jildlar va kategoriyalar", } strings_hi = { "saved": ( "💾 नोट का नाम {} सहेजा गया.\nफ़ोल्डर:" " {}." ), "no_reply": "🚫 नोट की अंतर्दृष्टि पर जवाब दें।", "no_name": "🚫 एक नोट नाम दर्ज करें।", "no_note": "🚫 नोट नहीं मिला।", "available_notes": "💾 उपलब्ध नोट्स:\n", "no_notes": "😔 आपके पास अभी तक कोई नोट नहीं है", "deleted": "🙂 नोट नाम {} हटा दिया गया", "_cmd_doc_hsave": "[फ़ोल्डर] <नाम> - एक नया नोट सहेजें", "_cmd_doc_hget": "<नाम> - एक नोट दिखाएं", "_cmd_doc_hdel": "<नाम> - एक नोट हटाएं", "_cmd_doc_hlist": "[फ़ोल्डर] - सभी नोट्स दिखाएं", "_cls_doc": "उन्नत नोट्स मॉड्यूल। फ़ोल्डर और श्रेणियाँ", } async def client_ready(self): self._notes = self.get("notes", {}) async def hsavecmd(self, message: Message): """[folder] - Save new note""" args = utils.get_args_raw(message) if len(args.split()) >= 2: folder = args.split()[0] args = args.split(maxsplit=1)[1] else: folder = "global" 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) if getattr(reply, "video", False): type_ = "🎞" elif getattr(reply, "photo", False): type_ = "🖼" elif getattr(reply, "voice", False): type_ = "🗣" elif getattr(reply, "audio", False): type_ = "🎧" elif getattr(reply, "file", False): type_ = "📝" else: type_ = "🔹" self._notes[folder][args] = {"id": asset, "type": type_} self.set("notes", self._notes) await utils.answer(message, self.strings("saved").format(args, folder)) def _get_note(self, name): for category, notes in self._notes.items(): for note, asset in notes.items(): if note == name: return asset def _del_note(self, name): for category, notes in self._notes.copy().items(): for note, asset in notes.copy().items(): if note == name: del self._notes[category][note] if not self._notes[category]: del self._notes[category] self.set("notes", self._notes) return True return False async def hgetcmd(self, message: Message): """ - Show specified note""" 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 hdelcmd(self, message: Message): """ - Delete specified note""" 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 try: await (await self._db.fetch_asset(asset["id"])).delete() except Exception: pass self._del_note(args) await utils.answer(message, self.strings("deleted").format(args)) async def hlistcmd(self, message: Message): """[folder] - List all notes""" 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🔸 {category}\n" for note, asset in notes.items(): result += f" {asset['type']} {note}\n" await utils.answer(message, result) return for note, asset in self._notes[args].items(): result += f"{asset['type']} {note}\n" await utils.answer(message, result)