Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import asyncio
- from aiogram import Bot, Dispatcher, types, F
- from aiogram.filters import CommandStart
- from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
- from config import Token
- # логгирование
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger(__name__)
- bot = Bot(token=Token)
- dp = Dispatcher(bot=bot)
- # тексты ответов
- TEXTS = {
- "start": "Пожалуйста, выберите интересующий вас вопрос из списка ниже:",
- "question_1": (
- "<b>Запись ребёнка в школу</b>\n\n"
- "Чтобы записать вашего ребёнка в школу, вам необходимо:\n"
- "1. Подать заявление через секретаря школы.\n"
- " - Контактный номер телефона\n"
- " - Режим работы\n"
- " - Номер кабинета\n"
- " - ФИО секретаря\n"
- "\n"
- "2. Подать заявление через ваш личный кабинет на госуслугах."
- ),
- "question_2": (
- "<b>Запись на приём к директору</b>\n\n"
- "Для записи на приём к директору необходимо:\n"
- "1. Записаться через секретаря школы.\n"
- " - Контактный номер телефона\n"
- " - Режим работы\n"
- " - Номер кабинета\n"
- " - ФИО секретаря и директора"
- ),
- "question_3": (
- "<b>Медицинский кабинет</b>\n\n"
- "Контактный номер телефона, режим работы и номер кабинета медицинских работников:\n"
- "1. Первый корпус\n"
- "2. Второй корпус"
- ),
- "question_4": (
- "<b>Логопедический пункт</b>\n\n"
- "Контактный номер телефона, режим работы и номер кабинета логопеда:\n"
- "1. Логопедический пункт"
- ),
- "question_5": (
- "<b>Потерянные вещи</b>\n\n"
- "Время, в которое можно прийти, и место хранения потерянных вещей:\n"
- "1. Первый корпус\n"
- "2. Второй корпус"
- ),
- "question_6": (
- "<b>Дополнительные занятия и кружки</b>\n\n"
- "Расписание занятий и кружков:\n"
- "1. Первый корпус\n"
- "2. Второй корпус"
- ),
- "question_7": (
- "<b>Питание в школе</b>\n\n"
- "По интересующим вас вопросам обращайтесь:\n"
- "- Ссылка на сайт комбината питания\n"
- "- Контактный телефон горячей линии\n"
- "\n"
- "<b>Родительский контроль качества питания</b>\n\n"
- "Заполните заявление (бланк) и передайте через классного руководителя. "
- "Когда соберётся комиссия из 3 и более родителей (желательно с одной параллели), вас уведомят. "
- "Либо договоритесь с другими заинтересованными родителями, и проверка будет организована в ближайшее время."
- ),
- "question_8": (
- "<b>Школьная служба примирения</b>\n\n"
- "Вопросы и проблемы, по которым можно обратиться в школьную службу примирения:\n"
- "- Место: корпус, кабинет\n"
- "- Время\n"
- "- Контактные данные\n"
- "- ФИО руководителя"
- )
- }
- # функция для создания клавиатуры
- def create_keyboard() -> InlineKeyboardMarkup:
- buttons = [
- InlineKeyboardButton(text='Записать ребёнка в школу', callback_data="question_1"),
- InlineKeyboardButton(text='Записаться на приём к директору', callback_data="question_2"),
- InlineKeyboardButton(text='Медицинский кабинет', callback_data="question_3"),
- InlineKeyboardButton(text='Логопедический пункт', callback_data="question_4"),
- InlineKeyboardButton(text='Потерял/забыл в школе личные вещи', callback_data="question_5"),
- InlineKeyboardButton(text='Дополнительные занятия кружки/секции', callback_data="question_6"),
- InlineKeyboardButton(text='Питание в школе', callback_data="question_7"),
- InlineKeyboardButton(text='Школьная служба примирения', callback_data="question_8")
- ]
- return InlineKeyboardMarkup(inline_keyboard=[buttons[i:i+1] for i in range(len(buttons))])
- # общая функция для отправки ответов
- async def send_response(callback: types.CallbackQuery, question_key: str):
- if question_key in TEXTS:
- await callback.message.answer(TEXTS[question_key], parse_mode="HTML")
- logger.info(f"Отправлен ответ на {question_key}")
- else:
- await callback.message.answer("Неизвестный вопрос.")
- logger.warning(f"Неизвестный вопрос: {question_key}")
- # обработчик команды /start
- @dp.message(CommandStart())
- async def start_cmd(message: types.Message):
- keyboard = create_keyboard()
- await message.answer(TEXTS["start"], reply_markup=keyboard)
- logger.info("Отправлено приветственное сообщение")
- # обработчики для всех вопросов
- @dp.callback_query(F.data.in_({f"question_{i}" for i in range(1, 9)}))
- async def handle_question(callback: types.CallbackQuery):
- await send_response(callback, callback.data)
- # основная функция
- async def main():
- logger.info("Бот запущен и готов к работе")
- await dp.start_polling(bot)
- # запуск
- asyncio.run(main())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement