Телеграм-бот для навигации по кампусам Московского Политехнического Университета
МосПолиХелпер — это практическое решение реальной проблемы ориентирования в кампусах Московского Политехнического Университета. Бот разработан студентами для студентов и предоставляет интерактивные видео-маршруты до любого кабинета в пяти основных кампусах университета.
Проект создан в рамках проектной практики и демонстрирует применение современных технологий для решения повседневных задач студенческой жизни.
- 🗺️ Интерактивная навигация по 5 кампусам МосПолитеха
- 🎥 Динамические видео-маршруты от входа на территорию или от входа в корпус
- ⚡ Мгновенная отдача готовых маршрутов благодаря интеллектуальному кешированию
- 📱 Интуитивный интерфейс с адаптивными inline-кнопками
- 🔄 Автоматическая обработка видео с оптимизацией для Telegram (H.264, битрейт 1500k)
- 🚀 Высокая производительность — время отклика менее 5 секунд для кешированных маршрутов
- 📊 Умная валидация входных данных с подсказками пользователю
| Кампус | Код | Формат номера кабинета | Пример |
|---|---|---|---|
| Большая Семёновская | bs |
[корпус][этаж]-[номер] | а1-01, б2-15 |
| Павла Корчагина | pk |
пк[корпус][этаж][номер] | пк1201, пк2315 |
| Прянишникова | pr |
пр[корпус][этаж][номер] | пр1101, пр2208 |
| Михалковская | mi |
м[корпус][этаж][номер] | м1205, м3110 |
| Автозаводская | av |
ав[корпус][этаж][номер] | ав2301, ав1105 |
📝 Важно: Указывайте номер кабинета точно в том формате, как он указан в личном кабинете или расписании
/start— Приветствие и инструкции/help— Справка по командам/route— Построить маршрут до кабинета
- Запустите бота командой
/start - Выберите команду
/route - Укажите кампус из предложенного списка
- Введите номер кабинета в точном формате
- Выберите тип маршрута (от территории или от входа в корпус)
- Получите видео с маршрутом
| Компонент | Технология | Версия | Назначение |
|---|---|---|---|
| Backend | Python | 3.10+ | Основной язык разработки |
| Bot Framework | Aiogram | 3.0.0 | Асинхронная работа с Telegram Bot API |
| Video Processing | MoviePy | 1.0.3 | Обработка и монтаж видеофрагментов |
| Video Encoding | FFmpeg | latest | Кодирование и оптимизация видео |
| Data Storage | JSON | native | Хранение пользовательских сессий |
| State Management | MemoryStorage | aiogram | Управление состояниями пользователей |
src/code/
├── bot.py # 🚀 Точка входа и координация приложения
├── config.py # ⚙️ Конфигурационные параметры
├── database.py # 💾 Управление пользовательскими данными
├── handlers.py # 🎛️ Обработчики команд и callback'ов
├── init.py # 🔧 Инициализация компонентов бота
├── scripts.py # 🎬 Обработка видео и формирование маршрутов
└── combine.py # 🔄 Утилита для предварительной генерации кеша
Принципы проектирования:
- Single Responsibility — каждый модуль отвечает за конкретную задачу
- Dependency Injection — слабая связанность между компонентами
- Async/Await — асинхронная обработка для высокой производительности
- Error Handling — корректная обработка ошибок на всех уровнях
📦 mospoly-helper/
├── 📂 src/code/ # Исходный код
├── 📂 data/ # Рабочие данные
│ ├── 📂 cache/ # Сгенерированные видеомаршруты
│ │ ├── 📄 *-all.mp4 # Полные маршруты (от территории)
│ │ └── 📄 *-small.mp4 # Короткие маршруты (от входа в корпус)
│ ├── 📂 users/ # JSON-файлы сессий пользователей
│ │ └── 📄 {user_id}.json # Данные конкретного пользователя
│ └── 📂 videos/ # Библиотека исходных видеофрагментов
│ ├── 📂 av/ # Автозаводская
│ │ ├── 📂 buildings/ # Видео от входа до корпуса
│ │ ├── 📂 floors/ # Видео по этажам
│ │ └── 📂 offices/ # Видео до конкретных кабинетов
│ ├── 📂 bs/ # Большая Семёновская
│ ├── 📂 mi/ # Михалковская
│ ├── 📂 pk/ # Павла Корчагина
│ └── 📂 pr/ # Прянишникова
└── 📂 logs/ # Журналы работы (рекомендуется)
- OS: Linux (Ubuntu 20.04+), macOS, Windows 10+
- Python: 3.10 или выше
- RAM: минимум 2 ГБ (рекомендуется 4 ГБ)
- Storage: минимум 10 ГБ для видеофрагментов и кеша
- Network: стабильное интернет-соединение
- Клонирование репозитория
git clone https://github.com/EDeev/mospoly-helper.git
cd mospoly-helper- Установка Python-зависимостей
pip install -r requirements.txt- Установка FFmpeg
Ubuntu/Debian:
sudo apt update && sudo apt install ffmpegmacOS (с Homebrew):
brew install ffmpegWindows: Скачайте с официального сайта и добавьте в PATH
-
Создание Telegram бота
- Перейдите к @BotFather
- Создайте нового бота командой
/newbot - Сохраните полученный токен
-
Настройка конфигурации
# config.py
BOT_TOKEN = "YOUR_BOT_TOKEN_HERE" # Замените на ваш токен- Создание структуры каталогов
mkdir -p data/{cache,users,videos/{av,bs,mi,pk,pr}/{buildings,floors,offices}}
mkdir -p logsОсновной режим:
cd src/code
python bot.pyС логированием:
python bot.py 2>&1 | tee ../../logs/bot.logПредварительная генерация кеша (опционально):
python combine.py # Генерирует кеш для всех доступных маршрутовСистема обработки видео использует продвинутые техники оптимизации:
# Параметры кодирования (scripts.py)
full_clip.write_videofile(
filename,
fps=30, # Оптимальная частота кадров
codec="libx264", # Эффективный кодек H.264
bitrate="1500k", # Баланс качество/размер
preset="fast", # Быстрое кодирование
ffmpeg_params=["-crf", "23"] # Constant Rate Factor для качества
)Применяемые оптимизации:
- ✂️ Удаление аудиодорожки — экономия 30-40% размера файла
- ⏩ Ускорение в 2 раза — сокращение времени просмотра
- 📐 Изменение разрешения до 400px — оптимизация для мобильных устройств
- 🗜️ CRF 23 — оптимальный баланс качества и размера файла
Двухуровневое кеширование:
- Полные маршруты (
*-all.mp4) — от входа на территорию - Короткие маршруты (
*-small.mp4) — от входа в корпус
Алгоритм проверки кеша:
# Проверка существования готового файла
cache_path = f"../data/cache/{route_id}-{'all' if full_route else 'small'}.mp4"
if os.path.exists(cache_path):
return cache_path # Мгновенная отдача
else:
return await make_full_clip(video_segments) # Генерация нового| Метрика | Кешированный маршрут | Новый маршрут |
|---|---|---|
| Время отклика | < 3 секунды | 15-30 секунд |
| Размер файла | 2-8 МБ | аналогично |
| Качество видео | 400p, 30fps | аналогично |
| Нагрузка на CPU | минимальная | высокая |
| Компонент | До оптимизации | После оптимизации | Улучшение |
|---|---|---|---|
| Размер видео | 15-25 МБ | 2-8 МБ | 🔻 70% |
| Время генерации | 45-60 сек | 15-30 сек | 🔻 50% |
| Время отдачи (кеш) | N/A | < 3 сек | ⚡ мгновенно |
| Использование RAM | 200-300 МБ | 100-150 МБ | 🔻 40% |
Утилита для предварительной генерации видеомаршрутов:
async def combine_all_videos():
"""
Массовая генерация кеша для всех доступных маршрутов
Обрабатывает:
- Все корпуса: pr, pk, mi, av, bs
- Полные и короткие маршруты для каждого кабинета
- Пропускает несуществующие видеофрагменты
"""
corpora = ["pr", "pk", "mi", "av", "bs"]
for corpus in corpora:
offices_path = f"../videos/{corpus}/offices"
for video_file in os.listdir(offices_path):
# Генерация полного маршрута
await make_full_clip([building_path, floor_path, office_path])
# Генерация короткого маршрута
await make_full_clip([floor_path, office_path])Использование:
cd src/code
python combine.py # Запуск в фоновом режиме для больших объемовПроект создан в рамках проектной практики студентами группы 241-327 направления "Системная и программная инженерия":
| Участник | Роль | Вклад | Контакты |
|---|---|---|---|
| Деев Егор Викторович | Tech Lead & Backend Developer | Архитектура системы, обработка видео, оптимизация производительности | @EDeev |
| Сапрыкин Пётр Иванович | Frontend & UX Developer | Пользовательский интерфейс, логика взаимодействия, тестирование | @PetrSaprykin |
| Старков Руслан Владимирович | DevOps & QA Engineer | Развертывание, мониторинг, обеспечение качества | @RayStar-k |
Научное руководство:
- Куратор практики: Баринова Наталья Владимировна
- Кураторы проектной деятельности: Киреева Галина Ивановна, Будылина Евгения Александровна
Официальные каналы поддержки:
-
📧 Email: support@new-devs.ru
- Время ответа: 24-48 часов
- Для технических вопросов и предложений
-
🐙 GitHub Issues: Создать issue
- Для сообщений об ошибках и feature requests
- Публичное обсуждение и tracking
Этот проект создан в учебных целях как работа по дисциплине "Проектной практики" в Московском Политехническом Университете, 2024-2025 учебный год.
Создано с ❤️ студентами МосПолитеха для студенческого сообщества