Skip to content

Repository files navigation

Telegram-бот мониторинга билетов РЖД

Описание проекта

Этот проект представляет собой полнофункциональный Telegram-бота для автоматического мониторинга наличия билетов на поезда РЖД с уведомлениями пользователей о появлении доступных мест.

Основные возможности

  • 🚂 Мониторинг билетов по заданным критериям
  • 🔔 Мгновенные уведомления о появлении билетов
  • 📍 Гибкие критерии поиска:
    • Станция отправления и назначения
    • Дата поездки
    • Номер поезда
    • Тип места (плацкарт, купе, СВ и др.)
  • 📱 Удобный интерфейс с кнопками и интерактивными элементами
  • ⚙️ Настройка подписок и параметров мониторинга
  • 🐳 Docker поддержка для легкого развертывания
  • 📊 Статистика и мониторинг работы системы
  • 🎨 Современный UI/UX с эмодзи и визуальными элементами

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

rzd/
├── TECHNICAL_SPECIFICATION.md  # Техническое задание
├── README.md                   # Документация проекта
├── README_DEPLOYMENT.md        # Руководство по развертыванию
├── requirements.txt            # Python зависимости
├── env_example.txt            # Пример конфигурации
├── docker-compose.yml         # Docker Compose конфигурация
├── Dockerfile                 # Docker образ
├── alembic.ini                # Конфигурация миграций
├── init.sql                   # Инициализация БД
├── main.py                    # Главный файл запуска
├── run.py                     # Скрипт управления
├── src/                       # Исходный код
│   ├── __init__.py
│   ├── config.py              # Конфигурация
│   ├── database.py            # Подключение к БД
│   ├── models.py              # Модели данных
│   ├── bot.py                 # Основная логика бота
│   ├── scraper.py             # Парсер сайта РЖД
│   ├── monitoring.py           # Сервис мониторинга
│   ├── celery_app.py          # Celery конфигурация
│   ├── tasks.py               # Фоновые задачи
│   └── utils.py               # Утилиты
└── alembic/                   # Миграции БД
    └── env.py

Техническое задание

Подробное техническое задание находится в файле TECHNICAL_SPECIFICATION.md.

Краткое содержание ТЗ:

  1. Функциональные требования:

    • Регистрация и управление подписками
    • Параметры поиска билетов (станции, дата, поезд, тип места)
    • Мониторинг и уведомления
    • Удобный интерфейс бота
  2. Технические требования:

    • Python 3.8+ с использованием python-telegram-bot или aiogram
    • Web scraping сайта РЖД
    • PostgreSQL/SQLite для хранения данных
    • Celery + Redis для фоновых задач
    • Docker для развертывания
  3. Архитектура:

    • Telegram Bot API
    • Web Scraper для парсинга РЖД
    • Database для хранения подписок
    • Scheduler для планирования задач
    • Notification Service для уведомлений

🚀 Автоматическая установка (рекомендуется)

Полная автоматическая установка на Ubuntu

# Скачайте и запустите скрипт установки
wget https://raw.githubusercontent.com/yourusername/rzd-bot/main/install.sh
chmod +x install.sh

# Запуск от обычного пользователя (будет запрашивать sudo)
./install.sh

# ИЛИ запуск от root (без запроса sudo)
sudo ./install.sh

Скрипт автоматически:

  • ✅ Установит все зависимости (Python, PostgreSQL, Redis, Docker)
  • ✅ Настроит систему и сервисы
  • ✅ Создаст пользователя и директории
  • ✅ Запросит токен бота у пользователя
  • ✅ Настроит базу данных и конфигурацию
  • ✅ Запустит все сервисы

Вам нужно только:

  1. Получить токен бота у @BotFather в Telegram
  2. Ввести токен когда запросит скрипт
  3. Дождаться завершения установки

Быстрый запуск с Docker

# 1. Создайте конфигурацию
./create_env.sh

# 2. Запустите с Docker
./quick_start.sh

Настройка домена и SSL (для продакшена)

# После полной установки
sudo ./setup_domain.sh

📋 Ручная установка

1. Установка зависимостей

# Клонируйте репозиторий
git clone <repository-url>
cd rzd

# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или
venv\Scripts\activate  # Windows

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

2. Настройка конфигурации

# Скопируйте файл конфигурации
cp env_example.txt .env

# Отредактируйте .env файл
nano .env

Обязательно укажите:

  • TELEGRAM_BOT_TOKEN - токен вашего бота от @BotFather
  • DATABASE_URL - URL подключения к PostgreSQL
  • REDIS_URL - URL подключения к Redis

3. Запуск с Docker (рекомендуется)

# Запустите все сервисы
docker-compose up -d

# Проверьте статус
docker-compose ps

# Просмотр логов
docker-compose logs -f bot

4. Запуск без Docker

# Терминал 1: Запуск бота
python run.py bot

# Терминал 2: Запуск Celery worker
python run.py worker

# Терминал 3: Запуск Celery beat (планировщик)
python run.py beat

Команды бота

  • /start - Начать работу с ботом (показывает главную клавиатуру)
  • /help - Помощь и инструкции
  • /subscriptions - Мои подписки
  • /add_subscription - Добавить подписку
  • /settings - Настройки
  • /status - Статус мониторинга
  • /cancel - Отменить текущую операцию

🎨 Удобный интерфейс

Главная клавиатура

После /start появляется постоянная клавиатура с основными функциями:

🚂 Мои подписки    ➕ Добавить подписку
⚙️ Настройки       📊 Статус
❓ Помощь          📋 Статистика

Пошаговое создание подписки (7 шагов)

  1. Станция отправления - ввод или выбор из списка
  2. Станция назначения - ввод или выбор из списка
  3. Дата поездки - ввод в формате ДД.ММ.ГГГГ
  4. Номер поезда - ввод или пропуск
  5. Тип места - выбор из кнопок (Плацкарт, Купе, СВ, Сидячие, Люкс)
  6. Время поездки - выбор времени (Утро, День, Вечер, Ночь)
  7. Частота проверки - выбор интервала (5, 10, 15, 30, 60 минут)

Интерактивные элементы

  • Inline кнопки для быстрого выбора
  • Reply клавиатура для основных действий
  • Контекстные меню для управления подписками
  • Эмодзи и форматирование для наглядности

Подробные примеры интерфейса: INTERFACE_EXAMPLES.md

Технические особенности

Архитектура

  • Backend: Python 3.11+ с python-telegram-bot
  • Database: PostgreSQL с SQLAlchemy ORM
  • Task Queue: Celery + Redis для фоновых задач
  • Web Scraping: requests + BeautifulSoup4 для парсинга РЖД
  • Deployment: Docker + Docker Compose

Компоненты системы

  • Telegram Bot API - интерфейс с пользователями
  • Web Scraper - парсинг сайта РЖД
  • Database - хранение подписок и пользователей
  • Scheduler - планировщик задач мониторинга
  • Notification Service - отправка уведомлений

Мониторинг и логирование

Просмотр логов

# Docker
docker-compose logs -f bot
docker-compose logs -f celery-worker

# Без Docker
tail -f logs/bot.log

Статистика

# Получение статистики мониторинга
python -c "
from src.tasks import get_monitoring_statistics
print(get_monitoring_statistics.delay().get())
"

Безопасность

  • Используйте сильные пароли для базы данных
  • Никогда не коммитьте .env файл
  • Ограничьте доступ к серверу
  • Регулярно обновляйте зависимости

📚 Документация

🛠️ Автоматические скрипты

Доступные скрипты:

  • install.sh - Полная автоматическая установка на Ubuntu
  • quick_start.sh - Быстрый запуск с Docker
  • create_env.sh - Создание конфигурации с токеном
  • setup_domain.sh - Настройка домена и SSL
  • fix_apt_pkg.sh - Исправление проблем с apt_pkg

Примеры использования:

# Полная установка (требует только токен бота)
./install.sh
# или от root
sudo ./install.sh

# Быстрый запуск
./create_env.sh && ./quick_start.sh

# Настройка для продакшена
sudo ./setup_domain.sh

🛠️ Устранение неполадок

Ошибка "ModuleNotFoundError: No module named 'apt_pkg'"

# Запустите скрипт исправления
./fix_apt_pkg.sh

# Или исправьте вручную
sudo apt install --reinstall python3-apt
sudo apt update

Бот не отвечает

# Проверьте токен
grep TELEGRAM_BOT_TOKEN /home/rzdbot/rzd-bot/.env

# Проверьте логи
tail -f /home/rzdbot/rzd-bot/logs/bot.log

# Проверьте статус сервисов
systemctl status rzd-bot

Поддержка

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

  1. Проверьте логи системы
  2. Изучите документацию
  3. Используйте скрипты диагностики
  4. Используйте скрипт fix_apt_pkg.sh для исправления проблем с apt
  5. Создайте issue в репозитории

Важно: Этот бот предназначен только для личного использования. Соблюдайте условия использования сайта РЖД и не злоупотребляйте частотой запросов.

Проект полностью реализован с автоматическими скриптами установки и готов к использованию.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages