2022-12-05 19:49:51 +02:00
|
|
|
from datetime import datetime
|
2022-12-07 15:17:27 +02:00
|
|
|
from os import sep
|
|
|
|
from app import app, isAnAdmin
|
2022-12-05 19:49:51 +02:00
|
|
|
import asyncio
|
|
|
|
from pyrogram import filters
|
2022-12-07 15:17:27 +02:00
|
|
|
from pyrogram.types import ForceReply, ReplyKeyboardMarkup, Message
|
|
|
|
from modules.utils import configGet, configSet, jsonLoad, jsonSave, locale, logWrite, should_quote
|
2022-12-11 19:50:50 +02:00
|
|
|
from modules.database import col_messages
|
2022-12-07 15:17:27 +02:00
|
|
|
|
2022-12-11 19:50:50 +02:00
|
|
|
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
|
2022-12-07 15:17:27 +02:00
|
|
|
return False
|
|
|
|
|
2022-12-11 19:50:50 +02:00
|
|
|
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
|
2022-12-05 19:49:51 +02:00
|
|
|
|
|
|
|
# Any other input ==============================================================================================================
|
|
|
|
@app.on_message(~ filters.scheduled & filters.private)
|
|
|
|
async def any_stage(app, msg):
|
|
|
|
|
|
|
|
if msg.via_bot is None:
|
|
|
|
|
2022-12-07 15:17:27 +02:00
|
|
|
if (msg.reply_to_message != None) and (await message_involved(msg)):
|
|
|
|
context = await message_context(msg)
|
|
|
|
if msg.chat.id == configGet("admin_group") or await isAnAdmin(msg.from_user.id):
|
|
|
|
new_message = await (await app.get_messages(context[0], context[1])).reply_text(msg.text+locale("message_reply_notice", "message"), quote=True)
|
|
|
|
else:
|
|
|
|
new_message = await (await app.get_messages(context[0], context[1])).reply_text(locale("message_from", "message").format(msg.from_user.first_name, msg.from_user.id)+msg.text+locale("message_reply_notice", "message"), quote=True)
|
|
|
|
await msg.reply_text(locale("message_sent", "message"), quote=should_quote(msg))
|
2022-12-11 19:50:50 +02:00
|
|
|
col_messages.insert_one({"origin": {"chat": msg.chat.id, "id": msg.id}, "destination": {"chat": new_message.chat.id, "id": new_message.id}})
|
2022-12-07 15:17:27 +02:00
|
|
|
return
|
|
|
|
|
2022-12-05 19:49:51 +02:00
|
|
|
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")
|
2022-12-06 11:26:22 +02:00
|
|
|
await msg.reply_text(locale("question2_underage", "message").format(str(configGet("age_allowed"))), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply"))))
|
2022-12-05 19:49:51 +02:00
|
|
|
|
|
|
|
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
|
2022-12-06 11:26:22 +02:00
|
|
|
await msg.reply_text(locale("confirm", "message").format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard"), resize_keyboard=True))
|
2022-12-05 19:49:51 +02:00
|
|
|
#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")
|
|
|
|
# ==============================================================================================================================
|