diff --git a/bot/handlers/import_text.py b/bot/handlers/import_text.py index e82b85e..98f2dc2 100644 --- a/bot/handlers/import_text.py +++ b/bot/handlers/import_text.py @@ -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 diff --git a/bot/handlers/tasks.py b/bot/handlers/tasks.py index 3eb2413..0402974 100644 --- a/bot/handlers/tasks.py +++ b/bot/handlers/tasks.py @@ -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() diff --git a/bot/handlers/words.py b/bot/handlers/words.py index 28f4408..d4a6e54 100644 --- a/bot/handlers/words.py +++ b/bot/handlers/words.py @@ -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