Этот проект представляет собой полнофункциональный 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.
-
Функциональные требования:
- Регистрация и управление подписками
- Параметры поиска билетов (станции, дата, поезд, тип места)
- Мониторинг и уведомления
- Удобный интерфейс бота
-
Технические требования:
- Python 3.8+ с использованием python-telegram-bot или aiogram
- Web scraping сайта РЖД
- PostgreSQL/SQLite для хранения данных
- Celery + Redis для фоновых задач
- Docker для развертывания
-
Архитектура:
- Telegram Bot API
- Web Scraper для парсинга РЖД
- Database для хранения подписок
- Scheduler для планирования задач
- Notification Service для уведомлений
# Скачайте и запустите скрипт установки
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)
- ✅ Настроит систему и сервисы
- ✅ Создаст пользователя и директории
- ✅ Запросит токен бота у пользователя
- ✅ Настроит базу данных и конфигурацию
- ✅ Запустит все сервисы
Вам нужно только:
- Получить токен бота у @BotFather в Telegram
- Ввести токен когда запросит скрипт
- Дождаться завершения установки
# 1. Создайте конфигурацию
./create_env.sh
# 2. Запустите с Docker
./quick_start.sh# После полной установки
sudo ./setup_domain.sh# Клонируйте репозиторий
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# Скопируйте файл конфигурации
cp env_example.txt .env
# Отредактируйте .env файл
nano .envОбязательно укажите:
TELEGRAM_BOT_TOKEN- токен вашего бота от @BotFatherDATABASE_URL- URL подключения к PostgreSQLREDIS_URL- URL подключения к Redis
# Запустите все сервисы
docker-compose up -d
# Проверьте статус
docker-compose ps
# Просмотр логов
docker-compose logs -f bot# Терминал 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 появляется постоянная клавиатура с основными функциями:
🚂 Мои подписки ➕ Добавить подписку
⚙️ Настройки 📊 Статус
❓ Помощь 📋 Статистика
- Станция отправления - ввод или выбор из списка
- Станция назначения - ввод или выбор из списка
- Дата поездки - ввод в формате ДД.ММ.ГГГГ
- Номер поезда - ввод или пропуск
- Тип места - выбор из кнопок (Плацкарт, Купе, СВ, Сидячие, Люкс)
- Время поездки - выбор времени (Утро, День, Вечер, Ночь)
- Частота проверки - выбор интервала (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файл - Ограничьте доступ к серверу
- Регулярно обновляйте зависимости
- AUTO_INSTALL.md - Автоматические скрипты установки
- README_DEPLOYMENT.md - Подробное руководство по развертыванию
- INTERFACE_EXAMPLES.md - Примеры интерфейса бота
- TECHNICAL_SPECIFICATION.md - Техническое задание
install.sh- Полная автоматическая установка на Ubuntuquick_start.sh- Быстрый запуск с Dockercreate_env.sh- Создание конфигурации с токеномsetup_domain.sh- Настройка домена и SSLfix_apt_pkg.sh- Исправление проблем с apt_pkg
# Полная установка (требует только токен бота)
./install.sh
# или от root
sudo ./install.sh
# Быстрый запуск
./create_env.sh && ./quick_start.sh
# Настройка для продакшена
sudo ./setup_domain.sh# Запустите скрипт исправления
./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При возникновении проблем:
- Проверьте логи системы
- Изучите документацию
- Используйте скрипты диагностики
- Используйте скрипт
fix_apt_pkg.shдля исправления проблем с apt - Создайте issue в репозитории
Важно: Этот бот предназначен только для личного использования. Соблюдайте условия использования сайта РЖД и не злоупотребляйте частотой запросов.
Проект полностью реализован с автоматическими скриптами установки и готов к использованию.