├── LICENSE ├── README.md ├── dockerfile ├── image ├── examples │ ├── kinozal-info.jpg │ ├── kinozal-news-webtorrent.jpg │ ├── magnet-download.jpg │ ├── magnet-redirect.jpg │ ├── plex-file-list.jpg │ ├── plex-sync.jpg │ ├── qbittorrent-files.jpg │ ├── qbittorrent-status.jpg │ ├── search-actor.jpg │ ├── search-all.jpg │ ├── search-and-download.gif │ ├── search-filter.jpg │ ├── tmdb-info.jpg │ ├── torrent-files-and-kinozal-profile.jpg │ ├── torrent-files-send-telegram.jpg │ └── transmission.jpg ├── logo │ ├── kinozal-bot-256px.png │ ├── kinozal-bot-512px.png │ ├── kinozal-news-256px.png │ └── kinozal-news-512px.png └── settings │ ├── docker-dozzle.jpg │ ├── kinozal-bot-files.jpg │ ├── lazyjournal-read-log-file.jpg │ ├── plex-add-directory.jpg │ ├── plex-token.jpg │ ├── qbittorrent-default-directory.jpg │ ├── qbittorrent-settings.jpg │ ├── scheme.jpg │ └── transmission-settings.jpg └── scripts ├── kinozal-bot-podman.service ├── kinozal-bot.conf ├── kinozal-bot.service └── kinozal-bot.sh /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2023-2025 Lifailon 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a 4 | copy of this software and associated documentation files (the "Software"), 5 | to deal in the Software without restriction, including without limitation 6 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | and/or sell copies of the Software, and to permit persons to whom the 8 | Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Kinozal Bot & News 4 | 5 |

6 | 7 |

8 | 9 | 10 | 11 |

12 | 13 | Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон. 14 | 15 | С помощью бота вы получите удобный и привычный интерфейс для взаимодействия с торрент трекером [Кинозал](https://kinozal.tv) и базой данных [TMDB](https://www.themoviedb.org) для отслеживания даты выхода серий, сезонов и поиска актеров для каждой серии, а также возможность управлять торрент клиентом [qBittorrent](https://github.com/qbittorrent/qBittorrent) или [Transmission](https://github.com/transmission/transmission) на вашем компьютере, находясь удаленно от дома, а главное, все это доступно из единого интерфейса и без установки клиентского приложения на конечные устройства. В отличии от других приложений, предназначенных для удаленного управления торрент клиентами, вам не нужно находиться в той же локальной сети или использовать VPN. 16 | 17 | Запустить бота возможно как службу **systemd** или в контейнере 🐳 **Docker** (рекомендуется). Вы можете настроить и управлять торрент клиентом независимо от настройки или работоспособности трекера *Кинозал*, или наоборот, использовать только интерфейс *Кинозал* для поиска раздач и выгрузки торрент файлов в Telegram. 18 | 19 | На базе бота реализован новостной канала [Kinozal-News](https://t.me/kinozal_news), который генерирует посты на основе новых публикаций в торрент трекере *Кинозал* (современная альтернатива **RSS**). Каждый пост содержит краткую информацию о раздаче (год выхода, страна производства, рейтинг, качество и перевод), а также `#хештеги` по жанру для фильтрации контента на канале и кнопки с ссылками описания фильма или сериала в базах данных о кинематографе [Кинопоиск](https://www.kinopoisk.ru) и [IMDb](https://www.imdb.com), бесплатный онлайн просмотр через плееры ▶️ [Kinobox](https://kinobox.tv) и 🧲 [магнитные ссылки](https://en.wikipedia.org/wiki/Magnet_URI_scheme) для прямой загрузки содержимого раздачи в вашем торрент клиенте по умолчанию (применимо как для bittorrent-клиентов на телефоне, так и Windows или Linux). 20 | 21 | Присоединяйтесь к каналу, что бы не пропускать новые публикации в трекере: 22 | 23 | [![Telegram](https://img.shields.io/badge/Kinozal_News-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/kinozal_news) 24 | 25 | На канале присутствует фильтрация всех публикаций по рейтингу (**7.0** и выше), году выхода (**2024** и новее), региону и времени, а также на основе предыдущих публикаций (по названию и их размеру) для исключения дублирующихся раздач. 26 | 27 | Или используйте публичную RSS ленту новостей из проекта [TorAPI](https://github.com/Lifailon/TorAPI/blob/main/README_RU.md) с поддержкой фильтрации: 28 | 29 | [![Kinozal RSS Feed](https://img.shields.io/badge/kinozal_rss_feed-F88900?style=for-the-badge&logo=rss&logoColor=white)](https://torapi.vercel.app/api/get/rss/kinozal?category=0&year=0&format=0) [![Swagger Settings](https://img.shields.io/badge/-Настройка_RSS-%23Clojure?style=for-the-badge&logo=swagger&logoColor=white)](https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI/0.5.2#/RSS/get_api_get_rss_kinozal) 30 | 31 | Для пользователей бота реализован сценарий публичного запуска зеркала на платформе **Vercel**: 32 | 33 | [![Kinozal-Proxy](https://img.shields.io/badge/Kinozal_Proxy-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white)](https://github.com/Lifailon/Kinozal-Proxy) 34 | 35 | --- 36 | 37 | ### Документация: 38 | 39 | - [📝 Статьи на Хабр](#-статьи-на-хабр) 40 | - [💁‍♂️ Как это работает](#️-как-это-работает) 41 | - [📚 Stack](#-stack) 42 | - [🍿 Реализовано](#-реализовано) 43 | - [🚀 Примеры использования](#-примеры-использования) 44 | - [⚡ Зависимости](#-зависимости) 45 | - [⚙️ Настройка](#️-настройка) 46 | - [🔌 Подключение и управление](#-подключение-и-управление) 47 | - [🐧 Служба (unit)](#-служба-unit) 48 | - [🐳 Контейнер](#-контейнер) 49 | - [Docker](#docker) 50 | - [Podman](#podman) 51 | - [Мониторинг](#мониторинг) 52 | - [📌 Меню бота](#-меню-бота) 53 | - [🙋‍♂️ Список команд](#️-список-команд) 54 | - [🎉 Другие проекты](#-другие-проекты) 55 | 56 | --- 57 | 58 | ## 📝 Статьи на Хабр 59 | 60 | - [Telegram бот для доставки торрент контента с телефона до телевизора](https://habr.com/ru/articles/782028). 61 | 62 | - [Telegram бот для управления торрент клиентом и интеграция с трекером](https://habr.com/ru/articles/826774). 63 | 64 | - [Jackett и альтернативные решения (интерфейсы и api) для поиска торрентов](https://habr.com/ru/articles/841924). 65 | 66 | ## 💁‍♂️ Как это работает 67 | 68 | Например, пока вы едите домой с работы, у вас появляется возможность подобрать фильм или сериал в обширной базе Кинозал прямиком с вашего телефона, или, найти что-то новое на канале [Kinozal-News](https://t.me/kinozal_news), после чего сразу загрузить выбранное на ваш компьютер и автоматически или через бот синхронизировать данные с [Plex Media Server](https://www.plex.tv/ru/media-server-downloads). По приходу домой, вам остается только открыть приложение Plex на вашем телевизоре и начать просмотр 📺🍿. 69 | 70 | ![Image alt](image/settings/scheme.jpg) 71 | 72 | Такой подход также применим для передачи управления по подбору контента другому члену семьи (🐒), это особенно актуально, если у вас один компьютер, который может быть занят или к нему нет прямого доступа. Разобраться в интерфейсе бота проще, чем использовать все сервисы по отдельности, и главное, куда быстрее. 73 | 74 | ## 📚 Stack 75 | 76 | - [Telegram REST api](https://core.telegram.org/bots/api) 77 | - [qBittorrent WebUI api](https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1)) 78 | - [Transmission RPC api](https://github.com/transmission/transmission/blob/main/docs/rpc-spec.md) 79 | - [Plex Media Server api](https://github.com/plexinc) (не содержит официальной документации) 80 | - [TMDB api](https://developer.themoviedb.org/reference/intro/getting-started) 81 | 82 | **Зависимости:** 83 | 84 | - [jqlang](https://github.com/jqlang/jq) для обработки данных в формате *json* 85 | - Доступ в Кинозал и *TMDB* (*опционально*, ознакомьтесь со всеми возможными вариантами получения доступа в [настройках](#️-настройка)) 86 | 87 | Серверная часть написана на чистом [Bash](https://ru.wikipedia.org/wiki/Bash) и использует стандартный набор Unix-утилит. 88 | 89 | Бот протестирован и работает в виртуальной среде *Hyper-V* на системе *Ubuntu Server 20.04* и новее (возможен запуск в системе Windows через интерпретатор [Git Bash](https://git-scm.com/downloads/win)) для удаленного управления приложениями, установленные в домашней системе Windows или Linux*. Хранение торрент-файлов происходит в системе, на которой запущен бот. 90 | 91 | > \* Проверка удаленного управления приложениями на системе Linux не произодилась. Так как весь стек приложений является кросс-платформенным и имеет единую схему для удаленного взаимодействия через `API`, все должно (и будет) работать точно также. 92 | 93 | ## 🍿 Реализовано 94 | 95 | - ✅ Интерфейс для взаимодействия с торрент трекером **[Кинозал](https://kinozal.tv)**. Поиск раздач с фильтрацией по году выхода и формату разрешения (*HD/FullDH/4K*), подробная информации о каждой раздачи, содержимое раздачи, загрузка торрент файлов, поиск актеров и получение его фильмографии. 96 | - ✅ Централизованное управление загруженными торрент файлами (*.torrent*) на сервере, с возможностью выгрузки в Telegram. 97 | - ✅ Интерфейс удаленного управления торрент клиентом [qBittorrent](https://github.com/qbittorrent/qBittorrent). Добавление раздач на загрузку из торрент файла, [инфо хеш](https://en.wikipedia.org/wiki/Magnet_URI_scheme) (передается в каждой публикации новостного канала и при поиске раздач в боте) а также через url торрент файла, получение подробной информации о загрузке (скорость загрузки, статус, пиры, сиды и т.д.), пауза и возобновление загрузки, проверка на целостность, принудительно анонсировать, переключение лимитов скорости, управление приоритетом отдельных файлов, удаление торрента и содержимого раздачи из системы. 98 | - ✅ Интерфейс управления торрент клиентом [Transmission](https://github.com/transmission/transmission). Добавление раздач на загрузку из торрент файла, инфо хеш или url, получение подробной информации о загрузке, пауза и возобновление загрузки, управление приоритетом отдельных файлов, удаление торрента и содержимого раздачи. 99 | - ✅ Синхронизация контента с [Plex Media Server](https://www.plex.tv), а также просмотр содержимого директорий и дочерних файлов. 100 | - ✅ Получение дополнительной информации о фильме и сериале из [The Movie Database](https://www.themoviedb.org/?language=ru) (TMDB). Список актеров и сезонов для каждого сериала, список серий в каждом сезоне, дата выхода сезонов и серий, а также получение подробной информации о каждой серии и список приглашенных актеров. 101 | 102 | Добавление торрента по 🧲 *hash*-сумме и 🌐 *url*-адресу торрент файла (без загрузки самого файла) возможно из любого источника (торрент трекера). По мимо загрузки, это также дает возможность сформировать и сохранить торрент файл на сервере с полученными метаданными через торрент клиент qBittorrent или Transmission, который можно выгрузкой в Telegram, для дальнейшей загрузки через ваш торрент клиент на телефоне. 103 | 104 | --- 105 | 106 | ## 🚀 Примеры использования 107 | 108 | - Загрузка раздачи из канала по 🧲 магнитной ссылки (переадресация происходит автоматически в торрент клиент по умолчанию): 109 | 110 |

111 | 112 |

113 | 114 | 💡 Так как параметр url в [keyboard Telegram API](https://core.telegram.org/bots/api#inlinekeyboardmarkup) не поддерживает magnet-ссылки, был реалезован механизм переадресации через [magnet2url](https://github.com/Lifailon/magnet2url), который также добавляет в ссылку список актуальных серверов торрент трекеров, используемых в Кинозал, а также WebTorrent, RuTracker, NoNameClub и RuTor. 115 | 116 | Быстрее всего (в течение 1-2 секунд с момента перехода по ссылке) метаданные загружает локальный клиент [LibreTorrent](https://github.com/proninyaroslav/libretorrent) на Android и клиент [WebTorrent Desktop](https://github.com/webtorrent/webtorrent-desktop) или [WebTorrent Desktop api](https://github.com/Lifailon/webtorrent-desktop-api) на Windows, в то время как qBittorrent и Transmission может понадобиться до нескольки минут, а также загрузка может происходить медленнее. Для решения такой проблемы, может помочь запрос большего количества участников у торрент трекера (повторно анонсировать, доступно для клиента qBittorrent). 117 | 118 |

119 | 120 |

121 | 122 | - Демонстрация работы поиска и добавление на загрузку в qBittorrent (**версия 0.4.4**): 123 | 124 | > Скорость получения информации из трекера Кинозал на прямую зависит от скорости работы вашего интернета и/или VPN соединения. При этом, скорость ответов бота при запуске в контейнере (добавлено в **версии 0.4.6**) в моей системе увеличилась примерно в два раза. 125 | 126 |

127 | 128 |

129 | 130 | - 🔍 Поиск в торрент трекере c фильтрацией по году выхода и формату разрешения: 131 | 132 |

133 | 134 |

135 | 136 | - 👤 Профиль Кинозал, список торрент файлов на сервере и выгрузка всех торрент файлов (с полученными метаданными) в Telegram: 137 | 138 |

139 | 140 |

141 | 142 | - 🍿 Получение информации о выбранном сериале в Кинозал (стандартный вывод для всех раздач, из данного интерфейса происходит управление выбранным торрент файлом), а также пример управления загрузкой в клиенте 🔳 Transmission: 143 | 144 |

145 | 146 |

147 | 148 | - 👥 Поиск по актеру в трекере Кинозал и список фильмов с его участием, а также получение дополнительной информации из базы 💙 TMDB и даты выхода всех сезонов и серий: 149 | 150 |

151 | 152 |

153 | 154 | - 🐸 Список и статус всех активных торрентов, добавленных в клиент qBittorrent, а также получение дополнительной информации и управление загрукой файлов: 155 | 156 |

157 | 158 |

159 | 160 | - 🟠 Список секций и синхронизация контента, а также просмотр содержимого файлов на сервере Plex: 161 | 162 |

163 | 164 |

165 | 166 | --- 167 | 168 | ## ⚡ Зависимости 169 | 170 | Установите **[jq](https://github.com/jqlang/jq)**: 171 | 172 | ```shell 173 | apt install jq 174 | jq --version 175 | jq-1.6 176 | ``` 177 | 178 | Также, вы можете проверить, что в вашей системе установлен интерпритатор `bash` и следующие пакеты (предустановлены по умолчанию в большинстве дистрибутивов Linux): `curl`, `grep`, `sed`, `gawk`, `tail`, используя параметр `--version`. 179 | 180 | ```shell 181 | bash --version 182 | GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu) 183 | ``` 184 | 185 | Для запуска бота необходимо загрузить скрипт `kinozal-bot.sh` и конфигурационный файл `kinozal-bot.conf`, который располагается рядом со скриптом. 186 | 187 | ```shell 188 | # Создаем директорию для скрипта и хранения сопутствующих файлов в процессе работы 189 | cd ~ 190 | mkdir kinozal-bot 191 | # Клонируем репозиторий 192 | git clone https://github.com/Lifailon/Kinozal-Bot 193 | # Копируем скрипт и файл конфигурации 194 | cp Kinozal-Bot/scripts/kinozal-bot.sh kinozal-bot 195 | cp Kinozal-Bot/scripts/kinozal-bot.conf kinozal-bot 196 | # Удаляем остальные файлы проекта 197 | rm -r Kinozal-Bot 198 | # Переходим в директорию с конфигурацией для ее редактирования 199 | cd kinozal-bot 200 | ``` 201 | 202 | В примере используется директория `kinozal-bot` в корне домашнего каталога текущего пользователя. 203 | 204 | Так выглядит состав файлов на рабочем экземпляре: 205 | 206 |

207 | 208 |

209 | 210 | ## ⚙️ Настройка 211 | 212 | Для работы бота, необходимо подготовить свою домашнюю среду, все настройки подключения задаются в конфигурационном файле: 📑 **[kinozal-bot.conf](https://github.com/Lifailon/Kinozal-Bot/blob/rsa/scripts/kinozal-bot.conf)**. 213 | 214 | Возможно, у вас уже подготовлены все настройки для управления и вам достаточно только заполнить конфигурацию. Для редактирования, вы можете воспользоваться любым встроенным консольным редактором, например, `nano kinozal-bot.conf` или [WinSCP](https://winscp.net/eng/download.php). 215 | 216 | 💡 Имея уже подготовленный файл, можно очень быстро перезапустить бота на любой другой машине в домашней сети. 217 | 218 | 1. Зарегистрируйте аккаунт на сайте *[Кинозал](https://kinozal.tv)* и заполнить параметры конфигурации: 219 | 220 | `KZ_PROFILE="id_you_profile"` - идентификатор вашего профиля (используется для получения информации из профиля Кинозал) \ 221 | `KZ_USER="LOGIN"` - логин (используется на этапе получения инфо хэш из раздачи, содержимого раздачи и загрузки торрент-файлов) \ 222 | `KZ_PASS="PASSWORD"` - пароль 223 | 224 | 2. Если у вас заблокирован доступ в *Кинозал*, вы можете воспользоваться VPN или Proxy сервером, через который бот сможет проксировать свои запросы. 225 | 226 | Я использую **HandyCache (Proxy)** в системе *Windows*, рядом с которым запущена бесплатная версия *VPN Hotspot Shield* в режиме **Split Tunneling** до сайта Кинозал (в таком режиме не будет доступен сервис *TMDB API*), при котором трафик до указанного сайта проходит через VPN туннель и не затрагивает другие сервисы, тем самым не ограничивая загрузку торрентов на хостовой машине. 227 | 228 | > Вы также можете настроить выделенную виртуальную машину для подобного стэка, и даже добавить в него *Wi-Fi* модуль для организации второй домашней сети без необходимости использовать раздельное туннелирование. 229 | 230 | - 2.1. Настройка Proxy-сервера: 231 | 232 | `PROXY="True"` - включить использование прокси сервера в curl-запросах при обращении к Кинозал и TMDB \ 233 | `PROXY_ADDR="http://192.168.3.100:9090"` - адрес сервера и порт, на котором слушает запросы Proxy-сервер \ 234 | `PROXY_USER="LOGIN"` \ 235 | `PROXY_PASS="PASSWORD"` 236 | 237 | - Для удаленного управления VPN-соединением в системе Windows реализован проект [vpnc](https://github.com/Lifailon/vpnc) и интегрирован бот. 238 | 239 | Для запуска и настройки, следуйте инструкциям на [странице проекта](https://github.com/Lifailon/vpnc/blob/main/README_ru.md). После того, как у вас будет настроена конфигурация и запущен исполняемый файл (который может быть добавлен в автозагрузку), заполните параметр адреса сервера: 240 | 241 | `VPNC_ADDR="http://192.168.3.100:1780"` 242 | 243 | Данное решение актуально только в том случае, если ваш клиент запущен на одной машине с другими сервисами (и поддерживает автоподключение при запуске) и не используется режим раздельного туннелирования. Такой подход удобен в первую очередь для отключения соединения на время загрузки файлов большого объема. 244 | 245 | - 2.2. Поддерживается использования обратного прокси сервера, на котором есть прямой доступ к трекеру, например, через [froxy](https://github.com/Lifailon/froxy): 246 | 247 | Загрузите [исполняемый файл](https://github.com/Lifailon/froxy/releases) и запустите обратный прокси сервер на машине с доступом к Кинозал: 248 | 249 | ``` 250 | froxy --local 192.168.3.100:8443 --remote https://kinozal.tv 251 | ``` 252 | 253 | Или запустите в контейнере: 254 | 255 | ```shell 256 | docker pull lifailon/froxy:latest 257 | docker run -d --name froxy -e SOCKS=0 -e FORWARD=0 -e LOCAL="*:8443" -e REMOTE="https://kinozal.tv" -e USER="false" -e PASSWORD="false" -p 8443:8443 --restart=unless-stopped lifailon/froxy 258 | ``` 259 | 260 | Отключите в конфигурации использование Proxy-сервера и замените адрес Кинозал на адрес обратного прокси сервера: 261 | 262 | `PROXY="False"` \ 263 | `KZ_ADDR="http://192.168.3.100:8443"` 264 | 265 | Вы можете ознакомиться на странице [репозитория](https://github.com/Lifailon/froxy/blob/main/README_RU.md), что такое обратный прокси сервер и какие задачи он решает. 266 | 267 | - 2.3. Также возможно развернуть свое публичное зеркало с использованием **функции serverless** на базе `Next.js` для доступа к трекеру без использования VPN. 268 | 269 | > Рекомендуется запустить свое приложение из исходного репозитория [Kinozal-Proxy](https://github.com/Lifailon/Kinozal-Proxy), во избежании излишней нагрузки на один экземпляр сервера и сохранности ваших авторизационных данных в трекере. 270 | 271 | Для этого, вопользуйтесь кнопкой ниже и следуйте инструкциям: 272 | 273 | [![Vercel](https://img.shields.io/badge/Deploy-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white)](https://vercel.com/new/torapi/clone?repository-url=https://github.com/lifailon/Kinozal-Proxy) 274 | 275 | 3. Создайте своего Telegram бота через **[@BotFather](https://t.me/BotFather)** используя интуитивно понятный интерфейс и получите API-токен доступа. Что бы получить ваш **чат id**, напишите любое сообщение вашему боту и перешлите его **[Get My ID](https://t.me/getmyid_arel_bot)**, после чего заполните параметры: 276 | 277 | `TG_TOKEN="6873341222:AAFnVgfavenjwbKutRwROQQBya_XXXXXXXX"` - используется для чтения и отправки сообщений ботом \ 278 | `TG_CHAT="8888888888,999999999"` - id всех чатов, которые будут иметь доступа к боту 279 | 280 | > По мимо этого, id можно получить в логе работы бота из запросов новых клиентов (`>>> Request`), которые вы сможете добавить в конфигурацию через запятую. 281 | 282 | 4. [Установите](https://www.qbittorrent.org/download) и настройте торрент клиент *qBittorrent*. 283 | 284 | - 4.1. Включите **Веб-интерфейс** в настройках приложения: 285 | 286 |

287 | 288 |

289 | 290 | Укажите параметры подключения к клиенту: 291 | 292 | `QB_ADDR="http://192.168.3.100:8888"` - указать URL-адрес, где указан протокол (по умолчанию, **http**), ip-адрес машины, на которой запущен qBittorrent и порт (задается в настройках **Веб-интерфейса**) \ 293 | `QB_USER="LOGIN"` - имя пользователя, указывается в поле **Аутентификация** в настройках **Веб-интерфейса** \ 294 | `QB_PASS="PASSWORD"` - пароль, указывается в поле **Аутентификация** в настройках **Веб-интерфейса** 295 | 296 | - 4.2. Определите директорию для загрузки контента в *qBittorrent* по умолчанию. 297 | 298 | 💡 Это должна быть директория, которая будет добавлена на сервер Plex, что бы в дальнейшем можно было синхронизировать загруженный контент, используя бот. 299 | 300 |

301 | 302 |

303 | 304 | 5. [Установите](https://transmissionbt.com/download) и настройте *Transmission* для управления клиентом с помощью бота: 305 | 306 |

307 | 308 |

309 | 310 | Укажите параметры подключения к клиенту: 311 | 312 | ```shell 313 | TRANS_ADDR="http://192.168.3.100:9091" 314 | TRANS_USER="LOGIN" 315 | TRANS_PASS="PASSWORD" 316 | ``` 317 | 318 | Возможно использовать как один, так и оба торрент клиентов для синхронизации с сервером Plex. 319 | 320 | ☁️ Вы также можете настроить **второй клиент для синхронизации с любым облачным хранилищем**, что бы иметь удаленный доступ к файлам, например, с телефона, т.к. для удаленного непрерывного просмотра или загрузки контента с локального сервера Plex **требуется подписка [Plex Pass](https://www.plex.tv/plex-pass)**. Для этого укажите любую дочернюю директорию внутри вашего облачного хранилища (необходимо, что бы ваше облако было подключено к файловой системе компьютера) для загрузки контента в клиенте *Transmission* (или *qBittorrent*) по умолчанию. После загрузки контента, вы сможете получить к нему доступ на любом удаленном устройстве в режиме онлайн или для загрузки, без необходимости ожидания сидов или пиров. 321 | 322 | 6. Установите [Plex Media Server](https://www.plex.tv/ru/media-server-downloads/?cat=computer&plat=windows) и [получите токен доступа](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token). 323 | 324 | Так как нет возможности напрямую получить токент доступа в веб-интерфейсе, можно воспользоваться панелью разработчика в браузере. Откройте [Development Tools](https://developer.chrome.com/docs/devtools?hl=ru) нажатием кнопки `F12` и перейдите на вкладку **сеть (network)**, обновите страницу интерфейса вашего сервера Plex, после чего вы сможете увидеть токен в любом из url-запросов (X-Plex-Token=**ваш_токена**). Передайте адрес сервера (по умолчанию, порт **32400**) и содержимое токена в параметры: 325 | 326 | ```shell 327 | PLEX_ADDR="http://192.168.3.100:32400" 328 | PLEX_TOKEN="ваш_токена" 329 | ``` 330 | 331 |

332 | 333 |

334 | 335 | 💡 Создайте новую секцию на сервере Plex и укажите путь к директории хранения вашего контента, на которую **уже настроен** (п.4 и п.5) клиент *qBittorrent* или *Transmission* **по умолчанию**: 336 | 337 |

338 | 339 |

340 | 341 | 7. Настройка подключения к [TMDB](https://www.themoviedb.org): 342 | 343 | 💡 Как и в случае с настройкой второго торрент клиента, данный пункт является *опциональным*. 344 | 345 | [Зарегестрируйте аккаунт](https://www.themoviedb.org/signup) на сайте **The Movie Database** и [выпустите ключ доступа](https://www.themoviedb.org/settings/api) к api, после чего заполните параметры конфигурации (возможно указать ключ или токен на выбор): 346 | 347 | ``` 348 | TMDB_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 349 | TMDB_TOKEN="XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX" 350 | ``` 351 | 352 | 8. Путь для хранения торрент файлов, *cookie* (временные файлы, которые используются для авторизации в *Кинозал* и *qBittorrent*), а также лог-файлов и его размер (поддерживается ротация) на сервере **задаются в конфигурации**: 353 | 354 | ```shell 355 | path="/home/lifailon/kinozal-bot" 356 | log_size_mbyte=10 357 | ``` 358 | 359 | Все запросы к боту, а также его ответы логируются. 360 | 361 | ## 🔌 Подключение и управление 362 | 363 | Перед запуском, вы можете проверить подключение к сервисам, в случае успеха, вы получите текущую версию приложения: 364 | 365 | ```shell 366 | cd ~/kinozal-bot 367 | bash kinozal-bot.sh version 368 | 369 | qBittorrent Client: 4.6.5 (api: 2.9.3) 370 | Transmission Client: 4.0.6 (38c164933e) 371 | Plex Media Server: 1.40.0.7998-c29d4c0c8 372 | ``` 373 | 374 | - Используйте интерпретатор **Bash** для запуска (**root** права не требуются): 375 | 376 | ```shell 377 | bash kinozal-bot.sh start bot 378 | ``` 379 | 380 | - Узнать статус работы и количество активных процессов: 381 | 382 | ```shell 383 | bash kinozal-bot.sh status 384 | 385 | [INFO] 14:38:46: Server running. Count running process: 4 386 | ``` 387 | 388 | - Проверка подключения к *qBittorrent*: 389 | 390 | Если настройки заданы правильно, вы можете отобразить журнал работы *qBittorrent* клиента в своей консоли: 391 | 392 | ```shell 393 | bash kinozal-bot.sh log qb 394 | bash kinozal-bot.sh log qb all 395 | ``` 396 | 397 | - Отобразить журнал работы системы и сервера *Plex*: 398 | 399 | ```shell 400 | bash kinozal-bot.sh log plex system 401 | bash kinozal-bot.sh log plex system all 402 | bash kinozal-bot.sh log plex server 403 | bash kinozal-bot.sh log plex server all 404 | ``` 405 | 406 | - Вывести журнал работы бота: 407 | 408 | ```shell 409 | bash kinozal-bot.sh log bot 410 | bash kinozal-bot.sh log bot 50 411 | ``` 412 | 413 | - Остановка бота и всех его дочерних процессов: 414 | 415 | ```shell 416 | bash kinozal-bot.sh stop 417 | bash kinozal-bot.sh status 418 | 419 | [INFO] 14:40:16: Server not running. Count running process: 0 420 | ``` 421 | 422 | ## 🐧 Служба (unit) 423 | 424 | > Вы можете пропустить этот шаг и запустить бота в контейнере 🐳 [Docker](#-docker) 425 | 426 | Если все настройки заданы и подключение проверено, можно запустить бота как службу (*unit*) **systemd**, что бы автоматизировать процесс запуска в случае перезагрузки системы, а также передать поток логов в системный журнал (удобно для удаленного мониторинга, например, через `rsyslog` в [Graylog](https://github.com/Graylog2/graylog2-server)). 427 | 428 | - Создайте файл службы и откройте его в любом текстовом редакторе: 429 | 430 | ``` 431 | touch /etc/systemd/system/kinozal-bot.service 432 | nano /etc/systemd/system/kinozal-bot.service 433 | ``` 434 | 435 | - Скопируйте в файл следующее [содержимое](https://github.com/Lifailon/Kinozal-Bot/blob/rsa/scripts/kinozal-bot.service): 436 | 437 | ``` 438 | [Unit] 439 | Description=Telegram bot for kinozal.tv torrent tracker, remote managment qBittorrent and Plex Media Server 440 | After=network.target 441 | 442 | [Service] 443 | ExecStart=/bin/bash "/home/lifailon/kinozal-bot/kinozal-bot.sh" start bot service 444 | ExecReload=/bin/kill -HUP $MAINPID 445 | Restart=on-failure 446 | Type=forking 447 | 448 | [Install] 449 | WantedBy=multi-user.target 450 | ``` 451 | 452 | 💡 Замените путь к скрипту сервера в параметре запуска `ExecStart` на свой. 453 | 454 | - Примените настройки, включите автозапуск и запустите службу: 455 | 456 | ```shell 457 | systemctl daemon-reload 458 | systemctl enable kinozal-bot 459 | systemctl start kinozal-bot 460 | systemctl status kinozal-bot 461 | ``` 462 | 463 | После этого возможно управлять запуском, используя команды: `start`, `stop` и `restart`. 464 | 465 | Для просмотра журнала работы бота, можете использовать утилиту `journalctl`: 466 | 467 | ```shell 468 | journalctl -fu kinozal-bot 469 | ``` 470 | 471 | ## 🐳 Контейнер 472 | 473 | Запуск в контейнере является альтернативой настройки службы `systemd`. Обработка ответов происходит заметно быстрее (сравнительно с локальным запуском на малопроизводительных системах), по этому такой способ является **рекомендуемым**. 474 | 475 | - Перейдите в директорию со скриптом и **настроенным** файлом конфигурации: 476 | 477 | ```shell 478 | cd ~/kinozal-bot 479 | ``` 480 | 481 | - Создайте [dockerfile](https://github.com/Lifailon/Kinozal-Bot/blob/rsa/dockerfile) с содержимым: 482 | 483 | ```dockerfile 484 | FROM alpine:latest 485 | WORKDIR /home/lifailon/kinozal-bot 486 | RUN apk add --no-cache bash coreutils curl grep sed gawk jq tzdata 487 | ENV TZ=Etc/GMT-3 488 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 489 | COPY kinozal-bot.sh . 490 | COPY kinozal-bot.conf . 491 | RUN chmod +x kinozal-bot.sh 492 | CMD ["bash", "-c", "./kinozal-bot.sh start bot docker"] 493 | ``` 494 | 495 | 💡 Рабочая директория (`WORKDIR`) соответствует параметру `path` в конфигурации и используются для синхронизации между локальным запуском (для отладки) и в контейнере, по этому **измените путь на свой**. 496 | 497 | ### Docker 498 | 499 | Соберите образ и запустите контейнер в Docker: 500 | 501 | ```shell 502 | sudo docker build -t kinozal-bot . 503 | sudo docker run -d --name kinozal-bot -v /home/lifailon/kinozal-bot/torrents:/home/lifailon/kinozal-bot/torrents --restart=unless-stopped kinozal-bot 504 | ``` 505 | 506 | Размер образа составляет 20 МБайт. Режим `unless-stopped` отвечает за перезапуск контейнера в случае перезагрузки системы или другого сбоя, за исключением остановки контейнера с помощью команды: `docker stop kinozal-bot`. 507 | 508 | При создании контейнера используется механизм **bind mount** (`-v` `путь в системе`**:**`путь в контейнере`), это удобно для синхронизации и хранения торрент файлов (`.torrent`) с локальной системой, тем самым при запуске бота в контейнере или локальной системе будет доступ к одному и томуже составу торрент файлов, а после удаления контейнера и образа файлы будут сохранены в системе. 509 | 510 | ### Podman 511 | 512 | Так как бот для своей работы не требует `root` прав (использование команды `sudo`), то проще и правильнее запустить контейнер в системе [Podman](https://github.com/containers/podman): 513 | 514 | ```shell 515 | podman build -f dockerfile -t kinozal-bot . 516 | podman run -d --name kinozal-bot -v /home/lifailon/kinozal-bot/torrents:/home/lifailon/kinozal-bot/torrents kinozal-bot 517 | ``` 518 | 519 | Так как *Podman* не использует службы для своей работы, для автоматического запуска бота при перезагрузке системы возможно создать пользовательскую службу: 520 | 521 | ```shell 522 | # Остановить контейнер 523 | podman stop kinozal-bot 524 | # Скопируйте содержимое службы из GitHub 525 | mkdir -p ~/.config/systemd/user && touch ~/.config/systemd/user/kinozal-bot-podman.service 526 | curl -s "https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/refs/heads/rsa/scripts/kinozal-bot-podman.service" > ~/.config/systemd/user/kinozal-bot-podman.service 527 | # Запустить службу и проверить работу контейнера 528 | systemctl --user start kinozal-bot-podman.service 529 | podman ps 530 | # Включить поддержку пользовательских служб и добавить в автозагрузку 531 | loginctl enable-linger $(whoami) 532 | systemctl --user enable kinozal-bot-podman.service 533 | ``` 534 | 535 | ### Мониторинг 536 | 537 | Вы можете управлять запуском контейнара с помощью команд: 538 | 539 | ```shell 540 | kinozal-bot 541 | ``` 542 | 543 | Для просмотра журналов контейнера используется команда: ` logs kinozal-bot`. 544 | 545 | Что бы не вызывать каждый раз команду `logs` для просмотра логов контейнера или других журналов, установите терминальный пользовательский интерфейс [lazyjournal](https://github.com/Lifailon/lazyjournal) для быстрого мониторинга и фильтрации логов контейнеров *Docker* и *Podman*, юнитов `systemd` или лог-файлов в системе. 546 | 547 | Пример чтения локального файла `kinozal-bot.log`: 548 | 549 | ![Image alt](image/settings/lazyjournal-read-log-file.jpg) 550 | 551 | > В примере используются запросы с разными фильтрами для поиска в базе Кинозал. 552 | 553 | Для мониторинга журналов контейнеров через веб-интерфейс, используйте [Dozzle](https://github.com/amir20/dozzle). 554 | 555 | ![Image alt](image/settings/docker-dozzle.jpg) 556 | 557 | Команда для быстрого удаления контейнера и образа: 558 | 559 | ```shell 560 | sudo docker stop kinozal-bot && docker rm kinozal-bot && docker rmi kinozal-bot && docker rmi alpine 561 | ``` 562 | 563 | Вы также можете сохранить образ контейнера с помощью одной команды. Это удобно, в случае переустановки системы или переноса бота на другую машину (больше не понадобится заполнять конфигурацию и собирать образ заново): 564 | 565 | ```shell 566 | sudo docker save -o kinozal-bot.tar kinozal-bot 567 | ``` 568 | 569 | На другой системе необходимо только загрузить файл образа и запустить контейнер: 570 | 571 | ```shell 572 | sudo docker load -i kinozal-bot.tar 573 | sudo docker run -d --name kinozal-bot --restart=unless-stopped kinozal-bot 574 | ``` 575 | 576 | ## 📌 Меню бота 577 | 578 | Что бы создать и закрепить список основных команд для быстрого вызова через меню бота, перейдите в управление вашим ботом через **[BotFather](https://t.me/BotFather)**, выберите `Edit Bot` и настройте список команд с помощью `Edit commands`. Передайте список команд, как на примере ниже (вы можете изменить список команд, как и их описание на свое усмотрение): 579 | 580 | ``` 581 | search_id - 🔎 Поиск в Кинозал по id 582 | search_title - 🍿 Поиск по названию 583 | search_actor - 👥 Поиск по актеру 584 | research - 🔄 Повторить последний поиск 585 | torrent_files - 🗂 Торрент файлы 586 | status - 🟢 qBittorrent 587 | trans_status - 🔲 Transmission 588 | add_torrent - ➕🧲 Добавить торрент по инфо хеш 589 | add_url - ➕🌐 Добавить торрент по url-адресу 590 | plex_info - 🟠 Plex 591 | find - 🔍 Поиск в Plex 592 | vpnc_status - 🛡 VPN 593 | ``` 594 | 595 | Слева от поля ввода текста в интерфейсе вашего бота появится меню для быстрого вызова команд, которые возможно выбирать (для вставки текстом в поле ввода) с помощью кнопки `Tab`, или продолжительным нажатием через мобильный интерфейс. 596 | 597 | --- 598 | 599 | ## 🙋‍♂️ Список команд 600 | 601 | Список всех доступных команд (за исключением `/search_title`, `/search_actor`, `/add_hash` и `/add_url`) **автоматизирован** через меню интерфейса бота с помощью кнопок. 602 | 603 | `/search_title` - Поиск в Кинозал по названию (вначале запроса принимает год выхода для фильтрации) \ 604 | `/profile` - Профиль Кинозал (количество доступных для загрузки торрент файлов, статистика загрузки и отдачи, время сид и пир) \ 605 | `/torrent_files` - Список загруженных торрент файлов с возможностью удаления \ 606 | `/status` - список и статус всех текущих торрентов, добавленных в торрент-клиент qBittorrent \ 607 | `/plex_info` - Список секций на сервере Plex для доступа к их контенту \ 608 | `/download_torrent ` - Загрузить торрент файл (передать два параметра: id и имя файла без пробелов) \ 609 | `/delete_torrent_file_` - Удалить торрент файл по id \ 610 | `/search_id ` - Поиск в Кинозал по id \ 611 | `/download_video_` - Добавить торрент файла на загрузку в qBittorrent \ 612 | `/info ` - Статус загрузки указанного торрента (передать параметр: hash торрента) \ 613 | `/torrent_content ` - Содержимое торрента (список файлов) \ 614 | `/file_torrent ` - Статус выбранного торрент файла (передать параметр: порядковый индекс файла) \ 615 | `/torrent_priority ` - Изменить приоритет выбранного файла в /file_torrent (передать параметр: номер приоритета) \ 616 | `/pause ` - Установить на паузу \ 617 | `/resume ` - Восстановить загрузку \ 618 | `/delete_torrent ` - Удалить торрент из клиента \ 619 | `/delete_video ` - Удалить вместе с данными \ 620 | `/plex_status_` - Информация о выбранной секции в Plex (передать параметр: ключ секции) \ 621 | `/plex_sync_` - Синхронизировать выбранную секцию в Plex \ 622 | `/plex_folder_` - Получить список директорий и файлов в выбранной секции \ 623 | `/find` - Поиск контента в Plex по пути (передать параметр: конечную точку) 624 | 625 | - Добавлено в версии 0.4.1: 626 | 627 | `/plex_last_views` - Список последних просмотров (дата просмотра и время остановки) в Plex \ 628 | `/plex_last_added` - Список последних добавленных файлов в Plex \ 629 | `/kinozal_description ` - Описание фильма из Кинозал (удалено из меню в версии 0.4.5) 630 | 631 | - Добавлено в версии 0.4.2: 632 | 633 | `/kinozal_actors ` - Список актеров из Кинозал (передать параметр: id kinozal) \ 634 | `/actor ` - Описание, поиск актера и его фильмографии из Кинозала и ссылка на Кинопоиск (передать параметр: имя актера) \ 635 | `/kinopoisk_movie ` - Информация о фильме из Кинопоиск по id kinopoisk (удалено из меню в версии 0.4.5) 636 | 637 | - Добавлено в версии 0.4.3: 638 | 639 | Поддержка [WinAPI](https://github.com/Lifailon/WinAPI) (временно отключено в версии 0.4.4). 640 | 641 | - Добавлено в версии 0.4.4: 642 | 643 | `/search_title ` - Поиск с фильтрацией по году выхода и формату разрешения \ 644 | `/research` - Повторить последний поиск (id не требуется) \ 645 | `/file_list` - Извлечь список файлов и их размер из раздачи \ 646 | `/send_torrent_file_id` - Отправка загруженного торрент-файла в Telegram \ 647 | `/send_last_torrent_file` - Отправить последний загруженный торрент-файл \ 648 | `/send_all_torrent_files` - Отправить все загруженные торрент-файлы \ 649 | `/skip_all_files <hash>` - Пропустить загрузку всех файлов путем изменения приоритета в qBittorrent \ 650 | `/normal_all_files <hash>` - Восстановить загрузку всех файлов \ 651 | `/add_torrent <hash>` - Добавить раздачу на загрузку в qBittorrent по инфо хэш \ 652 | `/get_torrent <hash>` - Выгрузить торрент файл на сервер по инфо хэш и отправить в телеграмм \ 653 | `/torrent_recheck <hash>` - Проверить торрент файл \ 654 | `/torrent_limit` - Переключить альтернативные лимиты скорости загрузки и отдачи 655 | 656 | - Добавлено в версии 0.4.5: 657 | 658 | `/search_actor <name>` - Поиск актеров в базе Кинозал (возвращает список найденных актеров) \ 659 | `/actor <search/list> <name>` - Первый параметр принимает тип возврата (`/kinozal_actors` или `/search_actor`) \ 660 | `/trans_status` - Список и статус всез торрент в клиенте Transmission \ 661 | `/trans_info <id>` - Получить подробную информацию о торренте \ 662 | `/trans_file_all <id> <skip/resume>` - Изменить приоритет загрузки всех торрент файлов выбранной раздачи по id (пропустить или возобновить загрузку и выставить нормальный приоритет) \ 663 | `/trans_file_select <id> <file_index>` - Переключить приоритет выбранного файла (пропустить или высокий приоритет) \ 664 | `/trans_pause <id> <start/stop>` - установить на паузу или возобновить \ 665 | `/trans_remove <id> <false/true>` - удалить торрент и данные \ 666 | `/trans_set_alt_speed` - переключить лимит альтернативной скорости \ 667 | `/add_hash <qbit/trans> <hash>` - Добавить торрент по инфо хеш в указанный клиент \ 668 | `/download_trans_<id>` - Добавить торрент файла на загрузку в Transmission клиент \ 669 | `/add_url <url>` - Добавить торрент по url-адресу с выбором клиента через меню \ 670 | `/add_trans_url <url>` - Добавить торрент по url-адресу в Transmission клиент \ 671 | `/add_qbit_url <url>` - Добавить торрент по url-адресу в qBittorrent клиент \ 672 | `/torrent_reannounce <hash/all>` - Принудительно повторно анонсировать (запросить у трекера больше участников) для выбранного торрента в qBittorrent клиенте \ 673 | `/tmdb_info <kinozal_id>` - Получить информацию о фильме или сериале через TMDB API \ 674 | `/tmdb_actor <tmdb_id> <type>` - Получить список актеров \ 675 | `/tmdb_season_episodes <tmdb_id> <season_number>` - Список серий в указанном сезоне \ 676 | `/tmdb_select_episode <tmdb_id> <season_number> <episode_number>` - Информация по выбранной серии и список приглашенных актеров \ 677 | `/tmdb_person <person_id>` - Информация по актеру и ссылки на TMDB и IMDb 678 | 679 | --- 680 | 681 | **Примеры запросов:** 682 | 683 | 684 | - 🔍 Поиск в Кинозал по id: 685 | 686 | `/search_id 1940284` 687 | 688 | - 🍿 Поиск по названию фильма или сериала: 689 | 690 | `/search_title Рокки 2` \ 691 | `/search_title Рокки 4` 692 | 693 | - Поиск с фильтрацией по типу (фильм или сериал): 694 | 695 | `/search_title Рокки 2 фильм` 696 | 697 | - Поиск фильмов с фильтрацией по году выхода: 698 | 699 | `/search_title 1979 Рокки фильм` \ 700 | `/search_title Рокки 1985 фильм` 701 | 702 | - Поиск фильмов с фильтрацией по году выхода и формату разрешения (`HD`, `FullHD` или `4K`): 703 | 704 | `/search_title Рокки фильм 1979 720` \ 705 | `/search_title Рокки фильм 1979 1080` \ 706 | `/search_title Рокки фильм 1979 2160` 707 | 708 | - 👥 Поиск актера по имени в базе Кинозал: 709 | 710 | `/search_actor "Алан"` \ 711 | `/search_actor "Сильвестр"` 712 | 713 | - Получить биографию и фильмографию указанного актера: 714 | 715 | `/actor search Алан Тьюдик` \ 716 | `/actor list Сильвестр Сталлоне` 717 | 718 | - 🔄Повторить последний запрос поиска для фильма/сериала или актера: 719 | 720 | `/research` 721 | 722 | - 🧲 Добавить торрент по инфо хеш на загрузку с выбором клиента через меню: 723 | 724 | `/add_torrent A72BD27A0CE265A3C7965392BC06C25EDD759214` 725 | 726 | - 🧲 Добавить торрент по инфо хеш в указанный торрент клиент: 727 | 728 | `/add_hash qbit A72BD27A0CE265A3C7965392BC06C25EDD759214` \ 729 | `/add_hash trans A72BD27A0CE265A3C7965392BC06C25EDD759214` 730 | 731 | - 🌐 Добавить торрент по url-адресу с выбором клиента через меню: 732 | 733 | `/add_url https://d.rutor.info/download/869858` \ 734 | `/add_url https://nnmclub.to/forum/download.php?id=1308422` 735 | 736 | - 🔳 Добавить торрент в Transmission клиент: 737 | 738 | `/add_trans_url https://d.rutor.info/download/869858` 739 | 740 | - 🐸 Добавить торрент в qBittorrent клиент: 741 | 742 | `/add_qbit_url https://nnmclub.to/forum/download.php?id=1308422` 743 | 744 | --- 745 | 746 | ## 🎉 Другие проекты 747 | 748 | - ✨ [TorAPI](https://github.com/Lifailon/TorAPI/blob/main/README_RU.md) - неофициальный и публичный API (**backend**) для торрент трекеров RuTracker, Kinozal, RuTor и NoNameClub. Используется для быстрого и централизованного поиска раздач, получения торрент файлов, магнитных ссылок и подробной информации о раздаче по названию фильма, сериала или идентификатору раздачи, а также предоставляет новостную RSS ленту для всех провайдеров с фильтрацией по категориям. 749 | 750 | - 🔎 [LibreKinopoisk](https://github.com/Lifailon/LibreKinopoisk) - расширение для Google Chrome, [Mozilla Firefox](https://addons.mozilla.org/ru/firefox/addon/librekinopoisk) и мобильных устройств, которое добавляет кнопки на сайт [Кинопоиск](http://kinopoisk.ru) и в контекстное меню браузера, а также реализует интерфейс [TorAPI](https://github.com/Lifailon/TorAPI) для быстрого поиска фильмов и сериалов в открытых источниках в стиле [Jackett](https://github.com/Jackett/Jackett) без необходимости в VPN и настройки сервера. 751 | 752 | - 📖 [lazyjournal](https://github.com/Lifailon/lazyjournal) - терминальный пользовательский интерфейс для `journalctl` (инструмент для чтения логов из системы [systemd-journald](https://github.com/systemd/systemd/tree/main/src/journal)), логов в файловой системе (включая архивные, например, `Apache` или `Nginx`), а также контейнеров `Docker` и `Podman` для быстрого просмотра и фильтрации в режиме реального времени с поддержкой нечеткого поиска, регулярных выражений (в стиле `fzf` и `grep`) и покраской вывода, написанный на языке `Go` с использованием библиотеки [gocui](https://github.com/awesome-gocui/gocui). 753 | 754 | - 📡 [Froxy](https://github.com/Lifailon/froxy/blob/main/README_RU.md) - кроссплатформенная утилита командной строки для реализации SOCKS, HTTP и обратного прокси сервера на базе **.NET**. Поддерживается протокол **SOCKS5** для туннелирования TCP трафика и **HTTP** протокол для прямого (классического) проксирования любого **HTTPS** трафика (`CONNECT` запросы), а также **TCP**, **UDP** и **HTTP/HTTPS** протоколы для обратоного проксирования. Для переадресации веб-траффика через обратный прокси поддерживаются `GET` и `POST` запросы с передачей заголовков и тела запроса от клиента, что позволяет использовать `API` запросы и проходить авторизацию на сайтах (передача cookie). 755 | 756 | - 🛡 [VPNc](https://github.com/Lifailon/vpnc/blob/main/README_ru.md) - универсальный инструмент для автоматического (локального) и удаленного управления VPN соединением через настольное приложение (системный трей) и `API` на базе `ASP.NET Core`. 757 | 758 | - ❤️ [WebTorrent Desktop api](https://github.com/Lifailon/webtorrent-desktop-api) - форк клиента [WebTorrent Desktop](https://github.com/webtorrent/webtorrent-desktop), в котором добавлен механизм удаленного управления через `API` на базе [Express.js Framework](https://github.com/expressjs/express). -------------------------------------------------------------------------------- /dockerfile: -------------------------------------------------------------------------------- 1 | # Базовый легковесный образ 2 | FROM alpine:latest 3 | 4 | # Устанавливаем рабочую директорию как в конфигурации для локального запуска 5 | WORKDIR /home/lifailon/kinozal-bot 6 | 7 | # Установка зависимостей 8 | RUN apk add --no-cache bash coreutils curl grep sed gawk jq tzdata 9 | 10 | # Установка часового пояса 11 | ENV TZ=Etc/GMT-3 12 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 13 | 14 | # Копируем скрипт и конфигурацию 15 | COPY kinozal-bot.sh . 16 | COPY kinozal-bot.conf . 17 | 18 | # Права на запуск скрипта 19 | RUN chmod +x kinozal-bot.sh 20 | 21 | # Запускаем потоки сервера и логируем вывод работы бота в консоль 22 | CMD ["bash", "-c", "./kinozal-bot.sh start bot docker"] -------------------------------------------------------------------------------- /image/examples/kinozal-info.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/kinozal-info.jpg -------------------------------------------------------------------------------- /image/examples/kinozal-news-webtorrent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/kinozal-news-webtorrent.jpg -------------------------------------------------------------------------------- /image/examples/magnet-download.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/magnet-download.jpg -------------------------------------------------------------------------------- /image/examples/magnet-redirect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/magnet-redirect.jpg -------------------------------------------------------------------------------- /image/examples/plex-file-list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/plex-file-list.jpg -------------------------------------------------------------------------------- /image/examples/plex-sync.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/plex-sync.jpg -------------------------------------------------------------------------------- /image/examples/qbittorrent-files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/qbittorrent-files.jpg -------------------------------------------------------------------------------- /image/examples/qbittorrent-status.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/qbittorrent-status.jpg -------------------------------------------------------------------------------- /image/examples/search-actor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/search-actor.jpg -------------------------------------------------------------------------------- /image/examples/search-all.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/search-all.jpg -------------------------------------------------------------------------------- /image/examples/search-and-download.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/search-and-download.gif -------------------------------------------------------------------------------- /image/examples/search-filter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/search-filter.jpg -------------------------------------------------------------------------------- /image/examples/tmdb-info.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/tmdb-info.jpg -------------------------------------------------------------------------------- /image/examples/torrent-files-and-kinozal-profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/torrent-files-and-kinozal-profile.jpg -------------------------------------------------------------------------------- /image/examples/torrent-files-send-telegram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/torrent-files-send-telegram.jpg -------------------------------------------------------------------------------- /image/examples/transmission.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/examples/transmission.jpg -------------------------------------------------------------------------------- /image/logo/kinozal-bot-256px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/logo/kinozal-bot-256px.png -------------------------------------------------------------------------------- /image/logo/kinozal-bot-512px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/logo/kinozal-bot-512px.png -------------------------------------------------------------------------------- /image/logo/kinozal-news-256px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/logo/kinozal-news-256px.png -------------------------------------------------------------------------------- /image/logo/kinozal-news-512px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/logo/kinozal-news-512px.png -------------------------------------------------------------------------------- /image/settings/docker-dozzle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/docker-dozzle.jpg -------------------------------------------------------------------------------- /image/settings/kinozal-bot-files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/kinozal-bot-files.jpg -------------------------------------------------------------------------------- /image/settings/lazyjournal-read-log-file.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/lazyjournal-read-log-file.jpg -------------------------------------------------------------------------------- /image/settings/plex-add-directory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/plex-add-directory.jpg -------------------------------------------------------------------------------- /image/settings/plex-token.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/plex-token.jpg -------------------------------------------------------------------------------- /image/settings/qbittorrent-default-directory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/qbittorrent-default-directory.jpg -------------------------------------------------------------------------------- /image/settings/qbittorrent-settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/qbittorrent-settings.jpg -------------------------------------------------------------------------------- /image/settings/scheme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/scheme.jpg -------------------------------------------------------------------------------- /image/settings/transmission-settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lifailon/Kinozal-Bot/4a1bab2038d3f48d9520a1e4ee02a4cd5d84ca77/image/settings/transmission-settings.jpg -------------------------------------------------------------------------------- /scripts/kinozal-bot-podman.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Telegram bot for Kinozal torrent tracker, remote managment qBittorrent, Transmission and Plex Media Server 3 | Wants=network-online.target 4 | After=network-online.target 5 | 6 | [Service] 7 | Restart=always 8 | ExecStart=/usr/bin/podman start -a kinozal-bot 9 | ExecStop=/usr/bin/podman stop -t 10 kinozal-bot 10 | 11 | [Install] 12 | WantedBy=default.target -------------------------------------------------------------------------------- /scripts/kinozal-bot.conf: -------------------------------------------------------------------------------- 1 | KZ_PROFILE="20631917" 2 | KZ_USER="LOGIN" 3 | KZ_PASS="PASSWORD" 4 | KZ_ADDR="https://kinozal.tv" 5 | 6 | PROXY="False" 7 | PROXY_ADDR="http://192.168.3.100:9090" 8 | PROXY_USER="LOGIN" 9 | PROXY_PASS="PASSWORD" 10 | VPNC_ADDR="http://192.168.3.100:1780" 11 | VPNC_KEY="b1f8e72d-9c34-4a2e-a5f1-3d57b2a1c7f8" 12 | 13 | TG_TOKEN="6873341222:AAFnVgfavenjwbKutRwROQQBya_XXXXXXXX" 14 | TG_CHAT="8888888888,999999999" 15 | QB_ADDR="http://192.168.3.100:8888" 16 | QB_USER="LOGIN" 17 | QB_PASS="PASSWORD" 18 | TRANS_ADDR="http://192.168.3.100:9091" 19 | TRANS_USER="LOGIN" 20 | TRANS_PASS="PASSWORD" 21 | PLEX_ADDR="http://192.168.3.100:32400" 22 | PLEX_TOKEN="XXXXXXXXXXXXXXXXXXXX" 23 | TMDB_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 24 | TMDB_TOKEN="XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX" 25 | 26 | KINOBOX_PLAYERS="False" 27 | TIMEZONE="Etc/GMT-3" 28 | DATA_TIMEZONE="+3" 29 | path="/home/lifailon/kinozal-bot" 30 | log_size_mbyte=10 31 | TIMEOUT_SEC_UPDATE_STATUS=1 32 | 33 | TG_CHANNEL="-1002064864175" 34 | FILTER_YEAR=2024 35 | FILTER_RATING_KP=7 36 | FILTER_RATING_IMDB=7 37 | FILTER_START_POST_HOUR=8 38 | TIMEOUT_SEC_POST=300 39 | TIMEOUT_SEC_ERROR=60 -------------------------------------------------------------------------------- /scripts/kinozal-bot.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Telegram bot for kinozal.tv torrent tracker, remote managment qBittorrent and Plex Media Server 3 | After=network.target 4 | 5 | [Service] 6 | ExecStart=/bin/bash "/home/lifailon/kinozal-bot/kinozal-bot.sh" start bot service 7 | ExecReload=/bin/kill -HUP $MAINPID 8 | Restart=on-failure 9 | Type=forking 10 | 11 | [Install] 12 | WantedBy=multi-user.target --------------------------------------------------------------------------------