Improved sponsorship fill

This commit is contained in:
2023-04-18 16:01:42 +02:00
parent fe1d44d44d
commit 3e22ad1895
2 changed files with 160 additions and 29 deletions

View File

@@ -13,8 +13,9 @@ from pyrogram.types import (
from pyrogram.client import Client
from classes.holo_user import HoloUser
from modules import custom_filters
from modules.utils import locale, should_quote
from modules.database import col_sponsorships
from modules.handlers.confirmation import confirm_yes
from modules.utils import all_locales, locale, should_quote
from modules.database import col_sponsorships, col_tmp
from convopyro import listen_message
@@ -74,9 +75,11 @@ async def cmd_sponsorship(app: Client, msg: Message):
return
await msg.reply_text(
f'You have an active membership for **{existent["sponsorship"]["streamer"]}**. Wanna resubmit it once more?',
locale("sponsor_resubmit", "message", locale=msg.from_user).format(
existent["sponsorship"]["streamer"]
),
reply_markup=ReplyKeyboardMarkup(
[["Yep, use old data"], ["Nope, refill it once more"]],
locale("sponsorship_restore", "keyboard", locale=msg.from_user),
resize_keyboard=True,
one_time_keyboard=True,
),
@@ -89,10 +92,26 @@ async def cmd_sponsorship(app: Client, msg: Message):
input_streamer = existent["sponsorship"]["streamer"]
if answer_decision.text.lower() == "yep, use old data":
values_keep = []
for pattern in all_locales("sponsorship_restore", "keyboard"):
values_keep.append(pattern[0][0].lower())
values_new = []
for pattern in all_locales("sponsorship_restore", "keyboard"):
values_new.append(pattern[1][0].lower())
if answer_decision.text.lower() in values_keep:
await answer_decision.reply_text(
"Okay, reusing the old data.\n\nUntil when is your sub?\n\nEnter the date as DD.MM.YYYY",
reply_markup=ForceReply(placeholder="Expiry date as DD.MM.YYYY"),
locale("sponsor2", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor2",
"force_reply",
locale=msg.from_user,
)
)
),
)
while True:
answer_date = await listen_message(app, msg.chat.id)
@@ -102,17 +121,44 @@ async def cmd_sponsorship(app: Client, msg: Message):
try:
input_dt = datetime.strptime(answer_date.text, "%d.%m.%Y")
if datetime.now() >= input_dt:
await msg.reply_text(
locale("sponsor2_past", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale("sponsor2", "force_reply", locale=msg.from_user)
)
),
)
continue
break
except ValueError:
await answer_date.reply_text(
"Invalid date! Provide as DD.MM.YYYY",
reply_markup=ForceReply(placeholder="Expiry date as DD.MM.YYYY"),
locale(f"sponsor2_invalid", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor2",
"force_reply",
locale=msg.from_user,
)
)
),
)
continue
await answer_date.reply_text(
locale("sponsor3", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor3",
"force_reply",
locale=msg.from_user,
)
)
),
)
while True:
await answer_date.reply_text(
"Alright. Now provide your proof **as a single screenshot**"
)
answer_proof = await listen_message(app, msg.chat.id)
if is_none_or_cancel(answer_proof):
@@ -120,15 +166,26 @@ async def cmd_sponsorship(app: Client, msg: Message):
if answer_proof.photo is None:
await answer_proof.reply_text(
"Please, provide proof **as a single screenshot**"
locale("sponsor3", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor3",
"force_reply",
locale=msg.from_user,
)
)
),
)
continue
input_proof = answer_proof.photo.file_id
break
await msg.reply_text(
f'Almost done. Do you want to keep the label **{existent["sponsorship"]["label"]}** or you want to change it?',
locale("sponsor4_resubmit", "message", locale=msg.from_user).format(
existent["sponsorship"]["label"]
),
reply_markup=ReplyKeyboardMarkup(
[["Keep the old one"], ["Set a new one instead"]],
locale("sponsorship_restore_label", "keyboard", locale=msg.from_user),
resize_keyboard=True,
one_time_keyboard=True,
),
@@ -144,19 +201,39 @@ async def cmd_sponsorship(app: Client, msg: Message):
await answer_label_decision.reply_text(
"Please, choose a valid option.",
reply_markup=ReplyKeyboardMarkup(
[["Keep the old one"], ["Set a new one instead"]],
locale(
"sponsorship_restore_label",
"keyboard",
locale=msg.from_user,
),
resize_keyboard=True,
one_time_keyboard=True,
),
)
continue
if answer_label_decision.text.lower() == "keep the old one":
values_keep = []
for pattern in all_locales("sponsorship_restore_label", "keyboard"):
values_keep.append(pattern[0][0].lower())
values_new = []
for pattern in all_locales("sponsorship_restore_label", "keyboard"):
values_new.append(pattern[1][0].lower())
if answer_label_decision.text.lower() in values_keep:
input_label = existent["sponsorship"]["label"]
elif answer_label_decision.text.lower() == "set a new one instead":
elif answer_label_decision.text.lower() in values_new:
await answer_label_decision.reply_text(
"Okay. Please provide a new label up to 16 characters long",
reply_markup=ForceReply(placeholder="New label"),
locale("sponsor4", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor4",
"force_reply",
locale=msg.from_user,
)
)
),
)
while True:
answer_label = await listen_message(app, msg.chat.id)
@@ -166,27 +243,61 @@ async def cmd_sponsorship(app: Client, msg: Message):
if answer_label.text is None:
await answer_label.reply_text(
"Please provide valid label",
reply_markup=ForceReply(placeholder="New label"),
locale("label_too_long", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor4",
"force_reply",
locale=msg.from_user,
)
)
),
)
continue
elif len(answer_label.text) > 16:
await answer_label.reply_text(
"Please provide a label not longer than 16 characters long",
reply_markup=ForceReply(placeholder="New label"),
locale("label_too_long", "message", locale=msg.from_user),
reply_markup=ForceReply(
placeholder=str(
locale(
f"sponsor4",
"force_reply",
locale=msg.from_user,
)
)
),
)
continue
input_label = answer_label.text
break
await msg.reply_text(
f"So we did it for streamer **{input_streamer}**, til {input_dt.strftime('%d.%m.%Y')}, proofed by `{input_proof}` and labeled as **{input_label}**.",
reply_markup=ReplyKeyboardRemove(),
col_tmp.find_one_and_delete(
{"user": msg.from_user.id, "type": "sponsorship"}
)
col_tmp.insert_one(
{
"user": msg.from_user.id,
"type": "sponsorship",
"complete": True,
"sent": False,
"state": "fill",
"stage": 4,
"sponsorship": {
"streamer": input_streamer,
"expires": input_dt,
"proof": input_proof,
"label": input_label,
},
}
)
await confirm_yes(app, msg, kind="sponsorship")
return
elif answer_decision.text.lower() == "nope, refill it once more":
elif answer_decision.text.lower() in values_new:
await msg.reply_text(
locale("sponsorship_apply", "message", locale=msg.from_user),
reply_markup=InlineKeyboardMarkup(
@@ -206,7 +317,8 @@ async def cmd_sponsorship(app: Client, msg: Message):
return
else:
await answer_decision.reply_text(
"Invalid option!", reply_markup=ReplyKeyboardRemove()
locale("sponsor_resubmit_invalid_option", "message", locale=msg.from_user),
reply_markup=ReplyKeyboardRemove(),
)
return
# else: