Telegram-бот для ежедневной рассылки расписания занятий РЭУ им. Плеханова.
- 📚 Автоматическая рассылка расписания каждое утро в 7:00 МСК
- 🔍 Получение расписания по запросу
/schedule - 🏫 Поддержка любых групп с rasp.rea.ru
- 📊 Встроенная аналитика (DAU, события, статистика)
- ⚡ Оптимизация ресурсов: кэширование, пакетная загрузка по группам
Получи токен у @BotFather в Telegram.
# Клонировать репозиторий
git clone https://github.com/BOSSincrypto/rea-schedule-bot.git
cd rea-schedule-bot
# Установить зависимости
pip install .
# Установить токен
export TELEGRAM_BOT_TOKEN=your-token-here
# Запустить
python -m bot.maindocker build -t rea-schedule-bot .
docker run -d \
-e TELEGRAM_BOT_TOKEN=your-token \
-v bot-data:/data \
rea-schedule-bot# Установить flyctl: https://fly.io/docs/flyctl/install/
flyctl auth login
# Создать приложение
flyctl launch --no-deploy
# Создать том для БД
flyctl volumes create bot_data --size 1 --region ams
# Установить токен
flyctl secrets set TELEGRAM_BOT_TOKEN=your-token
flyctl secrets set ADMIN_CHAT_ID=your-telegram-id
# Деплой
flyctl deploy| Команда | Описание |
|---|---|
/start |
Начать работу |
/schedule |
Расписание на сегодня |
/group |
Показать текущую группу |
/unsubscribe |
Отписаться от рассылки |
/help |
Справка |
/stats |
Статистика (только админ) |
/cleanup |
Очистка старой аналитики (только админ) |
bot/
├── main.py — Точка входа, polling + APScheduler
├── handlers.py — Обработчики команд Telegram
├── parser.py — Парсинг HTML расписания + кэш
├── scheduler.py — Ежедневная пакетная рассылка
└── database.py — SQLite (WAL mode) + аналитика
- Кэширование: расписание кэшируется на 30 мин — одинаковые группы не загружаются повторно
- Пакетная рассылка: расписание загружается один раз на группу, затем отправляется всем подписчикам
- SQLite WAL: минимальные блокировки при параллельном чтении/записи
- Memory-bounded cache: автоматическая очистка при > 100 записей
- Аналитика с TTL: старые записи автоматически удаляются (90 дней)
| Переменная | Обязательная | Описание |
|---|---|---|
TELEGRAM_BOT_TOKEN |
Да | Токен бота от BotFather |
ADMIN_CHAT_ID |
Нет | Telegram ID админа для /stats |
DB_PATH |
Нет | Путь к SQLite файлу (по умолчанию: data/bot.db) |
MIT