123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- from aiogram.dispatcher import FSMContext
- import utils
- from handlers.users.full_variant_states import send_variant
- from loader import dp
- from aiogram.types import Message, ReplyKeyboardRemove, ParseMode
- from aiogram.dispatcher.filters import Command
- import states
- import parsing
- import keyboards
- import diagrams
- # --- Main Menu Handlers
- @dp.message_handler(text=keyboards.default.main_captions[0], state=None)
- async def solve_tasks(message: Message):
- await message.answer(f'Вы выбрали режим решения задач ЕГЭ \n'
- f'Введите номер задачи (от 1 до 27)', reply_markup=keyboards.default.back_menu)
- await states.SolveTask.enter_number.set()
- @dp.message_handler(text=keyboards.default.main_captions[1], state=None)
- async def theory(message: Message):
- await message.answer(f'Вы открыли раздел с теорией \n'
- f'Введите номер задачи (от 1 до 27)', reply_markup=keyboards.default.back_menu)
- await states.Theory.enter_number.set()
- @dp.message_handler(text=keyboards.default.main_captions[2], state=None)
- async def generate_variant(message: Message, state: FSMContext):
- await message.answer('Выбирете номер варианта (натуральное число до 10000):', reply_markup=keyboards.default.skip_menu)
- await states.FullVariant.send_variant.set()
- @dp.message_handler(text=keyboards.default.main_captions[3])
- async def statistics_page(message: Message):
- await message.answer(f'Вы перешли в раздел статистика', reply_markup=keyboards.default.stat_menu)
- @dp.message_handler(text=keyboards.default.main_captions[4])
- async def feedback_page(message: Message):
- await message.answer(f'Напишите отзыв', reply_markup=keyboards.default.back_menu)
- await states.Feedback.write_feedback.set()
- # ---
- # --- Statistics Menu Handlers
- @dp.message_handler(text=keyboards.default.stat_captions[3])
- async def back_to_home(message: Message):
- await message.answer(f'Вы вернулись на главную страницу', reply_markup=keyboards.default.main_menu)
- @dp.message_handler(text=keyboards.default.stat_captions[1])
- async def get_specific_task_stats(message: Message):
- await message.answer(f'Введите номер задачи (от 1 до 27), чтобы посмотреть ее статистику',
- reply_markup=keyboards.default.back_menu)
- await states.SpecificTaskStats.enter_number.set()
- @dp.message_handler(text=keyboards.default.stat_captions[4])
- async def get_specific_task_stats(message: Message):
- await message.answer(f'Введите номер задачи (от 1 до 27), чтобы посмотреть ее статистику',
- reply_markup=keyboards.default.back_menu)
- await states.TimeStats.enter_number.set()
- @dp.message_handler(text=keyboards.default.stat_captions[0])
- async def get_all_tasks_stats(message: Message):
- all_task_stats = await utils.db_api.get_stats(message.chat.id)
- if not all_task_stats:
- await message.answer("Вы пока не решали задачи",
- reply_markup=keyboards.default.main_menu)
- for task_number, answers in all_task_stats.items():
- correctness = int(answers[0] / answers[1] * 100)
- if correctness > 90:
- result = 'Отличный результат. Продолжай в том же духе.'
- elif correctness > 75:
- result = 'Хороший результат. У тебя все получиться!'
- elif correctness > 50:
- result = 'Есть, над чем работать, но в целом неплохо'
- else:
- result = 'Рекомендую тебе почитать теорию по этой задаче'
- stat_diagram = await diagrams.get_task_stats_diagram(task_number, answers[0], answers[1], result)
- await message.answer_photo(stat_diagram, reply_markup=keyboards.default.main_menu)
- @dp.message_handler(text=keyboards.default.stat_captions[2])
- async def get_activity_stats(message: Message):
- activity_stats = await utils.db_api.repo.get_activity(message.chat.id)
- if not activity_stats:
- await message.answer("Вы еще не решали задачи", reply_markup=keyboards.default.main_menu)
- diagram = await diagrams.get_user_activity_diagram(activity_stats)
- await message.answer_photo(diagram, reply_markup=keyboards.default.main_menu)
- # ---
- # Back Menu Handlers ---
- @dp.message_handler(state='*', text=keyboards.default.back_captions[0])
- async def cancel_dialog(message: Message, state: FSMContext):
- await message.answer(f'Вы вернулись в главное меню', reply_markup=keyboards.default.main_menu)
- await state.finish()
|