mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2025-12-29 17:44:50 +00:00
Tes add notes from wbb
This commit is contained in:
parent
c5d1ca2548
commit
85d0a1d4ae
6 changed files with 209 additions and 12 deletions
50
database/notes_db.py
Normal file
50
database/notes_db.py
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
from database import dbname
|
||||||
|
from typing import Dict, Union, List
|
||||||
|
|
||||||
|
notesdb = dbname.notes
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_notes(chat_id: int) -> Dict[str, int]:
|
||||||
|
_notes = await notesdb.find_one({"chat_id": chat_id})
|
||||||
|
if not _notes:
|
||||||
|
return {}
|
||||||
|
return _notes["notes"]
|
||||||
|
|
||||||
|
|
||||||
|
async def delete_note(chat_id: int, name: str) -> bool:
|
||||||
|
notesd = await _get_notes(chat_id)
|
||||||
|
name = name.lower().strip()
|
||||||
|
if name in notesd:
|
||||||
|
del notesd[name]
|
||||||
|
await notesdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"notes": notesd}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
|
||||||
|
name = name.lower().strip()
|
||||||
|
_notes = await _get_notes(chat_id)
|
||||||
|
if name in _notes:
|
||||||
|
return _notes[name]
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_note_names(chat_id: int) -> List[str]:
|
||||||
|
_notes = []
|
||||||
|
for note in await _get_notes(chat_id):
|
||||||
|
_notes.append(note)
|
||||||
|
return _notes
|
||||||
|
|
||||||
|
|
||||||
|
async def save_note(chat_id: int, name: str, note: dict):
|
||||||
|
name = name.lower().strip()
|
||||||
|
_notes = await _get_notes(chat_id)
|
||||||
|
_notes[name] = note
|
||||||
|
|
||||||
|
await notesdb.update_one(
|
||||||
|
{"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True
|
||||||
|
)
|
||||||
8
misskaty/core/custom_filter.py
Normal file
8
misskaty/core/custom_filter.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
from pyrogram import filters
|
||||||
|
|
||||||
|
|
||||||
|
def pesanedit(_, __, m: Message):
|
||||||
|
return bool(m.edit_date)
|
||||||
|
|
||||||
|
|
||||||
|
edited = filters.create(pesanedit)
|
||||||
|
|
@ -49,7 +49,12 @@ async def list_admins(chat_id: int):
|
||||||
|
|
||||||
admins_in_chat[chat_id] = {
|
admins_in_chat[chat_id] = {
|
||||||
"last_updated_at": time(),
|
"last_updated_at": time(),
|
||||||
"data": [member.user.id async for member in app.get_chat_members(chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS)],
|
"data": [
|
||||||
|
member.user.id
|
||||||
|
async for member in app.get_chat_members(
|
||||||
|
chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
||||||
|
)
|
||||||
|
],
|
||||||
}
|
}
|
||||||
return admins_in_chat[chat_id]["data"]
|
return admins_in_chat[chat_id]["data"]
|
||||||
|
|
||||||
|
|
@ -72,7 +77,10 @@ async def authorised(func, subFunc2, client, message, *args, **kwargs):
|
||||||
|
|
||||||
async def unauthorised(message: Message, permission, subFunc2):
|
async def unauthorised(message: Message, permission, subFunc2):
|
||||||
chatID = message.chat.id
|
chatID = message.chat.id
|
||||||
text = "You don't have the required permission to perform this action." + f"\n**Permission:** __{permission}__"
|
text = (
|
||||||
|
"You don't have the required permission to perform this action."
|
||||||
|
+ f"\n**Permission:** __{permission}__"
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
await message.reply_text(text)
|
await message.reply_text(text)
|
||||||
except ChatWriteForbidden:
|
except ChatWriteForbidden:
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,9 @@ import os
|
||||||
import traceback
|
import traceback
|
||||||
import asyncio
|
import asyncio
|
||||||
from pyrogram import filters, enums
|
from pyrogram import filters, enums
|
||||||
from misskaty.vars import COMMAND_HANDLER, SUDO
|
|
||||||
from misskaty import app
|
from misskaty import app
|
||||||
|
from misskaty.vars import COMMAND_HANDLER, SUDO
|
||||||
|
from misskaty.core.custom_filter import edited
|
||||||
|
|
||||||
__MODULE__ = "DevCommand"
|
__MODULE__ = "DevCommand"
|
||||||
__HELP__ = """
|
__HELP__ = """
|
||||||
|
|
@ -19,7 +20,7 @@ __HELP__ = """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(filters.command(["logs"]) & filters.user(SUDO))
|
@app.on_message(filters.command(["logs"], COMMAND_HANDLER) & filters.user(SUDO))
|
||||||
async def log_file(bot, message):
|
async def log_file(bot, message):
|
||||||
"""Send log file"""
|
"""Send log file"""
|
||||||
try:
|
try:
|
||||||
|
|
@ -75,7 +76,7 @@ async def shell(client, message):
|
||||||
await message.reply("No Reply")
|
await message.reply("No Reply")
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(filters.command(["ev", "run"]) & filters.user(SUDO))
|
@app.on_message(filters.command(["ev", "run"], COMMAND_HANDLER) & filters.user(SUDO))
|
||||||
@app.on_edited_message(filters.command(["ev", "run"]) & filters.user(SUDO))
|
@app.on_edited_message(filters.command(["ev", "run"]) & filters.user(SUDO))
|
||||||
async def evaluation_cmd_t(client, message):
|
async def evaluation_cmd_t(client, message):
|
||||||
status_message = await message.reply("__Processing eval pyrogram...__")
|
status_message = await message.reply("__Processing eval pyrogram...__")
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,6 @@ async def save_filters(_, message):
|
||||||
}
|
}
|
||||||
await save_filter(chat_id, name, _filter)
|
await save_filter(chat_id, name, _filter)
|
||||||
await message.reply(f"__**Saved filter {name}.**__")
|
await message.reply(f"__**Saved filter {name}.**__")
|
||||||
await message.stop_propagation()
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(filters.command("filters") & ~filters.private)
|
@app.on_message(filters.command("filters") & ~filters.private)
|
||||||
|
|
@ -135,11 +134,9 @@ async def filters_re(_, message):
|
||||||
await message.delete()
|
await message.delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
return await app.send_message(
|
return await message.reply(
|
||||||
message.chat.id,
|
|
||||||
data,
|
data,
|
||||||
reply_markup=keyb,
|
reply_markup=keyb,
|
||||||
reply_to_message_id=message.id,
|
|
||||||
disable_web_page_preview=True,
|
disable_web_page_preview=True,
|
||||||
)
|
)
|
||||||
if message.reply_to_message:
|
if message.reply_to_message:
|
||||||
|
|
@ -148,6 +145,4 @@ async def filters_re(_, message):
|
||||||
if text.startswith("~"):
|
if text.startswith("~"):
|
||||||
await message.delete()
|
await message.delete()
|
||||||
return
|
return
|
||||||
await app.send_sticker(
|
await message.reply_sticker(data)
|
||||||
message.chat.id, data, reply_to_message_id=message.id
|
|
||||||
)
|
|
||||||
|
|
|
||||||
135
misskaty/plugins/notes.py
Normal file
135
misskaty/plugins/notes.py
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
"""
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 TheHamkerCat
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
"""
|
||||||
|
from re import findall
|
||||||
|
from pyrogram import filters
|
||||||
|
from misskaty import app
|
||||||
|
from misskaty.vars import COMMAND_HANDLER
|
||||||
|
from misskaty.core.decorator.errors import capture_err
|
||||||
|
from misskaty.core.decorator.permissions import adminsOnly
|
||||||
|
from misskaty.core.keyboard import ikb
|
||||||
|
from database.notes_db import (
|
||||||
|
delete_note,
|
||||||
|
get_note,
|
||||||
|
get_note_names,
|
||||||
|
save_note,
|
||||||
|
)
|
||||||
|
from misskaty.helper.functions import extract_text_and_keyb
|
||||||
|
|
||||||
|
__MODULE__ = "Notes"
|
||||||
|
__HELP__ = """/notes To Get All The Notes In The Chat.
|
||||||
|
|
||||||
|
/addnote [NOTE_NAME] To Save A Note (Can be a sticker or text).
|
||||||
|
|
||||||
|
#NOTE_NAME To Get A Note.
|
||||||
|
|
||||||
|
/delnote [NOTE_NAME] To Delete A Note.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_message(filters.command("addnote") & ~filters.private)
|
||||||
|
@adminsOnly("can_change_info")
|
||||||
|
async def save_notee(_, message):
|
||||||
|
if len(message.command) < 2 or not message.reply_to_message:
|
||||||
|
await message.reply(
|
||||||
|
text="**Usage:**\nReply to a text or sticker with /save [NOTE_NAME] to save it.",
|
||||||
|
)
|
||||||
|
|
||||||
|
elif not message.reply_to_message.text and not message.reply_to_message.sticker:
|
||||||
|
await message.reply("__**You can only save text or stickers in notes.**__")
|
||||||
|
else:
|
||||||
|
name = message.text.split(None, 1)[1].strip()
|
||||||
|
if not name:
|
||||||
|
return await message.reply("**Usage**\n__/save [NOTE_NAME]__")
|
||||||
|
_type = "text" if message.reply_to_message.text else "sticker"
|
||||||
|
note = {
|
||||||
|
"type": _type,
|
||||||
|
"data": message.reply_to_message.text.markdown
|
||||||
|
if _type == "text"
|
||||||
|
else message.reply_to_message.sticker.file_id,
|
||||||
|
}
|
||||||
|
prefix = message.text.split()[0][0]
|
||||||
|
chat_id = message.chat.id
|
||||||
|
await save_note(chat_id, name, note)
|
||||||
|
await message.reply(f"__**Saved note {name}.**__")
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_message(filters.command("notes") & ~filters.private)
|
||||||
|
@capture_err
|
||||||
|
async def get_notes(_, message):
|
||||||
|
prefix = message.text.split()[0][0]
|
||||||
|
chat_id = message.chat.id
|
||||||
|
|
||||||
|
_notes = await get_note_names(chat_id)
|
||||||
|
|
||||||
|
if not _notes:
|
||||||
|
return await message.reply("**No notes in this chat.**")
|
||||||
|
_notes.sort()
|
||||||
|
msg = f"List of notes in {message.chat.title}\n"
|
||||||
|
for note in _notes:
|
||||||
|
msg += f"**-** `{note}`\n"
|
||||||
|
await message.reply(msg)
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_message(filters.regex(r"^#.+") & filters.text & ~filters.private)
|
||||||
|
@capture_err
|
||||||
|
async def get_one_note(_, message):
|
||||||
|
name = message.text.replace("#", "", 1)
|
||||||
|
if not name:
|
||||||
|
return
|
||||||
|
_note = await get_note(message.chat.id, name)
|
||||||
|
if not _note:
|
||||||
|
return
|
||||||
|
if _note["type"] == "text":
|
||||||
|
data = _note["data"]
|
||||||
|
keyb = None
|
||||||
|
if findall(r"\[.+\,.+\]", data):
|
||||||
|
keyboard = extract_text_and_keyb(ikb, data)
|
||||||
|
if keyboard:
|
||||||
|
data, keyb = keyboard
|
||||||
|
await message.reply_text(
|
||||||
|
data,
|
||||||
|
reply_markup=keyb,
|
||||||
|
disable_web_page_preview=True,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await message.reply_sticker(_note["data"])
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_message(filters.command("delnote") & ~filters.private)
|
||||||
|
@adminsOnly("can_change_info")
|
||||||
|
async def del_note(_, message):
|
||||||
|
if len(message.command) == 1:
|
||||||
|
return await message.reply("**Usage**\n__/delete [NOTE_NAME]__")
|
||||||
|
name = message.text.split(None, 1)[1].strip()
|
||||||
|
if not name:
|
||||||
|
return await message.reply("**Usage**\n__/delete [NOTE_NAME]__")
|
||||||
|
|
||||||
|
prefix = message.text.split()[0][0]
|
||||||
|
chat_id = message.chat.id
|
||||||
|
|
||||||
|
deleted = await delete_note(chat_id, name)
|
||||||
|
if deleted:
|
||||||
|
await message.reply(f"**Deleted note {name} successfully.**")
|
||||||
|
else:
|
||||||
|
await message.reply("**No such note.**")
|
||||||
Loading…
Reference in a new issue