О чем эта статья

Хочу поделиться историей создания Telegram‑бота, который изменил мой подход к домашнему кинотеатру.

Все началось с банальной лени — мне надоело каждый раз заходить на компьютер, искать торрент, скачивать фильм, а потом думать, как его передать на телевизор.

Идея была простая: что если можно будет просто отправить ссылку в Telegram и получить готовый к просмотру фильм?

Это работает благодаря связке Telegram‑бота и DLNA — технологии, которая позволяет смотреть скачанные фильмы на любом устройстве в вашей домашней сети.

В этой статье я расскажу, как из простой идеи вырос медиа‑сервер с DLNA, как я переходил с Python на Go и почему теперь этим ботом пользуется вся моя семья и гости.

Исходный код проекта доступен на GitHub: [telegram‑media‑server]

Мотивация

Идея создания Telegram-бота для управления медиа-файлами для домашнего кинотеатра возникла у меня достаточно давно.

Основана она на банальной лени делать всё это вручную.

Мне хотелось иметь сервис, который позволит в один-два клика скачать фильм или видео и сразу запустить его на телевизоре через DLNA.

Так как телевизор у меня довольно старый и менять его не особо хочется, флоу просмотра кино был такой:

  • Зайти на стационарный компьютер

  • Найти фильм или видео

  • Поставить на загрузку (торрент или сервисы скачивания видео)

  • После загрузки выбрать способ передачи на телевизор:

    - Перекинуть на флешку

    - Настроить DLNA-сервер на компьютере и получать контент с него

Что такое DLNA?

DLNA (Digital Living Network Alliance) — это технология, которая позволяет устройствам в одной локальной сети обмениваться мультимедийным контентом. Благодаря DLNA фильмы и видео, скачанные ботом, становятся сразу доступны для просмотра на телевизоре, медиаплеере или даже игровой приставке без лишних настроек.

При всём многообразии медиасерверов, которые существуют, мне ни один не понравился. Их либо просто нельзя настроить для моего старого телевизора, либо они казались мне не особенно удобными.

В любом случае ни у одного из них я не нашёл Telegram-бота, который позволил бы мне в один-два клика поставить на скачку пиратский фильм из торрента или скачать видео с YouTube.

Обычно у медиасерверов есть доступ для запуска видео с YouTube прямо в них, но, во-первых, они видео не скачивают целиком, а просто транслируют. Это в наших реалиях требует подключения прокси или дополнительных настроек, причём желательно с настройкой его только для YouTube, а не всего трафика.

Исходя из этих проблем, появилась идея использовать для управления медиа-файлами Telegram-бота. Telegram есть у каждого человека под рукой и имеет отличное API для создания на его основе ботов.

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

Пример интерфейса и отправки ссылки на видео
Пример интерфейса и отправки ссылки на видео
Пример динамического списка для удаления медиафайлов
Пример динамического списка для удаления медиафайлов

Функционал

Какой функционал у меня получилось в него добавить:

  • Скачивание контента

    Скачивание фильмов из торрент‑файлов

    Скачивание потокового видео с сайтов (например, YouTube, VK, RuTube — и этим список не ограничивается благодаря утилите yt‑dlp)

  • Автоматическая перекодировка

    Автоматическая перекодировка видео через ffmpeg — если ваш телевизор не поддерживает исходный формат или кодек, бот сам перекодирует видео в подходящий формат.

    Это особенно полезно для старых моделей телевизоров, чтобы видео гарантированно запускалось (пока только для потоковых видео).

  • Мониторинг

    Мониторинг загрузки (бот присылает уведомления о скачивании, можно посмотреть процент загрузки медиа‑файла)

  • Управление файлами

    Получение списка всех скачанных медиа и удаление их по нажатию кнопки меню

  • Проксирование

    Проксирование трафика с конкретных доменов — например, можно настроить только для YouTube

  • Роли и доступы

    Ролевая система и админка, которая позволяет выдавать временный доступ к боту (например, вашим гостям)

Теперь мой флоу просмотра кино на домашнем телевизоре сводится к поиску торрента или ссылки на видео, отправки его боту и ожиданию, пока мне придёт сообщение, что всё готово к просмотру через DLNA.

Как работает бот

Бот использует простую систему ролей с парольной защитой. Для начала работы нужно авторизоваться командой:

/login <password>

Доступные роли:

Роль

Пароль

Возможности

Администратор

ADMIN_PASSWORD

Полный доступ, включая выдачу временных паролей

Обычный пользователь

REGULAR_PASSWORD

Все функции, кроме управления временными доступами

Временный пользователь

Временный пароль

Только добавление ссылок для загрузки

Основные команды:

Кроме удобных кнопок, бот поддерживает команды, которые интуитивно понятны для пользователей Linux:

Команда

Описание

Пример

/start

Приветственное сообщение

/start

/login <password>

Авторизация пользователя

/login mypassword123

/ls

Просмотр всех скачанных медиа

/ls

/rm <id>

Удаление медиа по ID

/rm 1

/rm all

Удаление всех загрузок

/rm all

/temp <время>

Выдача временного доступа (только админ)

/temp 1d

Примеры использования

  1. Авторизуемся в боте

  2. Отправляем ссылку на видео или торрент файл

  3. Отслеживаем прогресс через список фильмов

  4. Получаем сообщение о завершении

Благодаря менеджеру загрузок в боте можно скачивать сразу несколько торрент-файлов или видео. Бот также умеет работать с сериалами и сразу после загрузки удалять временные файлы, сохраняя свободное место на диске.

Временные доступы для гостей

Существует возможность выдавать временные пароли гостям:

# Выдать доступ на 1 день

/temp 1d

# Выдать доступ на 3 часа  

/temp 3h

# Выдать доступ на 30 минут

/temp 30m

Бот генерирует временный пароль, который можно передать гостю. Гость авторизуется этим паролем и может добавлять ссылки для загрузки, но не может управлять загрузками других пользователей.

Поддерживаемые сервисы

Бот поддерживает все сервисы, совместимые с yt-dlp:

Многоязычность

Бот поддерживает русский и английский языки интерфейса. Управлять выбором языка можно в файле конфигурации .env через параметр LANG:

# Русский язык

LANG=ru

# Английский язык  

LANG=en

При необходимости легко добавить поддержку других языков, создав соответствующие файлы локализации.

Подробная документация по установке и настройке в [репозитории проекта].

Железо

OrangePi zero 3
OrangePi zero 3

Разрабатывая этого бота, было желание запускать его на любом слабом оборудовании, например, на BeagleBone Green. И тут возникли проблемы.

Изначально бот разрабатывался на Python, так как это основной мой стек разработки. Но уже почти на финальном этапе, когда надо было выбрать, на чём бот будет крутиться, стало понятно, что Python был не тем языком, который хорошо подходил для любого оборудования.

В частности, возникли проблемы выбора библиотек для скачивания медиа, чтобы они были доступны для любой ОС и архитектуры. Кроме этого, было желание кросс-компиляции бота под разные архитектуры и распространения уже готовых бинарников.

Стало понятно, что мой основной стек не особо подходит для этой задачи, и начался поиск других возможных языков для реализации.

Немного подумав и поискав, был найден, как мне казалось, идеальный язык для реализации моей идеи. Это был Golang, который я, правда, пока не знал и никогда на нём не писал. Было решено бота переписать полностью на него.

Конечно, на первом месте было желание автора попробовать что-то новое, но были и вполне конкретные плюсы у этого языка:

Преимущества Go

  • Кросс-компиляция под любую архитектуру

    Большая часть языков программирования в общем-то так и работает, но первое, что приходит на ум — это C или C++. Но на этих языках не сказать, что очень комфортно писать Telegram-бота из-за громоздкости синтаксиса и необходимости писать почти всё с нуля. В этом плане Golang сильно от них отличается. На нём было очень комфортно писать из-за наличия почти всех нужных вещей в стандартной библиотеке.

    Кроме того, в случае если не использовать в программе библиотеки, которые под капотом написаны на C/C++, то собранный в Golang бинарник не зависит даже от glibc.

  • Низкий порог входа и своя экосистема

    Потратив несколько недель на изучение основ языка, можно написать вполне недурный сервис. Это благодаря тому, что язык предоставляет не только сам язык, но ещё встроенные линтеры, форматтеры и очень удобный пакетный менеджер с фиксацией всех зависимостей. Тогда как, например, в Python мне пришлось бы для этого использовать несколько сторонних программ (poetry, flake8, isort, black и т.п.).

  • Скорость и небольшая потребность в ресурсах

    Golang — довольно быстрый язык программирования и, по ощущениям, не очень требовательный к оперативной памяти.

    Будучи ограниченным на BeagleBone Green 512 МБ памяти и очень слабым процессором, выбирать для этого Python было не очень разумно изначально.

В итоге бот был полностью переписан, и дописаны новые фичи, которых в Python-боте не было.

К сожалению, запустить бот на BeagleBone Green так и не получилось из-за уж слишком маленького объёма оперативной памяти, которая вся уходила при вызове сторонних утилит. Однако бот всё ещё должен работать на любом оборудовании с хотя бы гигабайтом оперативной памяти и операционной системой Linux. Довольно долгое время он у меня работал на OrangePi zero 3, которая прекрасно справлялась с нагрузкой, хотя стоит всего 3к рублей.

Заключение

Это был довольно интересный и полезный для меня проект.

На выходе я получил опыт разработки на Golang и удобный инструмент в быту, который автоматически скачивает медиа и делает его доступным через DLNA. Получившийся бот вроде бы не стыдно показать другим людям, и, может, даже кто-то ещё захочет этим пользоваться.

Если вас заинтересовал этот проект, вы можете установить бота и попробовать его в действии: [telegram-media-server].

Комментарии (5)


  1. hurtavy
    21.07.2025 03:51

    Название громкое, а в тексте так и не нашёл создание DNLA сервера на основе бота...


    1. GritsanY
      21.07.2025 03:51

      да, название некорректное, это скорее доступ к торрент-качалке через телеграм с ролевым доступом


  1. AuToMaton
    21.07.2025 03:51

    Было очень интересно, но не понял.

    Если есть сервер, то есть доступ и через консоль и через браузер, бот зачем? Если нет сервера, то разве в Телеграмм есть хостинг? У самого Телеграмма нет, так что может и есть а я не заметил, на в anvil.works хостинг точно есть и есть возможность связать код на Python выполняющийся на разных устройствах, тот же обмен сообщениями через мессенджер, только лучше. Я бы ещё обратил внимание на Obsidian - вполне себе среда выполнения произвольного JavaScript на любом устройстве.

    Пользуйте Телеграмм - не смотрите наверх?


  1. FranCOder
    21.07.2025 03:51

    Проще купить свисток (tv stick) для старых телевизоров


  1. Zeus42
    21.07.2025 03:51

    Не плохо, однако хотелось бы узнать больше про всю архитектуру проекта, а не только телеграмм бота. Возможно есть способ сделать это эффективнее, например.