Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон.
💁♂️ Протестирован и работает в виртуальной среде (Hyper-V/VMWare) на системе Debian/Ubuntu (возможен запуск на системе Windows через интерпретатор Git Bash или MobaXterm) для удаленного управления торрент клиентом qBittorrent и Plex Media Server, установленные в домашней системе Windows. Хранение торрент-файлов происходит в системе, на которой запущен бот.
На базе бота реализовн новостной канала 📢 Kinozal-News, который генерирует посты на основе новых публикаций в торрент трекере Кинозал с фильтрацией по рейтингу (7.0+) и году выхода (2023+). Каждый пост содержит краткую информацию о раздаче (год выхода, страна и компания производства, рейтинг, качество и перевод), а также # хештеги по жанру для фильтрации контента на канале и кнопки с ссылками описания фильма или сериала в базах данных о кинематографе Кинопоиск и IMDb, бесплатный онлайн просмотр через плееры
- ✅ Интерфейс для взаимодействия с торрент трекером Кинозал. Поиск раздач с фильтрацией по году выхода и формату разрешения, поиск фильмографии по актеру, получение подробной информации о раздачах, содержимое раздачи и загрузка торрент файлов.
- ✅ Централизованное управление загруженными торрент файлами (
.torrent
), с возможностью выгрузки в Telegram. - ✅ Интерфейс для удаленного управления вашем торрент клиентом qBittorrent. Добавление раздач на загрузку из торрент файла и инфо хеш (передается в каждой публикации новостного канала и при поиске раздач в боте), получение подробной информацию (скорость загрузки, статус, пиры, сиды и т.д.), пауза и возобновление загрузки, проверка на целостность, переключение лимитов скорости, управление приоритетом отдельных файлов, удаление торрента и содержимого раздачи в системе.
- ✅ Синхронизация контента с Plex Media Server, а также просмотр содержимого директорий и дочерних файлов.
🧲 Добавление торрента по хэшу возможно из любого источника (торрент трекера). По мимо загрузки, это также дает возможность сформировать и сохранить торрент файл на сервере с полученными метаданными через торрент клиент qBittorrent, который можно выгрузкой в Telegram, для дальнейшей загрузки через ваш торрент клиент на телефоне, который не всегда способен получить метаданные.
- Telegram api;
- qBittorrent api;
- Plex Media Server api (не содержит официальной документации).
Зависимости:
- jq для обработки данных в формате json.
Опционально:
- Клиентское приложение VPN и/или Proxy-сервер для доступа в Кинозал
- Загрузка раздачи из канала по 🧲 магнитной ссылки (переадресация происходит автоматически в торрент клиент по умолчанию):
💡 Так как параметр url в keyboard Telegram API не поддерживает магнет ссылки, был реалезован механизм переадресации через magnet2url, который добавляет в ссылку список актуальных серверов торрент трекеров.
🚀 Быстрее всего (в течение 1-2 секунд с момента перехода по ссылке) метаданные подгружает локальный клиент LibreTorrent на Android и десктопный клиент WebTorrent на Windows, в то время как qBittorrent и Transmission может понадобиться до нескольки минут, при этом загрузка может происходить медленнее или вовсе не начаться.
- Демонстрация работы поиска и добавление на загрузку в qBittorrent:
- 🔍 Поиск в торрент трекере c фильтрацией по году выхода и формату разрешения:
- Профиль Кинозал, список торрент файлов на сервере и выгрузка всех торрент файлов (с полученными метаданными) в Telegram:
- Список всех активных торрентов, добавленных в клиент 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) до сайта Кинозал.
PROXY="True"
- включить использование прокси сервера в curl-запросах при обращении к Кинозал
PROXY_ADDR="http://192.168.3.100:9090"
- адрес сервера и порт, на котором слушает запросы Proxy-сервер
PROXY_USER="LOGIN"
PROXY_PASS="PASSWORD"
- Создать своего Telegram бота через @botfather используя интуитивно понятный интерфейс и получите API-токен доступа. Что бы получить ваш чат id, напишите любое сообщение вашему боту и перешлите его Get My ID, после чего заполните параметры:
TG_TOKEN="6873341222:AAFnVgfavenjwbKutRwROQQBya_XXXXXXXX"
- используется для чтения и отправки сообщений ботом
TG_CHAT="8888888888,999999999"
- id всех чатов, которые будут иметь доступа к боту.
В дальнейшем 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, что бы в дальнейшем можно было синхронизировать загруженный контент, используя бот.
- Установить Plex Media Server и получить токен доступа.
Так как нет возможности напрямую получить токент доступа в веб-интерфейсе, можно воспользоваться панелью разработчика (Development Tools) в браузере. Перейдите на вкладку сеть (network) и обновите страницу интерфейса вашего сервера Plex, после чего вы сможете увидеть токен в любом из url-запросов (X-Plex-Token=ваш_токена). Передайте адрес сервера (по умолчанию, порт 32400) и содержимое токена в параметры:
PLEX_ADDR="http://192.168.3.100:32400"
PLEX_TOKEN="ваш_токена"
💡 Создайте новую секцию на сервере Plex и укажите путь к директории хранения вашего контента, на которую уже настроен клиент qBittorrent по умолчанию:
- Пути для сохранения торрент файлов, cookie (временные файлы, для авторизации в qBittorrent и Кинозал), а также лог-файлов задаются в конфигурации.
path="/home/lifailon/kinozal-torrent"
path_qb_cookies="/home/lifailon/kinozal-torrent/qbittorrent.cookies"
path_kz_cookies="/home/lifailon/kinozal-torrent/kinozal.cookies"
path_log="/home/lifailon/kinozal-torrent/kinozal-bot.log"
log_size_mbyte=10
Все запросы к боту, а также его ответы логируются.
Проверьте, что у вас установлен jq:
apt install jq
jq --version
jq-1.6
Для запуска бота загрузите скрипт kinozal-bot-*.sh
последней версии, и расположите предварительно настроенный конфигурационный файл kinozal-bot.conf рядом со скриптом.
Я использую директорию kinozal-torrent
в корне домашнего каталога текущего пользователя, вот пример состава файлов:
- Используйте интерпретатор 🐧 Bash для запуска (root права не требуются):
cd ~/kinozal-torrent
bash kinozal-bot-0.4.4.sh start bot
- Узнать статус работы и количество активных процессов:
bash kinozal-bot-0.4.4.sh status
bash kinozal-bot-0.4.4.sh status proc
- Проверка подключения к qBittorrent:
Если настройки заданы правильно, вы можете отобразить журнал работы qBittorrent клиента и сервера Plex в своей консоли.
bash kinozal-bot-0.4.4.sh log qb
bash kinozal-bot-0.4.4.sh log qb all
- Отобразить журнал работы системы и сервера Plex:
bash kinozal-bot-0.4.4.sh log plex system
bash kinozal-bot-0.4.4.sh log plex system all
bash kinozal-bot-0.4.4.sh log plex server
bash kinozal-bot-0.4.4.sh log plex server all
- Вывести журнал работы бота:
bash kinozal-bot-0.4.4.sh log bot
bash kinozal-bot-0.4.4.sh log bot 50
- Остановить бота и все его дочерние процессы:
bash ~/kinozal-torrent/kinozal-bot-0.4.4.sh stop
bash ~/kinozal-torrent/kinozal-bot-0.4.4.sh status
Если все настройки заданы и подключение проверено, можно запустить бота как службу 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-torrent/kinozal-bot-0.4.4.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
) автоматизированы через меню кнопок keyboard.
/search
- Поиск в Кинозал по названию (вначале запроса принимает год выхода для фильтрации)
/profile
- Профиль Кинозал (количество доступных для загрузки торрент файлов, статистика загрузки и отдачи, время сид и пир)
/torrent_files
- Список загруженных торрент файлов с возможностью удаления
/status
- список и статус всех текущих торрентов, добавленных в торрент-клиент qBittorrent
/plex_info
- Список секций на сервере Plex для доступа к их контенту
/download_torrent <id> <file_name>
- Загрузить торрент файл (передать два параметра: id и имя файла без пробелов)
/delete_torrent_file_<id>
- Удалить торрент файл по id
/find_kinozal <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>
- Описание фильма из Кинозал (передать параметр: id kinozal)
/kinozal_actors <id>
- Список актеров из Кинозал (передать параметр: id kinozal)
/actor <id>
- Описание, поиск актера и его фильмографии из Кинозала и ссылка на Кинопоиск (передать параметр: имя актера)
/kinopoisk_movie <id>
- Информация о фильме из Кинопоиск по id kinopoisk (передать параметр: id kinozal)
/search <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
- Переключить альтернативные лимиты скорости загрузки и отдачи
- Поиск в Кинозал по id:
/find_kinozal 1940284
- Поиск по названию фильма или сериала:
/search Рокки 2
/search Рокки 4
- Поиск с фильтрацией по году выхода:
/search 1979 Рокки
/search 1985 Рокки
- Поиск с фильтрацией по формату разрешения:
/search (720) Рокки
/search (1080) Рокки
/search (2160) Рокки
- Поиск с фильтрацией по формату разрешения и году выхода:
/search 1985 (2160) Рокки
/search (2160) 1985 Рокки
- Поиск фильмографии по имени актера (получить список фильмов из Кинозал):
/actor Сильвестр Сталлоне
- Неверный поиск (находит только актера в Кинопоиск по api без фильмографии):
/actor сильвестр сталлоне
/actor Сильвестр Сталоне
- Повторить последний запрос поиска (для фильма/сериала или актера):
/research
- Добавить торрент по инфо хэш в qBittorrent на загрузку:
/add_torrent A72BD27A0CE265A3C7965392BC06C25EDD759214
- Изменены параметры управления запуска (2 режима) и возможность настройки управления чере службу systemd;
- Добавлены параметры вывода логов бота, журнала работы клиента qBittorrent и сервера Plex;
- Добавлено получение инфо хеш каждой раздачи и содержимое раздачи (/file_list из /find_kinozal);
- Повторить последний поисковой запрос (доступно из меню и /find_kinozal);
- Фильтрация по формату (разрешению) при поиске по названию фильма или сериала;
- Получение последнего, выбранного и всех загруженных торрент файлов с сервера (отправка в телеграм);
- Добавлена возможность загрузить торрент по инфо хэш (/add_torrent из меню);
- Выгрузить торрент файла из клиента qBittorrent (после загрузки метаданных) на сервер с отправкой в телеграм;
- Добавлена проверка (сканирование целостности) торрент раздачи в qBittorrent;
- Добавлен статус приоритета и загрузки в списке файлов выбранного торрента;
- Добавлен пропуск и восстановление загрузки всех файлов в qBittorrent;
- Добавлен поиск в Plex из qBittorrent по имени файла (из /info в /find );
- Добавлена информация о настройках и лимитах qBittorrent в список торрентов (/status) и переключение на альтернатывные лимиты скорости (/torrent_limit);
- Исправлено: обновление статуса после синхронизации контента Plex, добавлено время обновления, что бы отвисала кнопка, где может не обновляться контент;
- Канал: добавлены хэштеги по жанру и кнопки для перехода по url (Кинопоиск + IMDb + Кинозал + Magnet + Kinobox);
- Обновлен парсинг и добавлены условия для проверки на наличие содержимого в описание постов;
- Добавлен redirect с url https на magnet uri для перенаправления в торрент клиент по умолчанию, т.к. магнитные ссылки не принимает Telegram для передачи в url;
- Добавлены функции qBittorrent для получения списка трекеров, содержимого RSS ленты и работы с поисковыми плагинами (Search Plugins).
- Добавить Everything api для выгрузки видеофайлов в Telegram;
- Поддержка обратного прокси сервера;
- Отладить получение информации по актеру;
- Поддержка других торрент клиентов (например, Transmission);
- Заменить Kinopoisk unofficial API на TMDB api;
- Получить список плееров через Kinobox api и трейлеров через YouTube;
- Получить список выхода серий через внешние сервисы (Toramp, MyShows или Film.ru).