Telegram-бот на aiogram для поиска поездов РЖД и подписки на уведомления о появлении мест. Поддерживает пошаговую настройку поиска в одном прогресс-сообщении, хранит состояние в SQLite и умеет присылать уведомления при появлении мест.
Ссылка на бота: @rzd_train_search_bot
Содержание
- Пошаговый поиск: выбор станции отправления → назначения → даты → поезда
- Аккуратный интерфейс: всегда одно прогресс-сообщение, лишние сообщения удаляются
- Подписки: мониторинг наличия мест с заданным интервалом, уведомления в Telegram
- SQLite: хранение подписок и состояния пользователя
- Готовность к CI: GitHub Actions для автозапуска тестов
💡 Подсказка: бот поддерживает как быстрый разовый поиск, так и длительные мониторинги с уведомлениями о появлении мест.
bot.py: точка входа; инициализация aiogram, роутеров и мониторингаhandlers/: обработчики команд (CommandsHandler) и поиска (SearchHandler)services/: интеграции с внешними сервисамиrzd_api.py: работа с публичными API РЖДnotification.py: отправка/редактирование/удаление сообщений Telegram Bot APImonitoring.py: периодическая проверка активных подписок
database/: модели (models.py) и менеджер БД (manager.py)config.py: конфигурация через .env (python-dotenv) с дефолтамиtests/: pytest (unit + integration)
- Python 3.10+
- Зависимости из
requirements.txt:- aiogram, aiohttp, requests, python-dotenv, pytest
- Установите зависимости
python -m pip install -r requirements.txt
- Создайте файл
.envв корне (или выполнитеpython setup.py, он создаст шаблон)
BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrSTUvwxYZ
DATABASE_PATH=data/train_subscriptions.db
Дополнительно поддерживаются переменные (опционально):
MONITORING_INTERVAL(по умолчанию 300)MAX_MESSAGE_LENGTH(4000)MAX_CALLBACK_DATA_LENGTH(64)MAX_STATIONS_PER_SEARCH(10)MIN_QUERY_LENGTH(2)MAX_TRAINS_PER_RESULT(10)RZD_API_URL,RZD_SUGGEST_URL,USER_AGENT
- Запуск бота
python bot.py
⚠️ Важно: для работы интеграционных тестов требуется доступ к публичным API РЖД; они отключены по умолчанию.
- Юнит-тесты:
pytest
- Интеграционные тесты (выполняют реальные запросы к API РЖД) отключены по умолчанию. Чтобы включить:
RUN_INTEGRATION_TESTS=1 pytest
- GitHub Actions:
.github/workflows/ci.yml- Устанавливает зависимости
- Создает
.envсBOT_TOKENиз Secrets - Запускает
pytest(интеграционные отключены)
- Быстрый старт:
QUICK_START.md - Сводка проекта:
PROJECT_SUMMARY.md
- При каждом выборе/вводе бот удаляет сообщения пользователя и варианты, оставляя одно прогресс-сообщение с текущим состоянием и следующей подсказкой
- Если в callback приходит только код станции, бот подставляет корректное название по коду через API
MIT (по умолчанию). При необходимости добавьте файл LICENSE и обновите раздел.