Advertisement
fuccpuff

Untitled

Sep 24th, 2024
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.50 KB | None | 0 0
  1. import logging
  2. import asyncio
  3. from aiogram import Bot, Dispatcher, types, F
  4. from aiogram.filters import CommandStart
  5. from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
  6. from config import Token
  7.  
  8. # логгирование
  9. logging.basicConfig(level=logging.INFO)
  10. logger = logging.getLogger(__name__)
  11.  
  12. bot = Bot(token=Token)
  13. dp = Dispatcher(bot=bot)
  14.  
  15. # тексты ответов
  16. TEXTS = {
  17. "start": "Пожалуйста, выберите интересующий вас вопрос из списка ниже:",
  18. "question_1": (
  19. "<b>Запись ребёнка в школу</b>\n\n"
  20. "Чтобы записать вашего ребёнка в школу, вам необходимо:\n"
  21. "1. Подать заявление через секретаря школы.\n"
  22. " - Контактный номер телефона\n"
  23. " - Режим работы\n"
  24. " - Номер кабинета\n"
  25. " - ФИО секретаря\n"
  26. "\n"
  27. "2. Подать заявление через ваш личный кабинет на госуслугах."
  28. ),
  29. "question_2": (
  30. "<b>Запись на приём к директору</b>\n\n"
  31. "Для записи на приём к директору необходимо:\n"
  32. "1. Записаться через секретаря школы.\n"
  33. " - Контактный номер телефона\n"
  34. " - Режим работы\n"
  35. " - Номер кабинета\n"
  36. " - ФИО секретаря и директора"
  37. ),
  38. "question_3": (
  39. "<b>Медицинский кабинет</b>\n\n"
  40. "Контактный номер телефона, режим работы и номер кабинета медицинских работников:\n"
  41. "1. Первый корпус\n"
  42. "2. Второй корпус"
  43. ),
  44. "question_4": (
  45. "<b>Логопедический пункт</b>\n\n"
  46. "Контактный номер телефона, режим работы и номер кабинета логопеда:\n"
  47. "1. Логопедический пункт"
  48. ),
  49. "question_5": (
  50. "<b>Потерянные вещи</b>\n\n"
  51. "Время, в которое можно прийти, и место хранения потерянных вещей:\n"
  52. "1. Первый корпус\n"
  53. "2. Второй корпус"
  54. ),
  55. "question_6": (
  56. "<b>Дополнительные занятия и кружки</b>\n\n"
  57. "Расписание занятий и кружков:\n"
  58. "1. Первый корпус\n"
  59. "2. Второй корпус"
  60. ),
  61. "question_7": (
  62. "<b>Питание в школе</b>\n\n"
  63. "По интересующим вас вопросам обращайтесь:\n"
  64. "- Ссылка на сайт комбината питания\n"
  65. "- Контактный телефон горячей линии\n"
  66. "\n"
  67. "<b>Родительский контроль качества питания</b>\n\n"
  68. "Заполните заявление (бланк) и передайте через классного руководителя. "
  69. "Когда соберётся комиссия из 3 и более родителей (желательно с одной параллели), вас уведомят. "
  70. "Либо договоритесь с другими заинтересованными родителями, и проверка будет организована в ближайшее время."
  71. ),
  72. "question_8": (
  73. "<b>Школьная служба примирения</b>\n\n"
  74. "Вопросы и проблемы, по которым можно обратиться в школьную службу примирения:\n"
  75. "- Место: корпус, кабинет\n"
  76. "- Время\n"
  77. "- Контактные данные\n"
  78. "- ФИО руководителя"
  79. )
  80. }
  81.  
  82. # функция для создания клавиатуры
  83. def create_keyboard() -> InlineKeyboardMarkup:
  84. buttons = [
  85. InlineKeyboardButton(text='Записать ребёнка в школу', callback_data="question_1"),
  86. InlineKeyboardButton(text='Записаться на приём к директору', callback_data="question_2"),
  87. InlineKeyboardButton(text='Медицинский кабинет', callback_data="question_3"),
  88. InlineKeyboardButton(text='Логопедический пункт', callback_data="question_4"),
  89. InlineKeyboardButton(text='Потерял/забыл в школе личные вещи', callback_data="question_5"),
  90. InlineKeyboardButton(text='Дополнительные занятия кружки/секции', callback_data="question_6"),
  91. InlineKeyboardButton(text='Питание в школе', callback_data="question_7"),
  92. InlineKeyboardButton(text='Школьная служба примирения', callback_data="question_8")
  93. ]
  94. return InlineKeyboardMarkup(inline_keyboard=[buttons[i:i+1] for i in range(len(buttons))])
  95.  
  96. # общая функция для отправки ответов
  97. async def send_response(callback: types.CallbackQuery, question_key: str):
  98. if question_key in TEXTS:
  99. await callback.message.answer(TEXTS[question_key], parse_mode="HTML")
  100. logger.info(f"Отправлен ответ на {question_key}")
  101. else:
  102. await callback.message.answer("Неизвестный вопрос.")
  103. logger.warning(f"Неизвестный вопрос: {question_key}")
  104.  
  105. # обработчик команды /start
  106. @dp.message(CommandStart())
  107. async def start_cmd(message: types.Message):
  108. keyboard = create_keyboard()
  109. await message.answer(TEXTS["start"], reply_markup=keyboard)
  110. logger.info("Отправлено приветственное сообщение")
  111.  
  112. # обработчики для всех вопросов
  113. @dp.callback_query(F.data.in_({f"question_{i}" for i in range(1, 9)}))
  114. async def handle_question(callback: types.CallbackQuery):
  115. await send_response(callback, callback.data)
  116.  
  117. # основная функция
  118. async def main():
  119. logger.info("Бот запущен и готов к работе")
  120. await dp.start_polling(bot)
  121.  
  122. # запуск
  123. asyncio.run(main())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement