menu.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from aiogram.dispatcher import FSMContext
  2. import utils
  3. from handlers.users.full_variant_states import send_variant
  4. from loader import dp
  5. from aiogram.types import Message, ReplyKeyboardRemove, ParseMode
  6. from aiogram.dispatcher.filters import Command
  7. import states
  8. import parsing
  9. import keyboards
  10. import diagrams
  11. # --- Main Menu Handlers
  12. @dp.message_handler(text=keyboards.default.main_captions[0], state=None)
  13. async def solve_tasks(message: Message):
  14. await message.answer(f'Вы выбрали режим решения задач ЕГЭ \n'
  15. f'Введите номер задачи (от 1 до 27)', reply_markup=keyboards.default.back_menu)
  16. await states.SolveTask.enter_number.set()
  17. @dp.message_handler(text=keyboards.default.main_captions[1], state=None)
  18. async def theory(message: Message):
  19. await message.answer(f'Вы открыли раздел с теорией \n'
  20. f'Введите номер задачи (от 1 до 27)', reply_markup=keyboards.default.back_menu)
  21. await states.Theory.enter_number.set()
  22. @dp.message_handler(text=keyboards.default.main_captions[2], state=None)
  23. async def generate_variant(message: Message, state: FSMContext):
  24. await message.answer('Выбирете номер варианта (натуральное число до 10000):', reply_markup=keyboards.default.skip_menu)
  25. await states.FullVariant.send_variant.set()
  26. @dp.message_handler(text=keyboards.default.main_captions[3])
  27. async def statistics_page(message: Message):
  28. await message.answer(f'Вы перешли в раздел статистика', reply_markup=keyboards.default.stat_menu)
  29. @dp.message_handler(text=keyboards.default.main_captions[4])
  30. async def feedback_page(message: Message):
  31. await message.answer(f'Напишите отзыв', reply_markup=keyboards.default.back_menu)
  32. await states.Feedback.write_feedback.set()
  33. # ---
  34. # --- Statistics Menu Handlers
  35. @dp.message_handler(text=keyboards.default.stat_captions[3])
  36. async def back_to_home(message: Message):
  37. await message.answer(f'Вы вернулись на главную страницу', reply_markup=keyboards.default.main_menu)
  38. @dp.message_handler(text=keyboards.default.stat_captions[1])
  39. async def get_specific_task_stats(message: Message):
  40. await message.answer(f'Введите номер задачи (от 1 до 27), чтобы посмотреть ее статистику',
  41. reply_markup=keyboards.default.back_menu)
  42. await states.SpecificTaskStats.enter_number.set()
  43. @dp.message_handler(text=keyboards.default.stat_captions[4])
  44. async def get_specific_task_stats(message: Message):
  45. await message.answer(f'Введите номер задачи (от 1 до 27), чтобы посмотреть ее статистику',
  46. reply_markup=keyboards.default.back_menu)
  47. await states.TimeStats.enter_number.set()
  48. @dp.message_handler(text=keyboards.default.stat_captions[0])
  49. async def get_all_tasks_stats(message: Message):
  50. all_task_stats = await utils.db_api.get_stats(message.chat.id)
  51. if not all_task_stats:
  52. await message.answer("Вы пока не решали задачи",
  53. reply_markup=keyboards.default.main_menu)
  54. for task_number, answers in all_task_stats.items():
  55. correctness = int(answers[0] / answers[1] * 100)
  56. if correctness > 90:
  57. result = 'Отличный результат. Продолжай в том же духе.'
  58. elif correctness > 75:
  59. result = 'Хороший результат. У тебя все получиться!'
  60. elif correctness > 50:
  61. result = 'Есть, над чем работать, но в целом неплохо'
  62. else:
  63. result = 'Рекомендую тебе почитать теорию по этой задаче'
  64. stat_diagram = await diagrams.get_task_stats_diagram(task_number, answers[0], answers[1], result)
  65. await message.answer_photo(stat_diagram, reply_markup=keyboards.default.main_menu)
  66. @dp.message_handler(text=keyboards.default.stat_captions[2])
  67. async def get_activity_stats(message: Message):
  68. activity_stats = await utils.db_api.repo.get_activity(message.chat.id)
  69. if not activity_stats:
  70. await message.answer("Вы еще не решали задачи", reply_markup=keyboards.default.main_menu)
  71. diagram = await diagrams.get_user_activity_diagram(activity_stats)
  72. await message.answer_photo(diagram, reply_markup=keyboards.default.main_menu)
  73. # ---
  74. # Back Menu Handlers ---
  75. @dp.message_handler(state='*', text=keyboards.default.back_captions[0])
  76. async def cancel_dialog(message: Message, state: FSMContext):
  77. await message.answer(f'Вы вернулись в главное меню', reply_markup=keyboards.default.main_menu)
  78. await state.finish()