againmusic / Devine /utils /notes_func.py
taslim19
Initial commit
80287e2
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
)