from datetime import datetime from os import sep from app import app, isAnAdmin import asyncio from pyrogram import filters from pyrogram.types import ForceReply, ReplyKeyboardMarkup, Message from classes.holo_user import HoloUser from modules.utils import configGet, configSet, jsonLoad, jsonSave, locale, logWrite, should_quote from modules.database import col_messages async def message_involved(msg: Message) -> bool: message = col_messages.find_one({"destination.id": msg.reply_to_message.id, "destination.chat": msg.reply_to_message.chat.id}) if message is not None: return True return False async def message_context(msg: Message) -> tuple: message = col_messages.find_one({"destination.id": msg.reply_to_message.id, "destination.chat": msg.reply_to_message.chat.id}) if message is not None: return message["origin"]["chat"], message["origin"]["id"] return 0, 0 # Any other input ============================================================================================================== @app.on_message(~ filters.scheduled & filters.private) async def any_stage(app, msg): if msg.via_bot is None: holo_user = HoloUser(msg.from_user) if (msg.reply_to_message is not None) and (await message_involved(msg)): context = await message_context(msg) context_message = await app.get_messages(context[0], context[1]) destination_user = HoloUser(context_message.from_user) await destination_user.message( origin=context_message, context=msg, text=msg.text, caption=msg.caption, photo=msg.photo, video=msg.video, file=msg.document, adm_origin=await isAnAdmin(context_message.from_user.id), adm_context=await isAnAdmin(msg.from_user.id) ) # await msg.reply_text(locale("message_sent", "message"), quote=should_quote(msg)) # col_messages.insert_one({"origin": {"chat": msg.chat.id, "id": msg.id}, "destination": {"chat": new_message.chat.id, "id": new_message.id}}) return await holo_user.application_next(msg.text, msg=msg) # user_stage = configGet("stage", file=str(msg.from_user.id)) # if user_stage == 1: # await msg.reply_text(locale(f"question{user_stage+1}", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{user_stage+1}", "force_reply")))) # logWrite(f"User {msg.from_user.id} completed stage {user_stage} of application") # configSet(["application", str(user_stage)], str(msg.text), file=str(msg.from_user.id)) # configSet(["stage"], user_stage+1, file=str(msg.from_user.id)) # elif user_stage == 2: # try: # configSet(["application", str(user_stage)], str(msg.text), file=str(msg.from_user.id)) # input_dt = datetime.strptime(msg.text, "%d.%m.%Y") # if datetime.now() <= input_dt: # logWrite(f"User {msg.from_user.id} failed stage {user_stage} due to joking") # await msg.reply_text(locale("question2_joke", "message"), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply")))) # elif ((datetime.now() - input_dt).days) < ((datetime.now() - datetime.now().replace(year=datetime.now().year - configGet("age_allowed"))).days): # logWrite(f"User {msg.from_user.id} failed stage {user_stage} due to being underage") # await msg.reply_text(locale("question2_underage", "message").format(str(configGet("age_allowed"))), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply")))) # else: # logWrite(f"User {msg.from_user.id} completed stage {user_stage} of application") # await msg.reply_text(locale(f"question{user_stage+1}", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{user_stage+1}", "force_reply")))) # configSet(["stage"], user_stage+1, file=str(msg.from_user.id)) # except ValueError: # logWrite(f"User {msg.from_user.id} failed stage {user_stage} due to sending invalid date format") # await msg.reply_text(locale(f"question2_invalid", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{user_stage}", "force_reply")))) # else: # if user_stage <= 9: # logWrite(f"User {msg.from_user.id} completed stage {user_stage} of application") # await msg.reply_text(locale(f"question{user_stage+1}", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{user_stage+1}", "force_reply")))) # configSet(["application", str(user_stage)], str(msg.text), file=str(msg.from_user.id)) # configSet(["stage"], user_stage+1, file=str(msg.from_user.id)) # else: # if not configGet("sent", file=str(msg.from_user.id)): # if not configGet("confirmed", file=str(msg.from_user.id)): # configSet(["application", str(user_stage)], str(msg.text), file=str(msg.from_user.id)) # application_content = [] # i = 1 # for question in configGet("application", file=str(msg.from_user.id)): # application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {configGet('application', file=str(msg.from_user.id))[question]}") # i += 1 # await msg.reply_text(locale("confirm", "message").format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard"), resize_keyboard=True)) # #configSet("sent", True, file=str(msg.from_user.id)) # #configSet("application_date", int(time()), file=str(msg.from_user.id)) # else: # if not configGet("approved", file=str(msg.from_user.id)) and not configGet("refused", file=str(msg.from_user.id)): # await msg.reply_text(locale("already_sent", "message")) # else: # if not configGet("approved", file=str(msg.from_user.id)) and not configGet("refused", file=str(msg.from_user.id)): # await msg.reply_text(locale("already_sent", "message")) @app.on_message(~ filters.scheduled & filters.group) async def message_in_group(app, msg): if (msg.chat is not None) and (msg.via_bot is not None): if (msg.via_bot.id == configGet("bot_id")) and (msg.chat.id == configGet("destination_group")): if configGet("remove_application_time") > 0: logWrite(f"User {msg.from_user.id} requested application in destination group, removing in {configGet('remove_application_time')} minutes") await asyncio.sleep(configGet("remove_application_time")*60) await msg.delete() logWrite(f"Removed application requested by {msg.from_user.id} in destination group") # ==============================================================================================================================