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:
@@ -95,7 +95,8 @@ async def process_text(message: Message, state: FSMContext):
|
||||
await state.update_data(
|
||||
words=words,
|
||||
user_id=user.id,
|
||||
original_text=text
|
||||
original_text=text,
|
||||
level=user.level.name
|
||||
)
|
||||
await state.set_state(ImportStates.viewing_words)
|
||||
|
||||
@@ -189,7 +190,7 @@ async def import_single_word(callback: CallbackQuery, state: FSMContext):
|
||||
examples=[{"en": word_data.get('context', ''), "ru": ""}] if word_data.get('context') else [],
|
||||
source=WordSource.CONTEXT,
|
||||
category='imported',
|
||||
difficulty_level=None
|
||||
difficulty_level=data.get('level')
|
||||
)
|
||||
|
||||
await callback.answer(f"✅ Слово '{word_data['word']}' добавлено в словарь")
|
||||
@@ -226,7 +227,7 @@ async def import_all_words(callback: CallbackQuery, state: FSMContext):
|
||||
examples=[{"en": word_data.get('context', ''), "ru": ""}] if word_data.get('context') else [],
|
||||
source=WordSource.CONTEXT,
|
||||
category='imported',
|
||||
difficulty_level=None
|
||||
difficulty_level=data.get('level')
|
||||
)
|
||||
added_count += 1
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -69,7 +69,8 @@ async def cmd_words(message: Message, state: FSMContext):
|
||||
await state.update_data(
|
||||
theme=theme,
|
||||
words=words,
|
||||
user_id=user.id
|
||||
user_id=user.id,
|
||||
level=user.level.name
|
||||
)
|
||||
await state.set_state(WordsStates.viewing_words)
|
||||
|
||||
@@ -155,7 +156,7 @@ async def add_single_word(callback: CallbackQuery, state: FSMContext):
|
||||
examples=[{"en": word_data.get('example', ''), "ru": ""}] if word_data.get('example') else [],
|
||||
source=WordSource.SUGGESTED,
|
||||
category=data.get('theme', 'general'),
|
||||
difficulty=None
|
||||
difficulty_level=data.get('level')
|
||||
)
|
||||
|
||||
await callback.answer(f"✅ Слово '{word_data['word']}' добавлено в словарь")
|
||||
@@ -193,7 +194,7 @@ async def add_all_words(callback: CallbackQuery, state: FSMContext):
|
||||
examples=[{"en": word_data.get('example', ''), "ru": ""}] if word_data.get('example') else [],
|
||||
source=WordSource.SUGGESTED,
|
||||
category=theme,
|
||||
difficulty=None
|
||||
difficulty_level=data.get('level')
|
||||
)
|
||||
added_count += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user