Telegram-бот для астрологических прогнозов с автоматическим определением языка, FSM-опросом и интеграцией с Gemini AI.
- 🌍 Автоматическое определение языка - бот определяет язык пользователя из Telegram и автоматически устанавливает локализацию
- 🔄 FSM-опрос - пошаговый сбор данных пользователя (имя, дата рождения, место рождения)
- 📅 Умный парсинг дат - стандартный парсер + Gemini AI для распознавания дат в различных форматах
- 📱 Inline-календарь - удобный выбор даты рождения
- 🗄️ MongoDB + Redis - надежное хранение данных и кеширование
- 🐳 Docker - готовые конфигурации для dev и prod
- 🌐 i18n - поддержка русского и английского языков
- Python 3.12
- aiogram 3.x (long polling)
- MongoDB (motor) - пользователи и кеш прогнозов
- Redis - кеширование и rate-limiting (в будущем)
- Gemini AI - альтернативное распознавание дат
- Docker + Docker Compose
git clone <repository-url>
cd astrobotСкопируйте файл с примером переменных:
cp .env.example .envОтредактируйте .env файл:
# Bot configuration
BOT_TOKEN=your_bot_token_here
# Database configuration
MONGO_URI=mongodb://mongo:27017/astrobot
REDIS_URI=redis://redis:6379/0
# External APIs
GEMINI_API_KEY=your_gemini_api_key_here
# Application settings
LOG_LEVEL=INFO
DEFAULT_LANG=ru
# Environment
ENV=dev- Telegram Bot Token: Создайте бота через @BotFather
- Gemini API Key: Получите ключ в Google AI Studio
# Запуск с hot reload
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build
# Или в фоне
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build# Запуск production версии
docker-compose up --build
# Или в фоне
docker-compose up -d --build# Установка зависимостей
pip install -r requirements.txt
# Запуск MongoDB и Redis локально
# (или используйте Docker только для баз данных)
docker-compose up mongo redis -d
# Настройка .env для локального запуска
# Измените MONGO_URI и REDIS_URI на localhost
# Запуск бота
python -m bot.mainastrobot/
├── bot/ # Основной пакет бота
│ ├── handlers/ # Обработчики команд и сообщений
│ │ ├── start.py # /start с автоопределением языка
│ │ ├── fsm_user_info.py # FSM для сбора данных
│ │ └── reset.py # /reset для сброса состояния
│ ├── middlewares/ # Middleware
│ │ └── i18n.py # Интернационализация
│ ├── services/ # Бизнес-логика
│ │ ├── astro_service.py # Генерация прогнозов (заглушка)
│ │ └── date_validator.py # Валидация дат с Gemini
│ ├── keyboards/ # Клавиатуры
│ │ ├── general_keyboards.py # Общие клавиатуры
│ │ └── inline_calendar.py # Календарь
│ ├── locales/ # Локализация
│ │ ├── ru.json # Русский язык
│ │ └── en.json # Английский язык
│ ├── models/ # Модели данных
│ │ └── pydantic_models.py
│ ├── states/ # FSM состояния
│ │ └── user_states.py
│ ├── config.py # Конфигурация
│ └── main.py # Точка входа
├── Dockerfile # Production Docker образ
├── Dockerfile.dev # Development Docker образ
├── docker-compose.yml # Production compose
├── docker-compose.dev.yml # Development compose
├── requirements.txt # Python зависимости
├── .env.example # Пример переменных окружения
└── README.md # Документация
/start- Начать работу с ботом (автоопределение языка)/reset- Сбросить состояние и пройти опрос заново
- Запуск: Пользователь отправляет
/start - Язык: Автоматическое определение языка или выбор вручную
- Опрос: FSM-опрос для сбора данных:
- Имя
- Дата рождения (календарь + текст с Gemini-валидацией)
- Место рождения
- Прогноз: Генерация и отправка астрологического прогноза
- Создайте файл локализации в
bot/locales/{lang}.json - Добавьте язык в маппинг в
bot/middlewares/i18n.py - Обновите клавиатуру выбора языка
# Пример работы с пользователем
user_doc = await db.users.find_one({"telegram_id": user_id})
# Пример работы с прогнозами
forecast = await db.forecasts.find_one({"user_id": user_id})Настройка уровня логирования в .env:
LOG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERROR- Интеграция платных подписок (модели Wallet/Balance)
- Rate-limiting и антиспам с Redis
- Генерация изображений солярных карт (PNG/WEBP)
- Переход на webhook-режим для production
- Настройка CI/CD пайплайнов
- Более сложная астрологическая логика
- Healthcheck для production
- Переход на Redis-storage для FSM
# Просмотр логов
docker-compose logs -f astrobot
# Логи только бота
docker-compose logs -f astrobot# Подключение к MongoDB
docker exec -it astrobot_mongo mongosh astrobot
# Проверка пользователей
db.users.find().pretty()
# Проверка прогнозов
db.forecasts.find().pretty()# Подключение к Redis
docker exec -it astrobot_redis redis-cli
# Просмотр ключей
keys *# Остановка всех сервисов
docker-compose down
# Остановка с удалением volumes (ВНИМАНИЕ: удалит все данные!)
docker-compose down -vПри возникновении проблем:
- Проверьте логи:
docker-compose logs -f - Убедитесь, что все переменные окружения заданы корректно
- Проверьте подключение к внешним API (Telegram, Gemini)
AstroBot - Ваш персональный астрологический помощник! 🌟