# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © 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)