diff --git a/modules/callbacks/sus.py b/modules/callbacks/sus.py index beba22e..2f49542 100644 --- a/modules/callbacks/sus.py +++ b/modules/callbacks/sus.py @@ -1,24 +1,26 @@ -from os import sep from app import app from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ChatPermissions from pyrogram import filters -from modules.utils import configGet, configSet, jsonLoad, jsonSave, locale, logWrite +from classes.holo_user import HoloUser +from modules.utils import configGet, locale, logWrite +from modules.database import col_tmp # Callbacks sus users ========================================================================================================== @app.on_callback_query(filters.regex("sus_allow_[\s\S]*")) async def callback_query_sus_allow(app, clb): fullclb = clb.data.split("_") + holo_user = HoloUser(int(fullclb[2])) - await app.send_message(configGet("admin_group"), locale("sus_allowed_by", "message").format(clb.from_user.first_name, fullclb[2]), disable_notification=True) - logWrite(f"User {fullclb[2]} was allowed to join with another link by {clb.from_user.id}") + await app.send_message(configGet("admin_group"), locale("sus_allowed_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) + logWrite(f"User {holo_user.id} was allowed to join with another link by {clb.from_user.id}") edited_markup = [[InlineKeyboardButton(text=str(locale("sus_allowed", "button")), callback_data="nothing")]] await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) - await clb.answer(text=locale("sus_allowed", "callback").format(fullclb[2]), show_alert=True) + await clb.answer(text=locale("sus_allowed", "callback").format(holo_user.id), show_alert=True) - await app.restrict_chat_member(configGet("destination_group"), int(fullclb[2]), permissions=ChatPermissions( + await app.restrict_chat_member(configGet("destination_group"), holo_user.id, permissions=ChatPermissions( can_send_messages=True, can_send_media_messages=True, can_send_other_messages=True, @@ -30,19 +32,17 @@ async def callback_query_sus_allow(app, clb): async def callback_query_sus_reject(app, clb): fullclb = clb.data.split("_") + holo_user = HoloUser(int(fullclb[2])) - await app.send_message(configGet("admin_group"), locale("sus_rejected_by", "message").format(clb.from_user.first_name, fullclb[2]), disable_notification=True) - logWrite(f"User {fullclb[2]} was rejected to join with another link by {clb.from_user.id}") + await app.send_message(configGet("admin_group"), locale("sus_rejected_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) + logWrite(f"User {holo_user.id} was rejected to join with another link by {clb.from_user.id}") edited_markup = [[InlineKeyboardButton(text=str(locale("sus_rejected", "button")), callback_data="nothing")]] await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) - await clb.answer(text=locale("sus_rejected", "callback").format(fullclb[2]), show_alert=True) + await clb.answer(text=locale("sus_rejected", "callback").format(holo_user.id), show_alert=True) - await app.ban_chat_member(configGet("destination_group"), int(fullclb[2])) + await app.ban_chat_member(configGet("destination_group"), holo_user.id) - jsonSave(jsonLoad(f"{configGet('data', 'locations')}{sep}user_default.json"), f"{configGet('data', 'locations')}{sep}users{sep}{fullclb[2]}.json") - configSet(["stage"], 10, file=fullclb[2]) - configSet(["rejected"], True, file=fullclb[2]) - configSet(["rejected_by"], clb.from_user.id, file=fullclb[2]) + col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}}) # ============================================================================================================================== \ No newline at end of file diff --git a/modules/commands/application.py b/modules/commands/application.py index b326474..205281e 100644 --- a/modules/commands/application.py +++ b/modules/commands/application.py @@ -1,55 +1,92 @@ -from os import sep, path from datetime import datetime from app import app, isAnAdmin from pyrogram import filters -from pyrogram.enums.chat_members_filter import ChatMembersFilter -from modules.utils import configGet, jsonLoad, logWrite, locale, should_quote +from pyrogram.enums.parse_mode import ParseMode +from pyrogram.errors import bad_request_400 +from classes.holo_user import HoloUser +from modules.utils import configGet, logWrite, locale, should_quote from dateutil.relativedelta import relativedelta +from modules.database import col_applications # Applications command ========================================================================================================= @app.on_message(~ filters.scheduled & filters.command(["application"], prefixes=["/"])) async def cmd_application(app, msg): - if (await isAnAdmin(msg.from_user.id)) or (msg.chat.id == configGet("admin_group")): + if await isAnAdmin(msg.from_user.id) is True: + try: - if (path.exists(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json") and jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json")["approved"]): - user_id = int(msg.command[1]) - else: - list_of_users = [] - async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]): - list_of_users.append(m) - user_id = list_of_users[0].user.id + try: - user_data = jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{user_id}.json") - application = jsonLoad(f"{configGet('data', 'locations')}{sep}applications.json")[str(user_id)] - application_content = [] - i = 1 - for question in configGet("application", file=str(msg.from_user.id)): - if i == 2: - age = relativedelta(datetime.now(), datetime.strptime(application['application']['2'], '%d.%m.%Y')) - application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application']['2']} ({age.years} р.)") + holo_user = HoloUser(int(msg.command[1])) + except ValueError: + try: + holo_user = HoloUser((await app.get_users(msg.command[1])).id) + except bad_request_400.UsernameInvalid: + await msg.reply_text(locale("no_user_application", "message").format(msg.command[1]), quote=should_quote(msg)) + + application = col_applications.find_one({"user": holo_user.id}) + application_content = [] + i = 1 + + if application is None: + logWrite(f"User {msg.from_user.id} requested application of {holo_user.id} but user does not exists") + await msg.reply_text(locale("user_invalid", "message"), quote=should_quote(msg)) + return + + for question in application['application']: + + if i == 2: + age = relativedelta(datetime.now(), application['application']['2']) + application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)") + elif i == 3: + if application['application']['3']['countryCode'] == "UA": + application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']}") else: - application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application'][question]}") - i += 1 - if user_data["sent"]: - if user_data["approved"]: - application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M")) - elif application["rejected"]: - application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M")) - else: - application_status = locale("application_status_on_hold", "message") + application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})") else: - if user_data["approved"]: - application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M")) - elif application["rejected"]: - application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M")) - else: - application_status = locale("application_status_not_send", "message") - logWrite(f"User {msg.from_user.id} requested application of {user_id}") - await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg)) - except FileNotFoundError: - logWrite(f"User {msg.from_user.id} requested application of {user_id} but user does not exists") - await msg.reply_text(locale("contact_invalid", "message"), quote=should_quote(msg)) + application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application'][question]}") + + i += 1 + + application_status = locale("application_status_accepted", "message").format((await app.get_users(application["admin"])).first_name, application["date"].strftime("%d.%m.%Y, %H:%M")) + + await msg.reply_text(locale("contact", "message").format(holo_user.id, "\n".join(application_content), application_status), parse_mode=ParseMode.MARKDOWN, quote=should_quote(msg)) + + # if (path.exists(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json") and jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json")["approved"]): + # user_id = int(msg.command[1]) + # else: + # list_of_users = [] + # async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]): + # list_of_users.append(m) + # user_id = list_of_users[0].user.id + # try: + # user_data = jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{user_id}.json") + # application = jsonLoad(f"{configGet('data', 'locations')}{sep}applications.json")[str(user_id)] + # application_content = [] + # i = 1 + # for question in configGet("application", file=str(msg.from_user.id)): + # if i == 2: + # age = relativedelta(datetime.now(), datetime.strptime(application['application']['2'], '%d.%m.%Y')) + # application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application']['2']} ({age.years} р.)") + # else: + # application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application'][question]}") + # i += 1 + # if user_data["sent"]: + # if user_data["approved"]: + # application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M")) + # elif application["rejected"]: + # application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M")) + # else: + # application_status = locale("application_status_on_hold", "message") + # else: + # if user_data["approved"]: + # application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M")) + # elif application["rejected"]: + # application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M")) + # else: + # application_status = locale("application_status_not_send", "message") + # logWrite(f"User {msg.from_user.id} requested application of {user_id}") + # await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg)) except IndexError: await msg.reply_text(locale("application_invalid_syntax", "message"), quote=should_quote(msg))