File size: 10,990 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
from aiogram.filters.command import Command
from aiogram.types import Message, CallbackQuery
from aiogram import F, Router, Bot
from aiogram.fsm.context import FSMContext

import app.keyboards.user_keyboards as kb
import app.database.requests as rq
from app.states import Register, Other

user_router = Router()
bot = Bot(token='5569983238:AAFo8J083zUWOk879M7YMYfhAreeiLovGcE')


@user_router.message(Command('start'))
async def cmd_start(message: Message):
    await rq.set_user(message.from_user.id)
    await message.answer('Добро пожаловать! Я - телеграм-бот Нины Смирновой, и моя основная задача - взаимодействие с '
                         'Вами: я могу предоставить Вам информацию о наших услугах и связать Вас с Ниной, а также '
                         'показать Вам интересные и полезные материалы от Нины. Еще я могу записать Ваш отзыв, '
                         'если Вы уже воспользовались нашими услугами! А еще (только это секрет) у меня есть очень'
                         'интересные тесты, которые позволят Вам лучше понять себя и Вашего ребенка! \n\n '
                         'Чем я могу Вам помочь?',
                         reply_markup=kb.user_main)


@user_router.message(Command('help'))
async def cmd_help(message: Message):
    await message.answer('Это кнопка помощи')


@user_router.message(F.text == 'Посмотреть каталог услуг')
async def get_catalog(message: Message):
    await message.answer('Спасибо за интерес! Вот наш перечень услуг. '
                         'Пожалуйста, выберите самую подходящую и нажмите на соответствующую кнопку, '
                         'чтобы узнать о ней подробнее:', reply_markup=await kb.user_keyboard_catalog())


@user_router.callback_query(F.data.startswith('service_'))
async def service_info(callback: CallbackQuery,state: FSMContext):
    await callback.answer('')
    service_info = await rq.get_service_info(callback.data.split('_')[1])
    service_string = f"Вот информация по выбранной Вами услуге: \n" \
                     f"Название: {service_info.service_name} \n" \
                     f"Описание: {service_info.service_description} \n" \
                     f"Цена: {service_info.service_price}. \n\n" \
                     f"Хотите ли Вы воспользоваться данной услугой?"
    await callback.answer('')
    await state.set_state(Other.user_pre_buy_service)
    await state.update_data(user_id=callback.from_user.id,
                            user_username=callback.from_user.username,
                            service=service_info.service_name)
    await callback.message.answer(service_string, reply_markup=kb.service_confirm)


@user_router.message(F.text == 'Да, связаться с Ниной')
async def admin_prompt(message: Message, state: FSMContext):
    await state.set_state(Other.user_buy_service)
    await message.answer('Напишите Нине и изложите Вашу проблему - это поможет ей лучше понять Ваш конкретный случай'
                         ' и сделать Ваш разговор более предметным!')


@user_router.message(Other.user_buy_service)
async def admin_connect(message: Message, state: FSMContext):
    data = await state.get_data()
    await bot.send_message(chat_id=1658604792,
                           text=f'Здравствуйте! Поступил новый заказ на услугу {data["service"]} от пользователя'
                                f' @{data["user_username"]}')
    await message.send_copy(1658604792)
    await message.answer('Спасибо за обращение! Скоро Нина свяжется с Вами в личных сообщениях для обсуждения '
                         'подробностей Вашего заказа!')
    await state.clear()
    await message.answer('Вы можете вернуться в меню и посмотреть, какие еще услуги мы предлагаем! Еще мы предлагаем '
                         'зарегистрироваться, чтобы получить возможность не пропускать всё самое важное, что происходит '
                         'в канале. Также регистрация позволит Вам вступить в СЕКРЕТНЫЙ КЛУБ пользователей, которые'
                         ' будут иметь доступ к специальным акциям и ВКУСНЫМ ЦЕНАМ для своих!',
                         reply_markup=kb.user_back)


@user_router.message(F.text == 'Нет, вернуться в меню')
async def np_service_return_to_menu(message: Message, state: FSMContext):
    await state.clear()
    await message.answer('Чем я могу Вам помочь?', reply_markup=kb.user_main)


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


@user_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)


@user_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_contact)
    await message.answer('Оставьте контакт, с которого Вам будет удобнее всего общаться с нами')


@user_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)


@user_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["contact"]}, '
                         f'\n - Подписаны ли Вы на секретную рассылку: {data["include_in_broadcast"]} '
                         f'\n\n Всё верно?', reply_markup=kb.yes_no_keyboard)


@user_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["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)


@user_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_contact)
        await message.answer('Оставьте контакт, с которого Вам будет удобнее всего общаться с нами')
    elif message.text == 'Статус подписки на рассылку':
        await state.set_state(Register.user_register_subscribe)
        await message.answer('Хотите ли Вы получать от нас уведомления о новинках, акциях и даже '
                             'СЕКРЕТНЫХ РАСПРОДАЖАХ ДЛЯ СВОИХ?', reply_markup=kb.yes_no_keyboard)


@user_router.message(F.text == 'Связаться с Ниной')
async def pre_get_back_to_admin(message: Message, state: FSMContext):
    await state.set_state(Other.user_contact_admin)
    await message.answer('Введите Ваше сообщение - и я отправлю его Нине!')


@user_router.message(Other.user_contact_admin)
async def get_back_to_admin(message: Message, state: FSMContext):
    await bot.send_message(chat_id=1658604792,
                           text=f'Здравствуйте! Вам поступило сообщение от пользователя'
                                f' @{message.from_user.username}:')
    await message.send_copy(1658604792)
    await message.answer('Спасибо за обращение! Нина получила Ваше сообщение и ответит Вам, как только сможет!',
                         reply_markup=kb.user_back_wo_reg)