Добавлены основные функции MVP: тематические подборки, импорт слов, диалоговая практика, напоминания и тест уровня
Новые команды: - /words [тема] - AI-генерация тематических подборок слов (10 слов по теме с учётом уровня) - /import - извлечение до 15 ключевых слов из текста (книги, статьи, песни) - /practice - диалоговая практика с AI в 6 сценариях (ресторан, магазин, путешествие, работа, врач, общение) - /reminder - настройка ежедневных напоминаний по расписанию - /level_test - тест из 7 вопросов для определения уровня английского (A1-C2) Основные изменения: - AI сервис: добавлены методы generate_thematic_words, extract_words_from_text, start_conversation, continue_conversation, generate_level_test - Диалоговая практика: исправление ошибок в реальном времени, подсказки, перевод реплик - Напоминания: APScheduler для ежедневной отправки напоминаний в выбранное время - Тест уровня: автоматическое определение уровня при регистрации, можно пропустить - База данных: добавлены поля reminders_enabled, last_reminder_sent - Vocabulary service: метод get_word_by_original для проверки дубликатов - Зависимости: apscheduler==3.10.4 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from aiogram import Router, F
|
||||
from aiogram.filters import CommandStart, Command
|
||||
from aiogram.types import Message
|
||||
from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
|
||||
from aiogram.fsm.context import FSMContext
|
||||
|
||||
from database.db import async_session_maker
|
||||
@@ -24,16 +24,33 @@ async def cmd_start(message: Message, state: FSMContext):
|
||||
await message.answer(
|
||||
f"👋 Привет, {message.from_user.first_name}!\n\n"
|
||||
f"Я бот для изучения английского языка. Помогу тебе:\n"
|
||||
f"📚 Пополнять словарный запас\n"
|
||||
f"✍️ Выполнять ежедневные задания\n"
|
||||
f"💬 Практиковать язык в диалоге\n\n"
|
||||
f"📚 Пополнять словарный запас (ручное/тематическое/из текста)\n"
|
||||
f"✍️ Выполнять интерактивные задания\n"
|
||||
f"💬 Практиковать язык в диалоге с AI\n"
|
||||
f"📊 Отслеживать свой прогресс\n\n"
|
||||
f"<b>Основные команды:</b>\n"
|
||||
f"/add [слово] - добавить слово в словарь\n"
|
||||
f"/words [тема] - тематическая подборка\n"
|
||||
f"/vocabulary - мой словарь\n"
|
||||
f"/task - получить задание\n"
|
||||
f"/practice - диалог с AI\n"
|
||||
f"/stats - статистика\n"
|
||||
f"/settings - настройки\n"
|
||||
f"/help - справка\n\n"
|
||||
f"Давай начнём! Отправь мне слово, которое хочешь выучить, или используй команду /add"
|
||||
)
|
||||
|
||||
# Предлагаем пройти тест уровня
|
||||
keyboard = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text="📊 Пройти тест уровня", callback_data="offer_level_test")],
|
||||
[InlineKeyboardButton(text="➡️ Пропустить", callback_data="skip_level_test")]
|
||||
])
|
||||
|
||||
await message.answer(
|
||||
"🎯 <b>Определим твой уровень?</b>\n\n"
|
||||
"Короткий тест (7 вопросов) поможет подобрать задания под твой уровень.\n"
|
||||
"Это займёт 2-3 минуты.\n\n"
|
||||
"Или можешь пропустить и установить уровень вручную позже в /settings",
|
||||
reply_markup=keyboard
|
||||
)
|
||||
else:
|
||||
# Существующий пользователь
|
||||
@@ -42,6 +59,7 @@ async def cmd_start(message: Message, state: FSMContext):
|
||||
f"Готов продолжить обучение?\n"
|
||||
f"/vocabulary - посмотреть словарь\n"
|
||||
f"/task - получить задание\n"
|
||||
f"/practice - практика диалога\n"
|
||||
f"/stats - статистика"
|
||||
)
|
||||
|
||||
@@ -54,13 +72,39 @@ async def cmd_help(message: Message):
|
||||
"<b>Управление словарём:</b>\n"
|
||||
"/add [слово] - добавить слово в словарь\n"
|
||||
"/vocabulary - просмотр словаря\n"
|
||||
"/words [тема] - тематическая подборка слов\n"
|
||||
"/import - импортировать слова из текста\n\n"
|
||||
"<b>Обучение:</b>\n"
|
||||
"/task - получить задание\n"
|
||||
"/practice - практика с ИИ\n\n"
|
||||
"/task - получить задание (перевод, заполнение пропусков)\n"
|
||||
"/practice - диалоговая практика с ИИ (6 сценариев)\n\n"
|
||||
"<b>Статистика:</b>\n"
|
||||
"/stats - твой прогресс\n\n"
|
||||
"<b>Настройки:</b>\n"
|
||||
"/settings - настройки бота\n\n"
|
||||
"/settings - настройки бота\n"
|
||||
"/reminder - ежедневные напоминания\n\n"
|
||||
"Ты также можешь просто отправить мне слово, и я предложу добавить его в словарь!"
|
||||
)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "offer_level_test")
|
||||
async def offer_level_test_callback(callback: CallbackQuery, state: FSMContext):
|
||||
"""Начать тест уровня из приветствия"""
|
||||
from bot.handlers.level_test import start_level_test
|
||||
await callback.message.delete()
|
||||
await start_level_test(callback.message, state)
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router.callback_query(F.data == "skip_level_test")
|
||||
async def skip_level_test_callback(callback: CallbackQuery):
|
||||
"""Пропустить тест уровня"""
|
||||
await callback.message.edit_text(
|
||||
"✅ Хорошо!\n\n"
|
||||
"Ты можешь пройти тест позже командой /level_test\n"
|
||||
"или установить уровень вручную в /settings\n\n"
|
||||
"Давай начнём! Попробуй:\n"
|
||||
"• /words travel - тематическая подборка\n"
|
||||
"• /practice - диалог с AI\n"
|
||||
"• /add hello - добавить слово"
|
||||
)
|
||||
await callback.answer()
|
||||
|
||||
Reference in New Issue
Block a user