from datetime import datetime, timezone from os import makedirs, path, sep from uuid import uuid4 from pyrogram import filters from pyrogram.client import Client from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from modules.app import app from modules.database import col_banned, col_submitted from modules.logger import logWrite from modules.submissions import subLimit, subLimited from modules.utils import configGet, locale from classes.enums.submission_types import SubmissionType @app.on_message(~ filters.scheduled & filters.photo | filters.video | filters.animation | filters.document) async def get_submission(_: Client, msg: Message): locale("sub_wip", "message", locale=msg.from_user.language_code) # try: # if col_banned.find_one( {"user": msg.from_user.id} ) is not None: # return # user_locale = msg.from_user.language_code # save_tmp = True # contents = None # if subLimited(msg.from_user): # await msg.reply_text(locale("sub_cooldown", "message", locale=user_locale).format(str(configGet("timeout", "submission")))) # return # if msg.document is not None: # if msg.document.mime_type not in configGet("mime_types", "submission"): # await msg.reply_text(locale("mime_not_allowed", "message", locale=user_locale), quote=True) # return # if msg.document.file_size > configGet("file_size", "submission"): # await msg.reply_text(locale("document_too_large", "message", locale=user_locale).format(str(configGet("file_size", "submission")/1024/1024)), quote=True) # return # if msg.document.file_size > configGet("tmp_size", "submission"): # save_tmp = False # contents = msg.document.file_id, SubmissionType.DOCUMENT #, msg.document.file_name # if msg.video is not None: # if msg.video.file_size > configGet("file_size", "submission"): # await msg.reply_text(locale("document_too_large", "message", locale=user_locale).format(str(configGet("file_size", "submission")/1024/1024)), quote=True) # return # if msg.video.file_size > configGet("tmp_size", "submission"): # save_tmp = False # contents = msg.video.file_id, SubmissionType.VIDEO #, msg.video.file_name # if msg.animation is not None: # if msg.animation.file_size > configGet("file_size", "submission"): # await msg.reply_text(locale("document_too_large", "message", locale=user_locale).format(str(configGet("file_size", "submission")/1024/1024)), quote=True) # return # if msg.animation.file_size > configGet("tmp_size", "submission"): # save_tmp = False # contents = msg.animation.file_id, SubmissionType.ANIMATION #, msg.animation.file_name # if msg.photo is not None: # contents = msg.photo.file_id, SubmissionType.PHOTO #, "please_generate" # if save_tmp is not None: # if contents is None: # return # tmp_id = str(uuid4()) # # filename = tmp_id if contents[1] == "please_generate" else contents[1] # makedirs(path.join(configGet("data", "locations"), "submissions", tmp_id), exist_ok=True) # downloaded = await app.download_media(msg, path.join(configGet("data", "locations"), "submissions", tmp_id)+sep) # inserted = col_submitted.insert_one( # { # "user": msg.from_user.id, # "date": datetime.now(tz=timezone.utc), # "done": False, # "type": contents[1].value, # "temp": { # "uuid": tmp_id, # "file": path.basename(str(downloaded)) # }, # "telegram": { # "msg_id": msg.id, # "file_id": contents[0] # }, # "caption": str(msg.caption) if msg.caption is not None else None # } # ) # else: # if contents is None: # return # inserted = col_submitted.insert_one( # { # "user": msg.from_user.id, # "date": datetime.now(tz=timezone.utc), # "done": False, # "type": contents[1].value, # "temp": { # "uuid": None, # "file": None # }, # "telegram": { # "msg_id": msg.id, # "file_id": contents[0] # }, # "caption": str(msg.caption) if msg.caption is not None else None # } # ) # buttons = [ # [ # InlineKeyboardButton(text=locale("sub_yes", "button", locale=configGet("locale")), callback_data=f"sub_yes_{str(inserted.inserted_id)}") # ] # ] # if msg.caption is not None: # caption = str(msg.caption) # buttons[0].append( # InlineKeyboardButton(text=locale("sub_yes_caption", "button", locale=configGet("locale")), callback_data=f"sub_yes_{str(inserted.inserted_id)}_caption") # ) # buttons[0].append( # InlineKeyboardButton(text=locale("sub_no", "button", locale=configGet("locale")), callback_data=f"sub_no_{str(inserted.inserted_id)}") # ) # else: # caption = "" # buttons[0].append( # InlineKeyboardButton(text=locale("sub_no", "button", locale=configGet("locale")), callback_data=f"sub_no_{str(inserted.inserted_id)}") # ) # caption += locale("sub_by", "message", locale=locale(configGet("locale"))) # if msg.from_user.first_name is not None: # caption += f" {msg.from_user.first_name}" # if msg.from_user.last_name is not None: # caption += f" {msg.from_user.last_name}" # if msg.from_user.username is not None: # caption += f" (@{msg.from_user.username})" # if msg.from_user.phone_number is not None: # caption += f" ({msg.from_user.phone_number})" # if msg.from_user.id != configGet("admin"): # buttons += [ # [ # InlineKeyboardButton(text=locale("sub_block", "button", locale=configGet("locale")), callback_data=f"sub_block_{msg.from_user.id}") # ] # # [ # # InlineKeyboardButton(text=locale("sub_unblock", "button", locale=configGet("locale")), callback_data=f"sub_unblock_{msg.from_user.id}") # # ] # ] # await msg.reply_text(locale("sub_sent", "message", locale=user_locale), quote=True) # subLimit(msg.from_user) # await msg.copy(configGet("admin"), caption=caption, reply_markup=InlineKeyboardMarkup(buttons)) # except AttributeError: # logWrite(f"from_user in function get_submission does not seem to contain id")