stats_states.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from aiogram.dispatcher import FSMContext
  2. from aiogram.types import Message
  3. import json
  4. import diagrams
  5. import keyboards
  6. import states
  7. import utils
  8. from loader import dp
  9. @dp.message_handler(state=states.SpecificTaskStats.enter_number)
  10. async def enter_number(message: Message, state: FSMContext):
  11. task_number = message.text
  12. try:
  13. if int(task_number) < 1 or int(task_number) > 27:
  14. raise ValueError
  15. one_task_stats = await utils.db_api.get_stats(message.chat.id, task_number=task_number)
  16. if not one_task_stats:
  17. await message.answer(
  18. f"Вы пока не решали задачу {task_number}.",
  19. reply_markup=keyboards.default.main_menu)
  20. await state.finish()
  21. for task_number, answers in one_task_stats.items():
  22. correctness = int(answers[0] / answers[1] * 100)
  23. if correctness > 90:
  24. result = 'Отличный результат. Продолжай в том же духе.'
  25. elif correctness > 75:
  26. result = 'Хороший результат. У тебя все получиться!'
  27. elif correctness > 50:
  28. result = 'Есть, над чем работать, но в целом неплохо'
  29. else:
  30. result = 'Рекомендую тебе почитать теорию по этой задаче'
  31. stat_diagram = await diagrams.get_task_stats_diagram(task_number, answers[0], answers[1], result)
  32. """
  33. min_time = 347
  34. max_time = 507
  35. avg_time = 304
  36. recomend_time = 300
  37. stat_diagram = await diagrams.get_time_stats_diagram(task_number, min_time, max_time, avg_time, recomend_time)"""
  38. await message.answer_photo(stat_diagram, reply_markup=keyboards.default.main_menu)
  39. await state.finish()
  40. except ValueError:
  41. "if task_number isn't int"
  42. await message.answer("⚠ Номер задания - целое число от 1 до 27, попробуй еще раз")
  43. await states.SpecificTaskStats.enter_number.set()
  44. # fasdgdfsgsdfgdsfg
  45. @dp.message_handler(state=states.TimeStats.enter_number)
  46. async def enter_number(message: Message, state: FSMContext):
  47. task_number = message.text
  48. try:
  49. if int(task_number) < 1 or int(task_number) > 27:
  50. raise ValueError
  51. time_stats = await utils.db_api.get_time(message.chat.id, task_number)
  52. if not time_stats:
  53. await message.answer(
  54. f"Вы пока не решили задачу {task_number} правильно",
  55. reply_markup=keyboards.default.main_menu)
  56. await state.finish()
  57. avg_time = int(time_stats['sum_time'] / time_stats['count'])
  58. recomend_time = json.load(open('data/practice/recommend_time.json'))[task_number] * 60
  59. stat_diagram = await diagrams.get_time_stats_diagram(task_number, time_stats['min_time'], time_stats['max_time'], avg_time, recomend_time)
  60. await message.answer_photo(stat_diagram, reply_markup=keyboards.default.main_menu)
  61. await state.finish()
  62. except IndexError:
  63. "if task_number isn't int"
  64. await message.answer("⚠ Номер задания - целое число от 1 до 27, попробуй еще раз")
  65. await states.TimeStats.enter_number.set()