Skip to content

Проектная (учебная) практика, 1 курс ИТ-направления. Телеграм-бот для навигации по кампусам МосПолитеха с интерактивными видео-маршрутами до любого кабинета.

Notifications You must be signed in to change notification settings

EDeev/mospoly-helper

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

МосПолиХелпер 🎓

Телеграм-бот для навигации по кампусам Московского Политехнического Университета

Python Aiogram MoviePy Bot License

📋 Описание

МосПолиХелпер — это практическое решение реальной проблемы ориентирования в кампусах Московского Политехнического Университета. Бот разработан студентами для студентов и предоставляет интерактивные видео-маршруты до любого кабинета в пяти основных кампусах университета.

Проект создан в рамках проектной практики и демонстрирует применение современных технологий для решения повседневных задач студенческой жизни.

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

  • 🗺️ Интерактивная навигация по 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 — Построить маршрут до кабинета

Использование

  1. Запустите бота командой /start
  2. Выберите команду /route
  3. Укажите кампус из предложенного списка
  4. Введите номер кабинета в точном формате
  5. Выберите тип маршрута (от территории или от входа в корпус)
  6. Получите видео с маршрутом

🛠️ Архитектура и технический стек

🧩 Технологии

Компонент Технология Версия Назначение
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: стабильное интернет-соединение

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

  1. Клонирование репозитория
git clone https://github.com/EDeev/mospoly-helper.git cd mospoly-helper
  1. Установка Python-зависимостей
pip install -r requirements.txt
  1. Установка FFmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

macOS (с Homebrew):

brew install ffmpeg

Windows: Скачайте с официального сайта и добавьте в PATH

⚙️ Конфигурация

  1. Создание Telegram бота

    • Перейдите к @BotFather
    • Создайте нового бота командой /newbot
    • Сохраните полученный токен
  2. Настройка конфигурации

# config.py BOT_TOKEN = "YOUR_BOT_TOKEN_HERE" # Замените на ваш токен
  1. Создание структуры каталогов
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 — оптимальный баланс качества и размера файла

⚡ Система кеширования

Двухуровневое кеширование:

  1. Полные маршруты (*-all.mp4) — от входа на территорию
  2. Короткие маршруты (*-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%

📦 combine.py — Пакетная генерация кеша

Утилита для предварительной генерации видеомаршрутов:

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

Научное руководство:

  • Куратор практики: Баринова Наталья Владимировна
  • Кураторы проектной деятельности: Киреева Галина Ивановна, Будылина Евгения Александровна

📞 Поддержка и контакты

🆘 Получение помощи

Официальные каналы поддержки:

  1. 📧 Email: support@new-devs.ru

    • Время ответа: 24-48 часов
    • Для технических вопросов и предложений
  2. 🐙 GitHub Issues: Создать issue

    • Для сообщений об ошибках и feature requests
    • Публичное обсуждение и tracking

📄 Лицензия и правовая информация

Этот проект создан в учебных целях как работа по дисциплине "Проектной практики" в Московском Политехническом Университете, 2024-2025 учебный год.


МосПолиХелпер — делаем навигацию в университете простой и понятной! 🎓✨

Создано с ❤️ студентами МосПолитеха для студенческого сообщества

About

Проектная (учебная) практика, 1 курс ИТ-направления. Телеграм-бот для навигации по кампусам МосПолитеха с интерактивными видео-маршрутами до любого кабинета.

Topics

Resources

Stars

Watchers

Forks

Languages

  • HTML 68.5%
  • CSS 21.6%
  • Python 7.5%
  • JavaScript 2.4%