Files
tg_bot_language/main.py
mamonov.ep adc8a6bf8e feat: мини-игры, premium подписка, улучшенные контексты
Мини-игры (/games):
- Speed Round: 10 раундов, 10 секунд на ответ, очки за скорость
- Match Pairs: 5 слов + 5 переводов, соединить пары

Premium-функции:
- Поля is_premium и premium_until для пользователей
- AI режим проверки ответов (учитывает синонимы)
- Batch проверка всех ответов одним запросом

Улучшения:
- Примеры использования для всех добавляемых слов
- Разбиение переводов по запятой на отдельные записи
- Полные предложения в контекстах (без ___)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 19:42:10 +03:00

77 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.types import BotCommand
from config.settings import settings
from bot.handlers import start, vocabulary, tasks, settings as settings_handler, words, import_text, practice, reminder, level_test, admin, exercises, wordofday, stories, minigames
from services.reminder_service import init_reminder_service
async def main():
"""Главная функция запуска бота"""
# Настройка логирования
logging.basicConfig(
level=logging.INFO if settings.debug else logging.WARNING,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Инициализация бота и диспетчера
bot = Bot(
token=settings.bot_token,
default=DefaultBotProperties(parse_mode=ParseMode.HTML)
)
dp = Dispatcher()
# Команды бота для меню Telegram
await bot.set_my_commands([
BotCommand(command="start", description="Запустить бота"),
BotCommand(command="task", description="Задания"),
BotCommand(command="practice", description="Диалог с AI"),
BotCommand(command="story", description="Мини-истории"),
BotCommand(command="games", description="Мини-игры"),
BotCommand(command="add", description="Добавить слово"),
BotCommand(command="words", description="Тематическая подборка слов"),
BotCommand(command="vocabulary", description="Мой словарь"),
BotCommand(command="stats", description="Статистика"),
BotCommand(command="settings", description="Настройки"),
BotCommand(command="help", description="Справка"),
])
# Регистрация роутеров
dp.include_router(start.router)
dp.include_router(level_test.router)
dp.include_router(vocabulary.router)
dp.include_router(tasks.router)
dp.include_router(settings_handler.router)
dp.include_router(words.router)
dp.include_router(import_text.router)
dp.include_router(practice.router)
dp.include_router(exercises.router)
dp.include_router(wordofday.router)
dp.include_router(stories.router)
dp.include_router(minigames.router)
dp.include_router(reminder.router)
dp.include_router(admin.router)
# База данных инициализируется через Alembic миграции (make local-migrate)
# Инициализация и запуск сервиса напоминаний
reminder_service = init_reminder_service(bot)
reminder_service.start()
# Запуск бота
logging.info("Бот запущен")
try:
await dp.start_polling(bot)
finally:
# Остановка планировщика при завершении
reminder_service.shutdown()
if __name__ == '__main__':
asyncio.run(main())