from typing import Literal from dateutil.relativedelta import relativedelta from datetime import datetime from app import app from pyrogram import filters from pyrogram.types import ( ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton, ForceReply, Message, ) from pyrogram.client import Client from pyrogram.enums.parse_mode import ParseMode from classes.holo_user import HoloUser from modules.utils import all_locales, configGet, locale, logWrite from modules.handlers.welcome import welcome_pass from modules.database import col_tmp, col_applications from modules import custom_filters # Confirmation ================================================================================================================= confirmation_1 = [] for pattern in all_locales("confirm", "keyboard"): confirmation_1.append(pattern[0][0]) @app.on_message( (custom_filters.enabled_applications | custom_filters.enabled_sponsorships) & ~filters.scheduled & filters.private & filters.command(confirmation_1, prefixes=[""]) & ~custom_filters.banned ) async def confirm_yes( app: Client, msg: Message, kind: Literal["application", "sponsorship", "unknown"] = "unknown", ): holo_user = HoloUser(msg.from_user) if configGet("enabled", "features", "applications") is True: if (kind == "application") or ( (holo_user.application_state()[0] == "fill") and (holo_user.application_state()[1] is True) ): tmp_application = col_tmp.find_one( {"user": holo_user.id, "type": "application"} ) if tmp_application is None: logWrite(f"Application of {holo_user.id} is nowhere to be found.") return if tmp_application["sent"] is True: return await msg.reply_text( locale("application_sent", "message"), reply_markup=ReplyKeyboardRemove(), ) application_content = [] i = 1 for question in tmp_application["application"]: if i == 2: age = relativedelta( datetime.now(), tmp_application["application"]["2"] ) application_content.append( f"{locale(f'question{i}', 'message', 'question_titles')} {tmp_application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)" ) elif i == 3: if tmp_application["application"]["3"]["countryCode"] == "UA": application_content.append( f"{locale(f'question{i}', 'message', 'question_titles')} {tmp_application['application']['3']['name']}" ) else: application_content.append( f"{locale(f'question{i}', 'message', 'question_titles')} {tmp_application['application']['3']['name']} ({tmp_application['application']['3']['adminName1']}, {tmp_application['application']['3']['countryName']})" ) else: application_content.append( f"{locale(f'question{i}', 'message', 'question_titles')} {tmp_application['application'][question]}" ) i += 1 if ( tmp_application["reapply"] is True and col_applications.find_one({"user": holo_user.id}) is not None ): await app.send_message( chat_id=configGet("admin", "groups"), text=(locale("reapply_got", "message")).format( str(holo_user.id), msg.from_user.first_name, msg.from_user.username, "\n".join(application_content), ), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=str(locale("reapply_yes", "button")), callback_data=f"reapply_yes_{holo_user.id}", ) ], [ InlineKeyboardButton( text=str(locale("reapply_no", "button")), callback_data=f"reapply_no_{holo_user.id}", ) ], ] ), ) else: await app.send_message( chat_id=configGet("admin", "groups"), text=(locale("application_got", "message")).format( str(holo_user.id), msg.from_user.first_name, msg.from_user.username, "\n".join(application_content), ), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=str(locale("sub_yes", "button")), callback_data=f"sub_yes_{holo_user.id}", ) ], [ InlineKeyboardButton( text=str(locale("sub_no", "button")), callback_data=f"sub_no_{holo_user.id}", ) ], [ InlineKeyboardButton( text=str(locale("sub_russian", "button")), callback_data=f"sub_russian_{holo_user.id}", ) ], ] ), ) logWrite( f"User {holo_user.id} sent his application and it will now be reviewed" ) col_tmp.update_one( {"user": holo_user.id, "type": "application"}, {"$set": {"sent": True}} ) return if configGet("enabled", "features", "sponsorships") is True: if (kind == "sponsorship") or ( (holo_user.sponsorship_state()[0] == "fill") and (holo_user.sponsorship_state()[1] is True) ): tmp_sponsorship = col_tmp.find_one( {"user": holo_user.id, "type": "sponsorship"} ) if tmp_sponsorship is None: logWrite(f"Sponsorship of {holo_user.id} is nowhere to be found.") return if tmp_sponsorship["sent"] is True: return await msg.reply_text( locale("sponsorship_sent", "message"), reply_markup=ReplyKeyboardRemove(), ) sponsorship_content = [] for question in tmp_sponsorship["sponsorship"]: if question == "expires": sponsorship_content.append( f"{locale(f'question_{question}', 'message', 'sponsor_titles')} {tmp_sponsorship['sponsorship'][question].strftime('%d.%m.%Y')}" ) elif question == "proof": continue else: sponsorship_content.append( f"{locale(f'question_{question}', 'message', 'sponsor_titles')} {tmp_sponsorship['sponsorship'][question]}" ) await app.send_cached_media( configGet("admin", "groups"), tmp_sponsorship["sponsorship"]["proof"], caption=(locale("sponsor_got", "message")).format( str(holo_user.id), msg.from_user.first_name, msg.from_user.username, "\n".join(sponsorship_content), ), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text=str(locale("sponsor_yes", "button")), callback_data=f"sponsor_yes_{holo_user.id}", ) ], [ InlineKeyboardButton( text=str(locale("sponsor_no", "button")), callback_data=f"sponsor_no_{holo_user.id}", ) ], ] ), ) # remove(f"tmp{sep}{filename}.jpg") logWrite( f"User {holo_user.id} sent his sponsorship application and it will now be reviewed" ) col_tmp.update_one( {"user": holo_user.id, "type": "sponsorship"}, {"$set": {"sent": True}} ) return confirmation_2 = [] for pattern in all_locales("confirm", "keyboard"): confirmation_2.append(pattern[1][0]) @app.on_message( (custom_filters.enabled_applications | custom_filters.enabled_sponsorships) & ~filters.scheduled & filters.private & filters.command(confirmation_2, prefixes=[""]) & ~custom_filters.banned ) async def confirm_no( app: Client, msg: Message, kind: Literal["application", "sponsorship", "unknown"] = "unknown", ): holo_user = HoloUser(msg.from_user) if configGet("enabled", "features", "applications") is True: if (kind == "application") or ( (holo_user.application_state()[0] == "fill") and (holo_user.application_state()[1] is True) ): holo_user.application_restart() await welcome_pass(app, msg, once_again=True) logWrite( f"User {msg.from_user.id} restarted the application due to typo in it" ) return if configGet("enabled", "features", "sponsorships") is True: if (kind == "sponsorship") or ( (holo_user.sponsorship_state()[0] == "fill") and (holo_user.sponsorship_state()[1] is True) ): holo_user.sponsorship_restart() await app.send_message( holo_user.id, locale(f"sponsor1", "message", locale=holo_user.locale), reply_markup=ForceReply( placeholder=str( locale(f"sponsor1", "force_reply", locale=holo_user.locale) ) ), ) logWrite( f"User {msg.from_user.id} restarted the sponsorship application due to typo in it" ) return # ==============================================================================================================================