From 934e7eb340f5197679428c69476e1aa31d977fcc Mon Sep 17 00:00:00 2001 From: allinoneallinone00 Date: Tue, 23 Apr 2024 20:03:28 +0000 Subject: [PATCH] refactor notes --- modules/notes.py | 146 ++-------------------------------------------- utils/handlers.py | 134 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 138 insertions(+), 142 deletions(-) diff --git a/modules/notes.py b/modules/notes.py index b333260..f4b0096 100644 --- a/modules/notes.py +++ b/modules/notes.py @@ -15,17 +15,11 @@ # along with this program. If not, see . from pyrogram import Client, filters, errors, enums -from pyrogram.types import ( - Message, - InputMediaPhoto, - InputMediaVideo, - InputMediaAudio, - InputMediaDocument, -) +from pyrogram.types import Message from utils.db import db from utils.misc import modules_help, prefix -# from utils.scripts import with_reply +from utils.handlers import NoteSendHandler @Client.on_message(filters.command(["save"], prefix) & filters.me) @@ -111,141 +105,11 @@ async def save_note(client: Client, message: Message): parse_mode=enums.ParseMode.HTML ) - -@Client.on_message(filters.command(["note"], prefix) & filters.me) +@Client.on_message(filters.command("note", prefix) & filters.me) async def note_send(client: Client, message: Message): - if len(message.text.split()) >= 2: - await message.edit("Loading...", parse_mode=enums.ParseMode.HTML) + handler = NoteSendHandler(client, message) + await handler.handle_note_send() - note_name = f"{message.text.split(maxsplit=1)[1]}" - find_note = db.get("core.notes", f"note{note_name}", False) - if find_note: - try: - await client.get_messages( - int(find_note["CHAT_ID"]), int(find_note["MESSAGE_ID"]) - ) - except errors.RPCError: - await message.edit( - "Sorry, but this note is unavaliable.\n\n" - f"You can delete this note with " - f"{prefix}clear {note_name}", - parse_mode=enums.ParseMode.HTML - ) - return - - if find_note.get("MEDIA_GROUP"): - messages_grouped = await client.get_media_group( - int(find_note["CHAT_ID"]), int(find_note["MESSAGE_ID"]) - ) - media_grouped_list = [] - for _ in messages_grouped: - if _.photo: - if _.caption: - media_grouped_list.append( - InputMediaPhoto( - _.photo.file_id, _.caption.markdown - ) - ) - else: - media_grouped_list.append( - InputMediaPhoto(_.photo.file_id) - ) - elif _.video: - if _.caption: - if _.video.thumbs: - media_grouped_list.append( - InputMediaVideo( - _.video.file_id, - _.video.thumbs[0].file_id, - _.caption.markdown, - ) - ) - else: - media_grouped_list.append( - InputMediaVideo( - _.video.file_id, _.caption.markdown - ) - ) - elif _.video.thumbs: - media_grouped_list.append( - InputMediaVideo( - _.video.file_id, _.video.thumbs[0].file_id - ) - ) - else: - media_grouped_list.append( - InputMediaVideo(_.video.file_id) - ) - elif _.audio: - if _.caption: - media_grouped_list.append( - InputMediaAudio( - _.audio.file_id, _.caption.markdown - ) - ) - else: - media_grouped_list.append( - InputMediaAudio(_.audio.file_id) - ) - elif _.document: - if _.caption: - if _.document.thumbs: - media_grouped_list.append( - InputMediaDocument( - _.document.file_id, - _.document.thumbs[0].file_id, - _.caption.markdown, - ) - ) - else: - media_grouped_list.append( - InputMediaDocument( - _.document.file_id, _.caption.markdown - ) - ) - elif _.document.thumbs: - media_grouped_list.append( - InputMediaDocument( - _.document.file_id, - _.document.thumbs[0].file_id, - ) - ) - else: - media_grouped_list.append( - InputMediaDocument(_.document.file_id) - ) - if message.reply_to_message: - await client.send_media_group( - message.chat.id, - media_grouped_list, - reply_to_message_id=message.reply_to_message.id, - parse_mode=enums.ParseMode.HTML, - ) - else: - await client.send_media_group( - message.chat.id, media_grouped_list - ) - elif message.reply_to_message: - await client.copy_message( - message.chat.id, - int(find_note["CHAT_ID"]), - int(find_note["MESSAGE_ID"]), - reply_to_message_id=message.reply_to_message.id, - ) - else: - await client.copy_message( - message.chat.id, - int(find_note["CHAT_ID"]), - int(find_note["MESSAGE_ID"]), - ) - await message.delete() - else: - await message.edit("There is no such note", parse_mode=enums.ParseMode.HTML) - else: - await message.edit( - f"Example: {prefix}note note_name", - parse_mode=enums.ParseMode.HTML - ) @Client.on_message(filters.command(["notes"], prefix) & filters.me) diff --git a/utils/handlers.py b/utils/handlers.py index 0ea54eb..e97e91e 100644 --- a/utils/handlers.py +++ b/utils/handlers.py @@ -10,7 +10,15 @@ from pyrogram.errors import ( UsernameInvalid, ) from pyrogram.raw import functions, types -from pyrogram.types import Message, ChatPermissions, ChatPrivileges +from pyrogram.types import ( + Message, + ChatPermissions, + ChatPrivileges, + InputMediaPhoto, + InputMediaVideo, + InputMediaAudio, + InputMediaDocument, +) from pyrogram.utils import ( get_channel_id, MAX_USER_ID, @@ -1044,3 +1052,127 @@ class AntiRaidHandler: ) else: await self.message.edit("Anti-raid mode disabled") + +class NoteSendHandler: + def __init__(self, client: Client, message: Message): + self.client = client + self.message = message + self.chat_id = message.chat.id + self.prefix = prefix + + async def handle_note_send(self): + if len(self.message.text.split()) >= 2: + await self.message.edit("Loading...", parse_mode=enums.ParseMode.HTML) + + note_name = self.message.text.split(maxsplit=1)[1] + find_note = db.get("core.notes", f"note{note_name}", False) + if find_note: + try: + await self.send_note(find_note) + except errors.RPCError: + await self.message.edit( + "Sorry, but this note is unavailable.\n\n" + f"You can delete this note with " + f"{self.prefix}clear {note_name}", + parse_mode=enums.ParseMode.HTML + ) + else: + await self.message.edit("There is no such note", parse_mode=enums.ParseMode.HTML) + else: + await self.message.edit( + f"Example: {self.prefix}note note_name", + parse_mode=enums.ParseMode.HTML + ) + + async def send_note(self, find_note): + if find_note.get("MEDIA_GROUP"): + await self.send_media_group(find_note) + else: + await self.copy_message(find_note) + + async def send_media_group(self, find_note): + messages_grouped = await self.client.get_media_group( + int(find_note["CHAT_ID"]), int(find_note["MESSAGE_ID"]) + ) + media_grouped_list = self.prepare_media_group(messages_grouped) + if self.message.reply_to_message: + await self.client.send_media_group( + self.message.chat.id, + media_grouped_list, + reply_to_message_id=self.message.reply_to_message.id, + parse_mode=enums.ParseMode.HTML, + ) + else: + await self.client.send_media_group( + self.message.chat.id, media_grouped_list + ) + + async def copy_message(self, find_note): + if self.message.reply_to_message: + await self.client.copy_message( + self.message.chat.id, + int(find_note["CHAT_ID"]), + int(find_note["MESSAGE_ID"]), + reply_to_message_id=self.message.reply_to_message.id, + ) + else: + await self.client.copy_message( + self.message.chat.id, + int(find_note["CHAT_ID"]), + int(find_note["MESSAGE_ID"]), + ) + + def prepare_media_group(self, messages_grouped): + media_grouped_list = [] + for _ in messages_grouped: + if _.photo: + media_grouped_list.append(self.prepare_photo(_)) + elif _.video: + media_grouped_list.append(self.prepare_video(_)) + elif _.audio: + media_grouped_list.append(self.prepare_audio(_)) + elif _.document: + media_grouped_list.append(self.prepare_document(_)) + return media_grouped_list + + def prepare_photo(self, message): + if message.caption: + return InputMediaPhoto(message.photo.file_id, message.caption.markdown) + else: + return InputMediaPhoto(message.photo.file_id) + + def prepare_video(self, message): + if message.caption: + if message.video.thumbs: + return InputMediaVideo( + message.video.file_id, + message.video.thumbs[0].file_id, + message.caption.markdown, + ) + else: + return InputMediaVideo(message.video.file_id, message.caption.markdown) + elif message.video.thumbs: + return InputMediaVideo(message.video.file_id, message.video.thumbs[0].file_id) + else: + return InputMediaVideo(message.video.file_id) + + def prepare_audio(self, message): + if message.caption: + return InputMediaAudio(message.audio.file_id, message.caption.markdown) + else: + return InputMediaAudio(message.audio.file_id) + + def prepare_document(self, message): + if message.caption: + if message.document.thumbs: + return InputMediaDocument( + message.document.file_id, + message.document.thumbs[0].file_id, + message.caption.markdown, + ) + else: + return InputMediaDocument(message.document.file_id, message.caption.markdown) + elif message.document.thumbs: + return InputMediaDocument(message.document.file_id, message.document.thumbs[0].file_id) + else: + return InputMediaDocument(message.document.file_id) \ No newline at end of file