from os import remove, sep from typing import Literal from uuid import uuid1 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 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=[""])) 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"]: 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_aggressive", "button")), callback_data=f"sub_aggressive_{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": filename = uuid1() with open(f"tmp{sep}{filename}.jpg", "wb") as f: f.write(tmp_sponsorship['sponsorship']['proof']) else: sponsorship_content.append(f"{locale(f'question_{question}', 'message', 'sponsor_titles')} {tmp_sponsorship['sponsorship'][question]}") await app.send_photo(chat_id=configGet("admin", "groups"), photo=f"tmp{sep}{filename}.jpg", 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=[""])) 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 # ==============================================================================================================================