Skip to content

glebkudr/astrobot

Repository files navigation

AstroBot 🌟

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

Быстрый старт

1. Клонирование репозитория

git clone <repository-url>
cd astrobot

2. Настройка переменных окружения

Скопируйте файл с примером переменных:

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

3. Получение токенов

  1. Telegram Bot Token: Создайте бота через @BotFather
  2. Gemini API Key: Получите ключ в Google AI Studio

4. Запуск в Docker (рекомендуемый способ)

Development режим (с hot reload):

# Запуск с 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 режим:

# Запуск production версии
docker-compose up --build

# Или в фоне
docker-compose up -d --build

5. Локальный запуск (без Docker)

# Установка зависимостей
pip install -r requirements.txt

# Запуск MongoDB и Redis локально
# (или используйте Docker только для баз данных)
docker-compose up mongo redis -d

# Настройка .env для локального запуска
# Измените MONGO_URI и REDIS_URI на localhost

# Запуск бота
python -m bot.main

Структура проекта

astrobot/
├── 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 - Сбросить состояние и пройти опрос заново

Процесс работы

  1. Запуск: Пользователь отправляет /start
  2. Язык: Автоматическое определение языка или выбор вручную
  3. Опрос: FSM-опрос для сбора данных:
    • Имя
    • Дата рождения (календарь + текст с Gemini-валидацией)
    • Место рождения
  4. Прогноз: Генерация и отправка астрологического прогноза

Разработка

Добавление новых языков

  1. Создайте файл локализации в bot/locales/{lang}.json
  2. Добавьте язык в маппинг в bot/middlewares/i18n.py
  3. Обновите клавиатуру выбора языка

Работа с базой данных

# Пример работы с пользователем
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

TODO и планы развития

  • Интеграция платных подписок (модели 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

# Подключение к Redis
docker exec -it astrobot_redis redis-cli

# Просмотр ключей
keys *

Остановка

# Остановка всех сервисов
docker-compose down

# Остановка с удалением volumes (ВНИМАНИЕ: удалит все данные!)
docker-compose down -v

Поддержка

При возникновении проблем:

  1. Проверьте логи: docker-compose logs -f
  2. Убедитесь, что все переменные окружения заданы корректно
  3. Проверьте подключение к внешним API (Telegram, Gemini)

AstroBot - Ваш персональный астрологический помощник! 🌟

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors