File size: 5,354 Bytes
339f372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
from app.database import requests as rq
from app.keyboards import user_keyboards as kb
from app.states import Register
from app.database.requests import check_login_unique

router = Router()

@router.callback_query(F.data == "user_register")
async def register_start(callback: CallbackQuery, state: FSMContext):
    await state.set_state(Register.user_register_name)
    await callback.message.answer('Как к вам обращаться?')


@router.message(Register.user_register_name)
async def register_name(message: Message, state: FSMContext):
    await state.update_data(name=message.text)
    await state.set_state(Register.user_register_login)
    await message.answer(
        'Выберите свой логин. Он должен быть уникальным!'
    )


@router.message(Register.user_register_login)
async def register_name(message: Message, state: FSMContext):
   if not await check_login_unique(message.text):
       await message.answer('Этот логин уже занят. Пожалуйста, выберите другой.')
       return
   await state.update_data(login=message.text)
   await state.set_state(Register.user_register_contact)
   await message.answer('Укажите предпочтительный способ связи с вами')


@router.message(Register.user_register_contact)
async def register_contact(message: Message, state: FSMContext):
    await state.update_data(contact=message.text)
    await state.set_state(Register.user_register_subscribe)
    await message.answer(
        'Хотите получать уведомления о новинках и специальных предложениях?',
        reply_markup=kb.yes_no_keyboard
    )


@router.message(Register.user_register_subscribe)
async def register_subscribe(message: Message, state: FSMContext):
    await state.update_data(include_in_broadcast=message.text)
    if message.text == 'Да':
        await message.answer('Спасибо за регистрацию! Добро пожаловать в наш тайный клуб клиентов!')
    elif message.text == 'Нет':
        await message.answer('Спасибо за регистрацию! Если Вы измените свое решение, Вы всегда можете подписаться '
                             'на наши секретные материалы, воспользовавшись ботом!')
    data = await state.get_data()
    await state.set_state(Register.user_register_check)
    await message.answer(f'Давайте проверим еще раз:'
                         f'\n - Ваше имя - {data["name"]},'
                         f'\n - Ваш логин - {data["login"]},'
                         f'\n - Ваш контакт - {data["contact"]}, '
                         f'\n - Подписаны ли Вы на секретную рассылку: {data["include_in_broadcast"]} '
                         f'\n\n Всё верно?', reply_markup=kb.yes_no_keyboard)


@router.message(Register.user_register_check)
async def register_check(message: Message, state: FSMContext):
    if message.text == 'Да':
        data = await state.get_data()
        await rq.user_register(message.from_user.id, data["name"], data["login"], data["contact"], data["include_in_broadcast"])
        await message.answer('Ура! Спасибо, что Вы с нами! Хотите ли Вы сделать что-то еще?', reply_markup=kb.user_main)
        await state.clear()
    if message.text == 'Нет':
        await state.set_state(Register.user_register_correct)
        await message.answer('Упс :( Что Вы хотите исправить?', reply_markup=kb.register_correct_keyboard)


@router.message(Register.user_register_correct)
async def choose_the_correction(message: Message, state: FSMContext):
    if message.text == 'Имя':
        await state.set_state(Register.user_register_name)
        await message.answer('Как к Вам обращаться?')
    elif message.text == 'Логин':
        await state.set_state(Register.user_register_login)
        await message.answer('Выберите свой логин. Он должен быть уникальным!')
    elif message.text == 'Контакт':
        await state.set_state(Register.user_register_contact)
        await message.answer('Оставьте контакт, с которого Вам будет удобнее всего общаться с нами')
    elif message.text == 'Статус подписки на рассылку':
        await state.set_state(Register.user_register_subscribe)
        await message.answer('Хотите ли Вы получать от нас уведомления о новинках, акциях и даже '
                             'СЕКРЕТНЫХ РАСПРОДАЖАХ ДЛЯ СВОИХ?', reply_markup=kb.yes_no_keyboard)


@router.callback_query(F.data == "user_to_main")
async def register(callback: CallbackQuery):
    await callback.answer("Возвращаемся в меню")
    await callback.message.answer("Чем я могу Вам помочь?", reply_markup=kb.user_main)