Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон.
С помощью бота вы получите привычный и удобный интерфейс для взаимодействия с торрент трекером Кинозал, а также возможность управлять торрент клиентом qBittorrent или Transmission на вашем компьютере, находясь удаленно от дома. В отличии от других приложений, предназначенных для удаленного управления торрент клиентами, вам не нужно находиться в той же локальной сети или использовать VPN.
На базе бота реализован новостной канала 📢 Kinozal-News, который генерирует посты на основе новых публикаций в торрент трекере Кинозал с фильтрацией по рейтингу (7.0+) и году выхода (2023+). Каждый пост содержит краткую информацию о раздаче (год выхода, страна производства, рейтинг, качество и перевод), а также #хештеги
по жанру для фильтрации контента на канале и кнопки с ссылками описания фильма или сериала в базах данных о кинематографе Кинопоиск и IMDb, бесплатный онлайн просмотр через плееры
-
Telegram бот для доставки торрент контента с телефона до телевизора.
-
Telegram бот для управления торрент клиентом и интеграция с трекером.
Например, пока вы едите домой с работы, у вас появляется возможность подобрать фильм или сериал в обширной базе Кинозал прямиком с вашего телефона, или, найти что-то новое на канале Kinozal-News, после чего сразу загрузить выбранное на ваш компьютер и автоматически или через бот синхронизировать данные с Plex Media Server. По приходу домой, вам остается только открыть приложение Plex на вашем телевизоре и начать просмотр 📺🍿.
Такой подход также применим для передачи управления по подбору контента другому члену семьи, это особенно актуально, если у вас один компьютер, который может быть занят или к нему нет прямого доступа. Разобраться в интерфейсе бота проще, чем использовать все сервисы по отдельности, и главное, куда быстрее 🐸.
🔌 Бот (серверная часть) протестирован и работает в виртуальной среде Hyper-V / VMWare на системе Debian 10.13 / Ubuntu 20.04 и выше (возможен запуск на системе Windows через интерпретатор Git Bash или MobaXterm) для удаленного управления приложениями, установленные в домашней системе Windows или Linux*. Хранение торрент-файлов происходит в системе, на которой запущен бот.
* Проверка удаленного управления приложениями на системе Linux не произодилась. Так как весь стек приложений является кросс-платформенным и имеет единую схему для удаленного взаимодействия через
API
, все должно работать точно также.
- ✅ Интерфейс для взаимодействия с торрент трекером Кинозал. Поиск раздач с фильтрацией по году выхода и формату разрешения (HD/FullDH/4K), подробная информации о каждой раздачи, содержимое раздачи, загрузка торрент файлов, поиск актеров и получение его фильмографии.
- ✅ Централизованное управление загруженными торрент файлами (.torrent) на сервере, с возможностью выгрузки в Telegram.
- ✅ Интерфейс удаленного управления торрент клиентом qBittorrent. Добавление раздач на загрузку из торрент файла, инфо хеш (передается в каждой публикации новостного канала и при поиске раздач в боте) а также через url торрент файла, получение подробной информации о загрузке (скорость загрузки, статус, пиры, сиды и т.д.), пауза и возобновление загрузки, проверка на целостность, принудительно анонсировать, переключение лимитов скорости, управление приоритетом отдельных файлов, удаление торрента и содержимого раздачи из системы.
- ✅ Интерфейс управления торрент клиентом Transmission. Добавление раздач на загрузку из торрент файла, инфо хеш или url, получение подробной информации о загрузке, пауза и возобновление загрузки, управление приоритетом отдельных файлов, удаление торрента и содержимого раздачи.
- ✅ Синхронизация контента с Plex Media Server, а также просмотр содержимого директорий и дочерних файлов.
- ✅ Получение дополнительной информации о фильме и сериале из The Movie Database (TMDB). Список актеров и сезонов для каждого сериала, список серий в каждом сезоне, дата выхода сезонов и серий, а также получение подробной информации о каждой серии и список приглашенных актеров.
Добавление торрента по 🧲 hash-сумме и 🌐 url-адресу торрент файла (без загрузки самого файла) возможно из любого источника (торрент трекера). По мимо загрузки, это также дает возможность сформировать и сохранить торрент файл на сервере с полученными метаданными через торрент клиент qBittorrent или Transmission, который можно выгрузкой в Telegram, для дальнейшей загрузки через ваш торрент клиент на телефоне.
- Telegram api;
- qBittorrent WebUI api;
- Transmission RPC api;
- Plex Media Server api (не содержит официальной документации);
- TMDB api.
Зависимости:
- jqlang для обработки данных в формате json;
- Клиентское приложение VPN через Proxy-сервер или обратный прокси сервер (например, Reverse Proxy .NET) для доступа в Кинозал и TMDB (опционально).
Серверная часть написана на чистом Bash и использует стандартный набор unix-утилит. Вы можете настроить и управлять любым торрент клиентом независимо от настройки или работоспособности трекера Кинозал, или наоборот, использовать интерфейс Кинозал для поиска раздач и выгрузки торрент файлов в Telegram.
- Загрузка раздачи из канала по 🧲 магнитной ссылки (переадресация происходит автоматически в торрент клиент по умолчанию):
💡 Так как параметр url в keyboard Telegram API не поддерживает magnet-ссылки, был реалезован механизм переадресации через magnet2url, который также добавляет в ссылку список актуальных серверов торрент трекеров, используемых в Кинозал, а также WebTorrent, RuTracker, NoNameClub и RuTor.
Быстрее всего (в течение 1-2 секунд с момента перехода по ссылке) метаданные загружает локальный клиент LibreTorrent на Android и клиент WebTorrent Desktop или WebTorrent Desktop api на Windows, в то время как qBittorrent и Transmission может понадобиться до нескольки минут, а также загрузка может происходить медленнее. Для решения такой проблемы, может помочь запрос большего количества участников у торрент трекера (повторно анонсировать, доступно для клиента qBittorrent).
- Демонстрация работы поиска и добавление на загрузку в qBittorrent (версия 0.4.4):
- 🔍 Поиск в торрент трекере c фильтрацией по году выхода и формату разрешения:
Скорость получения информации из трекера Кинозал на прямую зависит от скорости работы вашего интернета и/или VPN соединения.
- 👤 Профиль Кинозал, список торрент файлов на сервере и выгрузка всех торрент файлов (с полученными метаданными) в Telegram:
- 🍿 Получение информации о выбранном сериале в Кинозал (стандартный вывод для всех раздач, из данного интерфейса происходит управление выбранным торрент файлом), а также пример управления загрузкой в клиенте 🔳 Transmission:
- 👥 Поиск по актеру в трекере Кинозал и список фильмов с его участием, а также получение дополнительной информации из базы 💙 TMDB и даты выхода всех сезонов и серий:
- 🐸 Список и статус всех активных торрентов, добавленных в клиент qBittorrent, а также получение дополнительной информации и управление загрукой файлов:
- 🟠 Список секций и синхронизация контента, а также просмотр содержимого файлов на сервере Plex:
Для работы бота, необходимо подготовить свою домашнюю среду, все настройки подключения задаются в конфигурационном файле: 📑 kinozal-bot.conf.
- Зарегистрируйте аккаунт на сайте Кинозал и заполнить параметры конфигурации:
KZ_PROFILE="id_you_profile"
- идентификатор вашего профиля (используется для получения информации из профиля Кинозал)
KZ_USER="LOGIN"
- логин (используется на этапе получения инфо хэш из раздачи, содержимого раздачи и загрузки торрент-файлов)
KZ_PASS="PASSWORD"
- пароль
- Если у вас заблокирован доступ в Кинозал, вы можете воспользоваться VPN или Proxy сервером, через который бот сможет проксировать свои запросы.
Я использую HandyCache на системе Windows, рядом с которым запущена бесплатная версия VPN Hotspot Shield в режиме раздельного туннелирования (Split Tunneling) до сайта Кинозал и TMDB.
- 2.1. Настройка Proxy-сервера:
PROXY="True"
- включить использование прокси сервера в curl-запросах при обращении к Кинозал и TMDB
PROXY_ADDR="http://192.168.3.100:9090"
- адрес сервера и порт, на котором слушает запросы Proxy-сервер
PROXY_USER="LOGIN"
PROXY_PASS="PASSWORD"
- 2.2. Вы можете указать любой из адресов для доступа к Кинозал, используя зеркало:
KZ_ADDR="https://kinozal.tv"
или
KZ_ADDR="https://kinozal.me"
- 2.3. Возможен вариант использования обратного прокси сервер, на котором есть прямой доступ к трекеру, например, через Reverse Proxy .NET:
Скачайте исполняемый файл и запустите обратный прокси сервер на машине с доступом к Kinozal:
rpnet.exe --local 192.168.3.100:8443 --remote https://kinozal.tv
Отключите в конфигурации использование Proxy-сервера и замените адрес Кинозал на адрес обратного прокси сервера:
PROXY="False"
KZ_ADDR="http://192.168.3.100:8443"
💡 В версии rpnet
0.0.2 добавлена поддержка передачи данных через POST-запросы, что позволяет производить аутентификацию в трекере для загрузки торрент файлов и получения info hash.
- Создайте своего Telegram бота через @botfather используя интуитивно понятный интерфейс и получите API-токен доступа. Что бы получить ваш чат id, напишите любое сообщение вашему боту и перешлите его Get My ID, после чего заполните параметры:
Также id можно получить в логе работы бота из запросов новых клиентов (>>> Request
), которые вы сможете добавить в конфигурацию через запятую.
TG_TOKEN="6873341222:AAFnVgfavenjwbKutRwROQQBya_XXXXXXXX"
- используется для чтения и отправки сообщений ботом
TG_CHAT="8888888888,999999999"
- id всех чатов, которые будут иметь доступа к боту
- Установите и настройте торрент клиент qBittorrent.
- 4.1. Включите Веб-интерфейс в настройках приложения:
Укажите параметры подключения к клиенту:
QB_ADDR="http://192.168.3.100:8888"
- указать URL-адрес, где указан протокол (по умолчанию, http), ip-адрес машины, на которой запущен qBittorrent и порт (задается в настройках Веб-интерфейса)
QB_USER="LOGIN"
- имя пользователя, указывается в поле Аутентификация в настройках Веб-интерфейса
QB_PASS="PASSWORD"
- пароль, указывается в поле Аутентификация в настройках Веб-интерфейса
- 4.1. Определите директорию для загрузки контента в qBittorrent по умолчанию.
💡 Это должна быть директория, которая будет добавлена на сервер Plex, что бы в дальнейшем можно было синхронизировать загруженный контент, используя бот.
- Установите и настройте Transmission для управления клиентом с помощью бота:
Укажите параметры подключения к клиенту:
TRANS_ADDR="http://192.168.3.100:9091"
TRANS_USER="LOGIN"
TRANS_PASS="PASSWORD"
💡☁️ Возможно использовать один (или оба) из поддерживаемых клиентов для синхронизации с сервером Plex, или настроить второй клиент для синхронизации с любым облачным хранилищем, что бы иметь удаленный доступ к файлам, например, с телефона, т.к. для удаленной загрузки контента с сервера Plex требуется подписка Plex Pass. Для этого укажите любую дочернюю директорию внутри вашего облачного хранилища (необходимо, что бы ваше облако было подключено к файловой системе компьютера) для загрузки контента в Transmission клиенте по умолчанию.
- Установите Plex Media Server и получите токен доступа.
Так как нет возможности напрямую получить токент доступа в веб-интерфейсе, можно воспользоваться панелью разработчика в браузере. Откройте Development Tools нажатием кнопки F12
и перейдите на вкладку сеть (network), обновите страницу интерфейса вашего сервера Plex, после чего вы сможете увидеть токен в любом из url-запросов (X-Plex-Token=ваш_токена). Передайте адрес сервера (по умолчанию, порт 32400) и содержимое токена в параметры:
PLEX_ADDR="http://192.168.3.100:32400"
PLEX_TOKEN="ваш_токена"
💡 Создайте новую секцию на сервере Plex и укажите путь к директории хранения вашего контента, на которую уже настроен клиент qBittorrent или Transmission по умолчанию:
- Настройка подключения к TMDB api:
💡 Как и в случае с настройкой второго торрент клиента, данный пункт является опциональным.
Зарегестрируйте аккаунт на сайте The Movie Database и выпустите ключ доступа к api, после чего заполните параметры конфигурации (возможно указать ключ или токен на выбор):
TMDB_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
TMDB_TOKEN="XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX"
- Пути хранения торрент файлов, cookie (временные файлы, для авторизации в Кинозал и qBittorrent), а также лог-файлов и его размер (поддерживается ротация) на сервере задаются в конфигурации:
path="/home/lifailon/kinozal-bot"
log_size_mbyte=10
💡 Все запросы к боту, а также его ответы логируются
Установите jq:
apt install jq
jq --version
jq-1.6
Для запуска бота загрузите скрипт kinozal-bot-*.sh
последней версии, и расположите предварительно настроенный конфигурационный файл kinozal-bot.conf рядом со скриптом.
В примере используется директория kinozal-bot
в корне домашнего каталога текущего пользователя, так выглядит состав файлов на рабочем экземпляре:
Перед запуском, вы можете проверить подключение к сервисам, в случае успеха, вы получите текущую версию:
bash kinozal-bot/kinozal-bot-0.4.5.sh version
qBittorrent Client: 4.6.5 (api: 2.9.3)
Transmission Client: 4.0.6 (38c164933e)
Plex Media Server: 1.40.0.7998-c29d4c0c8
- Используйте интерпретатор 🐧 Bash для запуска (root права не требуются):
cd ~/kinozal-bot
bash kinozal-bot-0.4.5.sh start bot
- Узнать статус работы и количество активных процессов:
bash kinozal-bot-0.4.5.sh status
[INFO] 14:38:46: Server running. Count running process: 4
- Проверка подключения к qBittorrent:
Если настройки заданы правильно, вы можете отобразить журнал работы qBittorrent клиента и сервера Plex в своей консоли.
bash kinozal-bot-0.4.5.sh log qb
bash kinozal-bot-0.4.5.sh log qb all
- Отобразить журнал работы системы и сервера Plex:
bash kinozal-bot-0.4.5.sh log plex system
bash kinozal-bot-0.4.5.sh log plex system all
bash kinozal-bot-0.4.5.sh log plex server
bash kinozal-bot-0.4.5.sh log plex server all
- Вывести журнал работы бота:
bash kinozal-bot-0.4.5.sh log bot
bash kinozal-bot-0.4.5.sh log bot 50
- Остановка бота и всех его дочерних процессов:
bash kinozal-bot-0.4.5.sh stop
bash kinozal-bot-0.4.5.sh status
[INFO] 14:40:16: Server not running. Count running process: 0
Если все настройки заданы и подключение проверено, можно запустить бота как службу systemd, что бы автоматизировать процесс запуска в случае перезагрузки системы или другого сбоя, а также передать поток логов в системный журнал.
- Создайте файл службы и откройте его в любом текстовом редакторе:
touch /etc/systemd/system/kinozal-bot.service
nano /etc/systemd/system/kinozal-bot.service
- Скопируйте в файл следующее содержимое:
[Unit]
Description=Telegram bot for kinozal.tv torrent tracker, remote managment qBittorrent and Plex Media Server
After=network.target
[Service]
ExecStart=/bin/bash "/home/lifailon/kinozal-bot/kinozal-bot-0.4.5.sh" start bot log
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
Type=forking
[Install]
WantedBy=multi-user.target
💡 Замените путь к скрипту сервера в параметре запуска ExecStart
на свой.
- Примените настройки, включите автозапуск и запустите бота:
systemctl daemon-reload
systemctl enable kinozal-bot
systemctl start kinozal-bot
systemctl status kinozal-bot
После этого возможно управлять запуском, используя команды: start
, stop
и restart
.
Для просмотра журнала работы бота, можете использовать утилиту journalctl
:
journalctl -fu kinozal-bot
💁♂️ Список всех доступных команд (за исключением /search_title
, /search_actor
, /add_hash
и /add_url
) автоматизированы через меню кнопок keyboard.
/search_title
- Поиск в Кинозал по названию (вначале запроса принимает год выхода для фильтрации)
/profile
- Профиль Кинозал (количество доступных для загрузки торрент файлов, статистика загрузки и отдачи, время сид и пир)
/torrent_files
- Список загруженных торрент файлов с возможностью удаления
/status
- список и статус всех текущих торрентов, добавленных в торрент-клиент qBittorrent
/plex_info
- Список секций на сервере Plex для доступа к их контенту
/download_torrent <id> <file_name>
- Загрузить торрент файл (передать два параметра: id и имя файла без пробелов)
/delete_torrent_file_<id>
- Удалить торрент файл по id
/search_id <id>
- Поиск в Кинозал по id
/download_video_<id>
- Добавить торрент файла на загрузку в qBittorrent
/info <hash>
- Статус загрузки указанного торрента (передать параметр: hash торрента)
/torrent_content <hash>
- Содержимое торрента (список файлов)
/file_torrent <index>
- Статус выбранного торрент файла (передать параметр: порядковый индекс файла)
/torrent_priority <num>
- Изменить приоритет выбранного файла в /file_torrent (передать параметр: номер приоритета)
/pause <hash>
- Установить на паузу
/resume <hash>
- Восстановить загрузку
/delete_torrent <hash>
- Удалить торрент из клиента
/delete_video <hash>
- Удалить вместе с данными
/plex_status_<key>
- Информация о выбранной секции в Plex (передать параметр: ключ секции)
/plex_sync_<key>
- Синхронизировать выбранную секцию в Plex
/plex_folder_<key>
- Получить список директорий и файлов в выбранной секции
/find
- Поиск контента в Plex по пути (передать параметр: конечную точку)
/plex_last_views
- Список последних просмотров (дата просмотра и время остановки) в Plex
/plex_last_added
- Список последних добавленных файлов в Plex
/kinozal_description <id>
- Описание фильма из Кинозал (удалено из меню в версии 0.4.5)
/kinozal_actors <id>
- Список актеров из Кинозал (передать параметр: id kinozal)
/actor <id>
- Описание, поиск актера и его фильмографии из Кинозала и ссылка на Кинопоиск (передать параметр: имя актера)
/kinopoisk_movie <id>
- Информация о фильме из Кинопоиск по id kinopoisk (удалено из меню в версии 0.4.5)
Поддержка WinAPI (временно отключено в версии 0.4.4).
/search_title <year*> <format*> <title>
- Поиск с фильтрацией по году выхода и формату разрешения
/research
- Повторить последний поиск (id не требуется)
/file_list
- Извлечь список файлов и их размер из раздачи
/send_torrent_file_id
- Отправка загруженного торрент-файла в Telegram
/send_last_torrent_file
- Отправить последний загруженный торрент-файл
/send_all_torrent_files
- Отправить все загруженные торрент-файлы
/skip_all_files <hash>
- Пропустить загрузку всех файлов путем изменения приоритета в qBittorrent
/normal_all_files <hash>
- Восстановить загрузку всех файлов
/add_torrent <hash>
- Добавить раздачу на загрузку в qBittorrent по инфо хэш
/get_torrent <hash>
- Выгрузить торрент файл на сервер по инфо хэш и отправить в телеграмм
/torrent_recheck <hash>
- Проверить торрент файл
/torrent_limit
- Переключить альтернативные лимиты скорости загрузки и отдачи
/search_actor <name>
- Поиск актеров в базе Кинозал (возвращает список найденных актеров)
/actor <search/list> <name>
- Первый параметр принимает тип возврата (/kinozal_actors
или /search_actor
)
/trans_status
- Список и статус всез торрент в клиенте Transmission
/trans_info <id>
- Получить подробную информацию о торренте
/trans_file_all <id> <skip/resume>
- Изменить приоритет загрузки всех торрент файлов выбранной раздачи по id (пропустить или возобновить загрузку и выставить нормальный приоритет)
/trans_file_select <id> <file_index>
- Переключить приоритет выбранного файла (пропустить или высокий приоритет)
/trans_pause <id> <start/stop>
- установить на паузу или возобновить
/trans_remove <id> <false/true>
- удалить торрент и данные
/trans_set_alt_speed
- переключить лимит альтернативной скорости
/add_hash <qbit/trans> <hash>
- Добавить торрент по инфо хеш в указанный клиент
/download_trans_<id>
- Добавить торрент файла на загрузку в Transmission клиент
/add_url <url>
- Добавить торрент по url-адресу с выбором клиента через меню
/add_trans_url <url>
- Добавить торрент по url-адресу в Transmission клиент
/add_qbit_url <url>
- Добавить торрент по url-адресу в qBittorrent клиент
/torrent_reannounce <hash/all>
- Принудительно повторно анонсировать (запросить у трекера больше участников) для выбранного торрента в qBittorrent клиенте
/tmdb_info <kinozal_id>
- Получить информацию о фильме или сериале через TMDB API
/tmdb_actor <tmdb_id> <type>
- Получить список актеров
/tmdb_season_episodes <tmdb_id> <season_number>
- Список серий в указанном сезоне
/tmdb_select_episode <tmdb_id> <season_number> <episode_number>
- Информация по выбранной серии и список приглашенных актеров
/tmdb_person <person_id>
- Информация по актеру и ссылки на TMDB и IMDb
- 🔍 Поиск в Кинозал по id:
/search_id 1940284
- 🍿 Поиск по названию фильма или сериала:
/search_title Рокки 2
/search_title Рокки 4
- Поиск с фильтрацией по году выхода:
/search_title 1979 Рокки
/search_title 1985 Рокки
- Поиск с фильтрацией по формату разрешения:
/search_title (720) Рокки
/search_title (1080) Рокки
/search_title (2160) Рокки
- Поиск с фильтрацией по формату разрешения и году выхода:
/search_title 1985 (2160) Рокки
/search_title (2160) 1985 Рокки
- 👥 Поиск актера в базе Кинозал по имени:
/search_actor "Алан"
/search_actor "Сильвестр"
- Получить биографию и фильмографию указанного актера:
/actor search Алан Тьюдик
/actor list Сильвестр Сталлоне
- 🔄Повторить последний запрос поиска для фильма/сериала или актера:
/research
- 🧲 Добавить торрент по инфо хеш на загрузку с выбором клиента через меню:
/add_torrent A72BD27A0CE265A3C7965392BC06C25EDD759214
- 🧲 Добавить торрент по инфо хеш в указанный торрент клиент:
/add_hash qbit A72BD27A0CE265A3C7965392BC06C25EDD759214
/add_hash trans A72BD27A0CE265A3C7965392BC06C25EDD759214
- 🌐 Добавить торрент по url-адресу с выбором клиента через меню:
/add_url https://d.rutor.info/download/869858
/add_url https://nnmclub.to/forum/download.php?id=1308422
- 🔳 Добавить торрент в Transmission клиент:
/add_trans_url https://d.rutor.info/download/869858
- 🐸 Добавить торрент в qBittorrent клиент:
/add_qbit_url https://nnmclub.to/forum/download.php?id=1308422
-
✨ TorAPI - неофициальный
API
(backend Express.js) для RuTracker, Kinozal, RuTor и NoNameClub с целью получения торрент-файлов и другой информации по названию фильма, сериалу или id. -
❤️ WebTorrent Desktop api - форк WebTorrent Desktop клиента, в котором добавлен механизм удаленного управления через
REST API
на базе Express Framework. -
🎞️ Open Kinopoisk Chrome Extension - расширение, которое добавляет кнопки на сайт Кинопоиск для поиска фильмов и сериалов в открытых источниках.
-
📡 Reverse Proxy .NET - кроссплатформенная утилита командной строки для реализации обратного прокси-сервер на базе .NET. Используется для предоставления доступа хостам с одного сетевого интерфейса к удаленным приложениям через протоколы TCP, UDP или HTTP/HTTPS доступных через другой сетевой интерфейс без лишних настроек и с поддержкой авторизации.