Sign inSign up

lifailon/kinozal-bot

By lifailon

Updated about 1 year ago

Telegram bot for the Kinozal torrent tracker, remote control of the qBittorrent and Transmission.

Image
0

710

lifailon/kinozal-bot repository overview

Kinozal Bot & News

Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон.

С помощью бота вы получите удобный и привычный интерфейс для взаимодействия с торрент трекером Кинозал и базой данных TMDB для отслеживания даты выхода серий, сезонов и поиска актеров для каждой серии, а также возможность управлять торрент клиентом qBittorrent или Transmission на вашем компьютере, находясь удаленно от дома, а главное, все это доступно из единого интерфейса и без установки клиентского приложения на конечные устройства. В отличии от других приложений, предназначенных для удаленного управления торрент клиентами, вам не нужно находиться в той же локальной сети или использовать VPN.

Запустить бота возможно как службу systemd или в контейнере 🐳 Docker (рекомендуется). Вы можете настроить и управлять торрент клиентом независимо от настройки или работоспособности трекера Кинозал, или наоборот, использовать только интерфейс Кинозал для поиска раздач и выгрузки торрент файлов в Telegram.

На базе бота реализован новостной канала Kinozal-News, который генерирует посты на основе новых публикаций в торрент трекере Кинозал (современная альтернатива RSS). Каждый пост содержит краткую информацию о раздаче (год выхода, страна производства, рейтинг, качество и перевод), а также #хештеги по жанру для фильтрации контента на канале и кнопки с ссылками описания фильма или сериала в базах данных о кинематографе Кинопоиск и IMDb, бесплатный онлайн просмотр через плееры ▶️ Kinobox и 🧲 магнитные ссылки для прямой загрузки содержимого раздачи в вашем торрент клиенте по умолчанию (применимо как для bittorrent-клиентов на телефоне, так и Windows или Linux).

Присоединяйтесь к каналу, что бы не пропускать новые публикации в трекере:

Telegram

На канале присутствует фильтрация всех публикаций по рейтингу (7.0 и выше), году выхода (2024 и новее), региону и времени, а также на основе предыдущих публикаций (по названию и их размеру) для исключения дублирующихся раздач.

Или используйте публичную RSS ленту новостей из проекта TorAPI с поддержкой фильтрации:

Kinozal RSS Feed Swagger Settings

Для пользователей бота реализован сценарий публичного запуска зеркала на платформе Vercel:

Kinozal-Proxy


💁‍♂️ Как это работает

Например, пока вы едите домой с работы, у вас появляется возможность подобрать фильм или сериал в обширной базе Кинозал прямиком с вашего телефона, или, найти что-то новое на канале Kinozal-News, после чего сразу загрузить выбранное на ваш компьютер и автоматически или через бот синхронизировать данные с Plex Media Server. По приходу домой, вам остается только открыть приложение Plex на вашем телевизоре и начать просмотр 📺🍿.

Такой подход также применим для передачи управления по подбору контента другому члену семьи (🐒), это особенно актуально, если у вас один компьютер, который может быть занят или к нему нет прямого доступа. Разобраться в интерфейсе бота проще, чем использовать все сервисы по отдельности, и главное, куда быстрее.

📚 Stack

Зависимости:

  • jqlang для обработки данных в формате json
  • Доступ в Кинозал и TMDB (опционально, ознакомьтесь со всеми возможными вариантами получения доступа в настройках)

Серверная часть написана на чистом Bash и использует стандартный набор Unix-утилит.

Бот протестирован и работает в виртуальной среде Hyper-V на системе Ubuntu Server 20.04 и новее (возможен запуск в системе Windows через интерпретатор Git Bash) для удаленного управления приложениями, установленные в домашней системе 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, для дальнейшей загрузки через ваш торрент клиент на телефоне.


🐳 Контейнер

Запуск в контейнере является альтернативой настройки службы systemd. Обработка ответов происходит заметно быстрее (сравнительно с локальным запуском на малопроизводительных системах), по этому такой способ является рекомендуемым.

  • Перейдите в директорию со скриптом и настроенным файлом конфигурации:
cd ~/kinozal-bot
FROM alpine:latest
WORKDIR /kinozal-bot
RUN apk add --no-cache bash coreutils curl grep sed gawk jq tzdata
ENV TZ=Etc/GMT-3
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY kinozal-bot.sh .
RUN chmod +x kinozal-bot.sh
ENTRYPOINT ["bash", "-c", "./kinozal-bot.sh start bot docker"]
Docker

Соберите образ и запустите контейнер в Docker:

docker build -t kinozal-bot .
docker run -d \
    --name kinozal-bot \
    --restart=unless-stopped \
    --label com.centurylinklabs.watchtower.enable=false \
    -v ./torrents:/kinozal-bot/torrents \
    -v ./kinozal-bot.conf:/kinozal-bot/kinozal-bot.conf \
    kinozal-bot

Или загрузите образ из Docker Hub:

Образ собран на системе с архитектурой aarch64 в режиме all.

docker run -d \
    --name kinozal-bot \
    --restart=unless-stopped \
    -v ./torrents:/kinozal-bot/torrents \
    -v ./kinozal-bot.conf:/kinozal-bot/kinozal-bot.conf \
    lifailon/kinozal-bot:latest

Размер образа составляет 9 MiB. Режим unless-stopped отвечает за перезапуск контейнера в случае перезагрузки системы или другого сбоя, за исключением ручной остановки.

При запуске контейнера используется механизм bind mount (-v путь в системе:путь в контейнере), это удобно для хранения конфигурации (не сохраняя ее в образе) и синхронизации торрент файлов (.torrent) с хостовой системой, тем самым при запуске бота в контейнере или локальной системе будет доступ к одному и томуже составу торрент файлов, а после удаления контейнера и образа файлы будут сохранены в системе.

Мониторинг

Вы можете управлять запуском контейнара с помощью команд:

docker <start/restart/stop> kinozal-bot

Для просмотра журналов контейнера используется команда: docker logs kinozal-bot.

Что бы не вызывать каждый раз команду logs для просмотра логов контейнера или других журналов, установите терминальный пользовательский интерфейс lazyjournal для быстрого мониторинга и фильтрации логов контейнеров Docker и Podman, юнитов systemd или лог-файлов в системе.

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

Команда для быстрого удаления контейнера и образа:

docker stop kinozal-bot && docker rm kinozal-bot && docker rmi kinozal-bot && docker rmi alpine || docker rmi lifailon/kinozal-bot:latest

Tag summary

Content type

Image

Digest

sha256:f2832736c

Size

9.1 MB

Last updated

about 1 year ago

docker pull lifailon/kinozal-bot