helpy_botik / app /handlers /user_route.py
Zlovoblachko's picture
Add application file
339f372
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)