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)