Spaces:
Runtime error
Runtime error
from enum import Enum, auto | |
from pyrogram.types import Message | |
import html | |
import re | |
from pyrogram.types import InlineKeyboardMarkup | |
from Devine import app | |
from Devine.mongo.notesdb import GetNote | |
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message | |
from Devine.utils.msg_types import button_markdown_parser | |
class NoteTypeMap(Enum): | |
text = auto() | |
sticker = auto() | |
animation= auto() | |
document = auto() | |
photo = auto() | |
audio = auto() | |
voice = auto() | |
video = auto() | |
video_note = auto() | |
def GetNoteMessage(message): | |
data_type = None | |
content = None | |
text = str() | |
raw_text = message.text or message.caption | |
args = raw_text.split(None, 2) | |
if len(args) >= 3 and not message.reply_to_message: | |
text = message.text.markdown[len(message.command[0]) + len(message.command[1]) + 2 :] | |
data_type = NoteTypeMap.text.value | |
if ( | |
message.reply_to_message | |
and message.reply_to_message.text | |
): | |
if len(args) >= 2: | |
text = message.reply_to_message.text.markdown | |
data_type = NoteTypeMap.text.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.sticker | |
): | |
content = message.reply_to_message.sticker.file_id | |
data_type = NoteTypeMap.sticker.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.animation | |
): | |
content = message.reply_to_message.animation.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.animation.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.document | |
): | |
content = message.reply_to_message.document.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.document.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.photo | |
): | |
content = message.reply_to_message.photo.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.photo.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.audio | |
): | |
content = message.reply_to_message.audio.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.audio.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.voice | |
): | |
content = message.reply_to_message.voice.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.voice.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.video | |
): | |
content = message.reply_to_message.video.file_id | |
if message.reply_to_message.caption: | |
text = message.reply_to_message.caption.markdown | |
data_type = NoteTypeMap.video.value | |
elif ( | |
message.reply_to_message | |
and message.reply_to_message.video_note | |
): | |
content = message.reply_to_message.video_note.file_id | |
data_type = NoteTypeMap.video_note.value | |
return ( | |
content, | |
text, | |
data_type | |
) | |
def NoteFillings(message, message_text): | |
if not message == None: | |
user_id = message.from_user.id | |
first_name = message.from_user.first_name | |
last_name = message.from_user.last_name | |
if last_name == None: | |
last_name = '' | |
full_name = f'{first_name} {last_name}' | |
username = message.from_user.username | |
mention = message.from_user.mention | |
chat_title = message.chat.title | |
try: | |
FillingText = message_text.format( | |
id=user_id, | |
first=first_name, | |
fullname=full_name, | |
username=username, | |
mention=mention, | |
chatname=chat_title | |
) | |
except KeyError: | |
FillingText = message_text | |
else: | |
FillingText = message_text | |
return FillingText | |
async def SendNoteMessage(message: Message, note_name: str, from_chat_id: int): | |
user_id = message.from_user.id | |
if from_chat_id is not None: | |
message_id = message.id | |
chat_id = message.from_user.id | |
content, text, data_type = await GetNote(from_chat_id, note_name) | |
text = ( | |
f"**{note_name}:**\n\n" | |
f"{text}" | |
) | |
else: | |
message_id = message.id | |
if message.reply_to_message: | |
message_id = message.reply_to_message.id | |
chat_id = message.chat.id | |
content, text, data_type = await GetNote(chat_id, note_name) | |
text, buttons = button_markdown_parser(text) | |
preview, text = preview_text_replace(text) | |
text = NoteFillings(message, text) | |
text = html.escape(text) | |
if ( | |
not text | |
or re.search(r"^\s*$", text) | |
): | |
text = note_name | |
reply_markup = None | |
if len(buttons) > 0: | |
reply_markup = InlineKeyboardMarkup(buttons) | |
else: | |
reply_markup = None | |
if ( | |
data_type == 1 | |
): | |
await app.send_message( | |
chat_id=chat_id, | |
text=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup, | |
disable_web_page_preview=preview | |
) | |
elif ( | |
data_type == 2 | |
): | |
await app.send_sticker( | |
chat_id=chat_id, | |
sticker=content, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 3 | |
): | |
await app.send_animation( | |
chat_id=chat_id, | |
animation=content, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 4 | |
): | |
await app.send_document( | |
chat_id=chat_id, | |
document=content, | |
caption=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 5 | |
): | |
await app.send_photo( | |
chat_id=chat_id, | |
photo=content, | |
caption=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 6 | |
): | |
await app.send_audio( | |
chat_id=chat_id, | |
audio=content, | |
caption=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 7 | |
): | |
await app.send_voice( | |
chat_id=chat_id, | |
voice=content, | |
caption=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 8 | |
): | |
await app.send_video( | |
chat_id=chat_id, | |
video=content, | |
caption=text, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
elif ( | |
data_type == 9 | |
): | |
await app.send_video_note( | |
chat_id=chat_id, | |
video_note=content, | |
reply_to_message_id=message_id, | |
reply_markup=reply_markup | |
) | |
return | |
async def exceNoteMessageSender(message, note_name, from_chat_id=None): | |
try: | |
await SendNoteMessage(message, note_name, from_chat_id) | |
except Exception as e: | |
await message.reply( | |
( | |
"The notedata was incorrect, please update it. The buttons are most likely to be broken. If you are sure you aren't doing anything wrong and this was unexpected - please report it in my support chat.\n" | |
f"**Error:** `{e}`" | |
), | |
quote=True | |
) | |
async def isUserAdmin(message: Message, pm_mode: bool = False, user_id: int = None, chat_id: int = None, silent: bool = False) -> bool: | |
if user_id is None: | |
user_id = message.from_user.id | |
if chat_id is None: | |
chat_id = message.chat.id | |
if not pm_mode: | |
if message.chat.type == 'private': | |
return True | |
GetData = await app.get_chat_member( | |
chat_id=chat_id, | |
user_id=user_id | |
) | |
if GetData.privileges: | |
return True | |
else: | |
if not silent: | |
await message.reply( | |
"Only admins can execute this command!" | |
) | |
return False | |
async def privateNote_and_admin_checker(message, text: str): | |
privateNote = True | |
if '{noprivate}' in text: | |
privateNote = False | |
elif '{private}' in text: | |
privateNote = True | |
else: | |
privateNote = None | |
allow = True | |
if '{admin}' in text: | |
if not await isUserAdmin(message, silent=True): | |
allow = False | |
else: | |
allow = True | |
return ( | |
privateNote, | |
allow | |
) | |
def preview_text_replace(text): | |
if '{preview}' in text: | |
text = text.replace('{preview}', '') | |
preview = False | |
else: | |
preview = True | |
if '{admin}' in text: | |
text = text.replace('{admin}', '') | |
if '{private}' in text: | |
text = text.replace('{private}', '') | |
elif '{noprivate}' in text: | |
text = text.replace('{noprivate}', '') | |
return ( | |
preview, text | |
) | |