90 lines
3.5 KiB
Python
90 lines
3.5 KiB
Python
from aiogram import Router, types, F
|
|
from aiogram.filters import Command
|
|
from aiogram.fsm.context import FSMContext
|
|
from aiogram.utils import markdown
|
|
|
|
from .states import Survey
|
|
from BotLibrary import BotVariables, valid_email
|
|
from BotCode.keyboards.reply_kb.survey_yesno_kb import get_survey_email_kb
|
|
|
|
# Создание роутера
|
|
router = Router(name=__name__)
|
|
|
|
@router.message(Command("survey", prefix=BotVariables.prefixs))
|
|
async def handler_survey(message: types.Message, state: FSMContext):
|
|
await state.set_state(Survey.full_name)
|
|
await message.answer(
|
|
text="Приветствую тебя в нашем маленьком раю! Подожди, я кажется не знаю твоего имени.. Как тебя зовут?",
|
|
reply_markup=types.ReplyKeyboardRemove(),
|
|
)
|
|
|
|
|
|
@router.message(Survey.full_name, F.text)
|
|
async def handler_survey_user_name(message: types.Message, state: FSMContext):
|
|
await state.update_data(full_name=message.text)
|
|
await message.answer(
|
|
f"Привет, {markdown.hbold(message.text)}! Скажи свою почту)",
|
|
)
|
|
await state.set_state(Survey.email)
|
|
|
|
|
|
@router.message(Survey.full_name)
|
|
async def handler_survey_user_name_invalid(message: types.Message):
|
|
await message.answer(
|
|
f"Извините, но кажется я вас не понимаю.. Повторите свое имя, пожалуйста!!!",
|
|
)
|
|
|
|
|
|
@router.message(Survey.email, F.text.cast(valid_email).as_("email"))
|
|
async def handler_survey_email(message: types.Message, state: FSMContext, email: str):
|
|
await state.update_data(email=email)
|
|
await message.answer(
|
|
text=f"Отличная почта: {markdown.hcode(message.text)}! "
|
|
f"\nХочешь ли получать письма от меня?",
|
|
reply_markup=get_survey_email_kb()
|
|
)
|
|
await state.set_state(Survey.email_newsletter)
|
|
|
|
|
|
async def send_survey_results(message: types.Message, data: dict) -> None:
|
|
text = markdown.text(
|
|
"Ваши результаты: \n",
|
|
markdown.text(f"Имя: {markdown.hbold(data['full_name'])}"),
|
|
markdown.text(f"Почта: {markdown.hcode(data['email'])}"),
|
|
(
|
|
"Отлично, теперь ждите новых сообщений)"
|
|
if data["news_letter"]
|
|
else "Что-ж, мы не будем писать вам!"
|
|
),
|
|
sep='\n'
|
|
)
|
|
await message.answer(text=text, reply_markup=types.ReplyKeyboardRemove())
|
|
|
|
|
|
@router.message(Survey.email)
|
|
async def handler_survey_email_invalid(message: types.Message):
|
|
await message.answer(
|
|
text="Почта не подошла, попробуйте еще раз!",
|
|
)
|
|
|
|
|
|
@router.message(Survey.email_newsletter, F.text.casefold() == "да")
|
|
async def handle_survey_email_newsletter_ok(message: types.Message, state: FSMContext):
|
|
data = await state.update_data(news_letter=True)
|
|
await state.clear()
|
|
await send_survey_results(message, data)
|
|
|
|
|
|
@router.message(Survey.email_newsletter, F.text.casefold() == "нет")
|
|
async def handle_survey_email_newsletter_no(message: types.Message, state: FSMContext):
|
|
data = await state.update_data(news_letter=False)
|
|
await state.clear()
|
|
await send_survey_results(message, data)
|
|
|
|
|
|
@router.message(Survey.email_newsletter)
|
|
async def handle_survey_email_newsletter_not_understand(message: types.Message, state: FSMContext):
|
|
await message.answer(
|
|
text=f"Простите, я не понимаю пожалуйста ответьте {markdown.hcode("да")} или {markdown.hcode("нет")}!"
|
|
)
|