fix(tasks): handle next_task by resetting FSM to doing_tasks; add stop/cancel controls and stop button\n\nfix(words/import): pass user level into VocabularyService.add_word via difficulty_level; rename incorrect 'difficulty' arg to 'difficulty_level'

This commit is contained in:
2025-12-04 16:44:16 +03:00
parent 80f248770a
commit cf8f71e24a
3 changed files with 37 additions and 7 deletions

View File

@@ -151,10 +151,13 @@ async def process_answer(message: Message, state: FSMContext):
# Показываем результат и кнопку "Далее"
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="➡️ Следующее задание", callback_data="next_task")]
[InlineKeyboardButton(text="➡️ Следующее задание", callback_data="next_task")],
[InlineKeyboardButton(text="🔚 Завершить", callback_data="stop_tasks")]
])
await message.answer(result_text, reply_markup=keyboard)
# После показа результата ждём нажатия кнопки переключаемся в состояние doing_tasks
await state.set_state(TaskStates.doing_tasks)
@router.callback_query(F.data == "next_task", TaskStates.doing_tasks)
@@ -165,6 +168,31 @@ async def next_task(callback: CallbackQuery, state: FSMContext):
await callback.answer()
@router.callback_query(F.data == "stop_tasks", TaskStates.doing_tasks)
async def stop_tasks_callback(callback: CallbackQuery, state: FSMContext):
"""Остановить выполнение заданий через кнопку"""
await state.clear()
await callback.message.edit_reply_markup(reply_markup=None)
await callback.message.answer("Задания завершены. Используй /task, чтобы начать заново.")
await callback.answer()
@router.message(Command("stop"), TaskStates.doing_tasks)
@router.message(Command("stop"), TaskStates.waiting_for_answer)
async def stop_tasks(message: Message, state: FSMContext):
"""Остановить выполнение заданий командой /stop"""
await state.clear()
await message.answer("Задания остановлены. Используй /task, чтобы начать заново.")
@router.message(Command("cancel"), TaskStates.doing_tasks)
@router.message(Command("cancel"), TaskStates.waiting_for_answer)
async def cancel_tasks(message: Message, state: FSMContext):
"""Отмена выполнения заданий командой /cancel"""
await state.clear()
await message.answer("Отменено. Можешь вернуться к заданиям командой /task.")
async def finish_tasks(message: Message, state: FSMContext):
"""Завершение всех заданий"""
data = await state.get_data()