Spaces:
Runtime error
Runtime error
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)
|