# Moon-Userbot - telegram userbot # Copyright (C) 2020-present Moon Userbot Organization # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . from pyrogram import Client, errors, filters from pyrogram.types import Message from utils.db import db from utils.handlers import NoteSendHandler from utils.misc import modules_help, prefix @Client.on_message(filters.command(['save'], prefix) & filters.me) async def save_note(client: Client, message: Message): await message.edit('Loading...') try: chat = await client.get_chat(db.get('core.notes', 'chat_id', 0)) except (errors.RPCError, ValueError, KeyError): # group is not accessible or isn't created chat = await client.create_supergroup('Userbot_Notes_Filters', "Don't touch this group, please") db.set('core.notes', 'chat_id', chat.id) chat_id = chat.id if message.reply_to_message and len(message.text.split()) >= 2: note_name = message.text.split(maxsplit=1)[1] if message.reply_to_message.media_group_id: checking_note = db.get('core.notes', f'note{note_name}', False) if not checking_note: get_media_group = [ _.id for _ in await client.get_media_group(message.chat.id, message.reply_to_message.id) ] try: message_id = await client.forward_messages(chat_id, message.chat.id, get_media_group) except errors.ChatForwardsRestricted: await message.edit( 'Forwarding messages is restricted by chat admins', ) return note = { 'MESSAGE_ID': str(message_id[1].id), 'MEDIA_GROUP': True, 'CHAT_ID': str(chat_id), } db.set('core.notes', f'note{note_name}', note) await message.edit(f'Note {note_name} saved') else: await message.edit('This note already exists') else: checking_note = db.get('core.notes', f'note{note_name}', False) if not checking_note: try: message_id = await message.reply_to_message.forward(chat_id) except errors.ChatForwardsRestricted: message_id = await message.copy(chat_id) note = { 'MEDIA_GROUP': False, 'MESSAGE_ID': str(message_id.id), 'CHAT_ID': str(chat_id), } db.set('core.notes', f'note{note_name}', note) await message.edit(f'Note {note_name} saved') else: await message.edit('This note already exists') elif len(message.text.split()) >= 3: note_name = message.text.split(maxsplit=1)[1].split()[0] checking_note = db.get('core.notes', f'note{note_name}', False) if not checking_note: message_id = await client.send_message(chat_id, message.text.split(note_name)[1].strip()) note = { 'MEDIA_GROUP': False, 'MESSAGE_ID': str(message_id.id), 'CHAT_ID': str(chat_id), } db.set('core.notes', f'note{note_name}', note) await message.edit(f'Note {note_name} saved') else: await message.edit('This note already exists') else: await message.edit( f'Example: {prefix}save note_name', ) @Client.on_message(filters.command('note', prefix) & filters.me) async def note_send(client: Client, message: Message): handler = NoteSendHandler(client, message) await handler.handle_note_send() @Client.on_message(filters.command(['notes'], prefix) & filters.me) async def notes(_, message: Message): await message.edit('Loading...') text = 'Available notes:\n\n' collection = db.get_collection('core.notes') for note in collection: if note[:4] == 'note': text += f'{note[4:]}\n' await message.edit(text) @Client.on_message(filters.command(['clear'], prefix) & filters.me) async def clear_note(_, message: Message): if len(message.text.split()) >= 2: note_name = message.text.split(maxsplit=1)[1] find_note = db.get('core.notes', f'note{note_name}', False) if find_note: db.remove('core.notes', f'note{note_name}') await message.edit(f'Note {note_name} deleted') else: await message.edit('There is no such note') else: await message.edit(f'Example: {prefix}clear note_name') modules_help['notes'] = { 'save [name]*': 'Save note', 'note [name]*': 'Get saved note', 'notes': 'Get note list', 'clear [name]*': 'Delete note', }