Pull to refresh

KODI: собираем удобный и функциональный медиацентр для дома. Часть 8. Telegram-бот для qBittorrent

Reading time 6 min
Views 18K

Начав этот долгий путь построения своего медиацентра с Kodi на борту, я изначально ставил перед ним задачи, немного выходящие за рамки его основного функционала, такие как просмотр фильмов или сериалов. Считаю, что устройство, работающее 24/7 может и должно быть использовано по максимуму. Вот так, постепенно, мой сервер обрастал все новыми и новыми возможностями. Весь этот путь – в предыдущих публикациях.

Одной из основных задач моего сервера – торрент-качалка. Использую ее не только для видео-контента, но и для загрузки какой-то общей информации, как по работе, так и для дома. Нет потребности во включенном ПК и необходимости дожидаться загрузки, оставляя на ночь и так далее. Есть ведь бесшумный медиацентр, который работает и днем и ночью.

И с этой задачей он справляется безупречно. Мне по душе qBittorrent, ввиду его «легкости», «бесплатности» и отличного веб-интерфейса, полностью повторяющего GUI-интерфейс. Для android-устройств есть приложение, с которого также очень удобно управлять загрузками - qBittorrent Controller.

И все бы ничего, но иногда есть потребность добавить торрент на загрузку, находясь вне дома. Варианты с покупкой статического IP-адреса, сервисов DDNS или банального AnyDesk с постоянным доступом меня не устраивали.

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

Изобретать и писать с нуля Telegram-бота не вижу особого смысла, в сети есть масса готовых и стабильных решений. Хотя при большом желании и базовых навыках Python, это тоже вполне реально, учитывая подробную документацию и описание API как со стороны Telegram, так и qBittorrent. Поэтому, если вы преследуете еще и образовательную цель - это отличный повод в чем-то разобраться и сделать самостоятельно.

Сегодня мы воплотим идею с Telegram-ботом в жизнь. Как и прежде, вся реализация будет на базе Kubuntu 20.04. Бота буду использовать с итальянскими корнями - QBittorrentBot. Автор - Mattia Vidoni (ch3p4ll3), как сам он себя описывает – «19yo Italian boy who likes do things» («19-летний итальянский парень, который любит что-то делать»).

И так, приступим. Сначала, мы создадим самого Telegram-бота в мессенджере, а уже потом перейдем к его интеграции и взаимодействию с торрент-клиентом на нашем сервере.

Для регистрации бота открываем в Telegram чат с ботом BotFather. Это самый простой способ, не требующий специальных навыков.

Начинаем общение с BotFather, отправив ему команду на создание нового бота - /newbot.

Вводим имя для бота – например, «Home qBittorrent Control». Следующим шагом вводим username – должно быть уникально в рамках всей социальной сети и на конце содержать «bot» или «_bot». Вводим, если имя неуникально – вам об этом сообщит бот и попросит ввести повторно. Я использовал username – «myqbittorrent_bot», имя свободно, наш бот успешно создан и нам сообщили его токен для доступа к HTTP API. Сохраняем его, он нам еще пригодится.

Теперь можно добавить нашего бота t.me/<имя-бота> и запустить. Пока он ничего, конечно, не умеет и какого-то диалога у вас с ним не выйдет...

В BotFather по команде /mybots вы можете выбрать вашего бота и получить по нему информацию (токен, например, если забыли). Также вы можете редактировать своего бота. Изменить имя или описание, загрузить аватарку («Edit Botpic»). Что я, кстати, и сделал. Для загрузки аватарки используйте изображение с разрешением не менее 250x250 пикселей. Отправлять необходимо как фото, а не файл.

Бот создан, теперь необходимо получить ID вашего аккаунта в Telegram, как администратора этого бота. Что бы его узнать – обратимся к еще одному системному боту – https://t.me/myidbot. По команде /getid вы получите свой ID. Его сохраняем – он нам тоже понадобится чуть позже.

Последнее, что нам нужно от Telegram – это API ID и API HASH. Для получения доступа к API, необходимо перейти по ссылке и зарегистрировать ваше «приложение», как разработчику. На один номер телефона – один ID.

После заполнения всех полей вы получите заветные значения API ID и API HASH.

Итого, по завершении всего описанного выше, у нас на руках должны быть:
• Токен Telegram-бота;
• ID аккаунта в Telegram;
• API ID;
• API HASH.

Дело за малым – осталось прикрутить этого бота к нашему серверу и подружить с qBittorrent.

Сам торрент-клиент мы устанавливали еще в первой публикации. Если у вас он еще не установлен – устанавливаем:

sudo apt-get update
sudo apt-get install qbittorrent

В разделе «Веб-интерфейс» настроек qBittorrent включаем «Веб-интерфейс (удаленное управление)». При необходимости меняем логин и пароль или порт.

Логин по умолчанию – admin;
Пароль – adminadmin;
Порт – 8080.

Теперь займемся внедрением нашего Telegram-бота. Скачиваем бота из репозитория нашего 19-летнего итальянского парня и распаковываем по пути /opt/qbittorrent-bot/ с предварительным созданием этого каталога и предоставлением прав на чтение и запись. Путь можно выбрать, любой, который больше подходит вам, но все инструкции ниже, будут построены именно на этом расположении бота, имейте ввиду.

wget -P /tmp https://github.com/ch3p4ll3/QBittorrentBot/archive/refs/heads/master.zip
sudo mkdir /opt/qbittorrent-bot
sudo chmod -R 0777 /opt/qbittorrent-bot
unzip -j /tmp/master.zip -d /opt/qbittorrent-bot
rm /tmp/master.zip

Теперь нам необходимо сконфигурировать бота, указав все параметры подключения, как к Telegram-боту, так и к торрент-клиенту qBittorrent. Параметры будем указывать в конфигурационном файле config.py. Открываем его любым текстовым редактором. Я использую mcedit:

mcedit /opt/qbittorrent-bot/config.py

Обратите внимание, что изначально для каждого параметра есть getenv() – удаляем, указываем просто в кавычках, как на скриншоте:

QBITTORRENT_IP – IP-адрес сервера, где работает торрент-клиент qBittorrent;
QBITTORRENT_PORT – порт удаленного подключения к qBittorrent;
QBITTORRENT_USER имя пользователя для удаленного подключения к qBittorrent;
QBITTORRENT_PSW - пароль для удаленного подключения к qBittorrent;
TG_TOKEN – токен нашего Telegram-бота;
API_ID – API ID, полученный в личном кабинете разработчика Telegram;
API_HASH – API HASH, полученный в личном кабинете разработчика Telegram;
AUTHORIZED_IDS - ID вашего аккаунта в Telegram.

Скачанный нами бот разработан на Python и требует некоторых python-библиотек, в том числе и библиотеки для работы с qBittorrent API и Telegram API. Для установки всех необходимых зависимостей воспользуемся утилитой pip. Если она не установлена – устанавливаем:

sudo apt-get install pip

Теперь устанавливаем нашего бота:

pip install -r /opt/qbittorrent-bot/requirements.txt

И запускаем его:

python3 /opt/qbittorrent-bot/main.py

В случае успешного запуска в консоли вы должны получить уведомление:

Pyrogram v1.2.9, Copyright (C) 2017-2021 Dan <https://github.com/delivrance>
Licensed under the terms of the GNU Lesser General Public License v3 or later (LGPLv3+)

Для проверки добавляем любой торрент на загрузку в qBittorrent.

Идем в Telegram, к нашему боту и отправляем ему команду /start. Если все сделано правильно, то в ответ вы получите меню управления вашими загрузками. К слову, постоянно вызывать это меню командой /start в дальнейшем не нужно (если вы не будете очищать переписку). При переходе в чат с ботом у вас это меню будет уже там.

Теперь момент истины, нажимаем на пиктограмму «List». Бот вам должен вернуть список всех торрентов.

Пробуйте в режиме онлайн управлять, ставить на паузу конкретный торрент или все, добавлять новые. Все должно работать. Для добавления нового торрента к загрузке можно воспользоваться magnet-ссылкой, отправив ее в чат или же отправить непосредственно torrent-файл. Результат одинаков. Бот должен обработать вашу команду и передать ее в qBittorrent.

Проверяйте, этот торрент уже должен быть в очереди торрент-клиента.

Все меню, к слову, на английском языке. Если вам комфортнее другой язык – можете внести изменения в файл bot.py во всех секциях, относящихся к меню и заменить на необходимые вам слова или словосочетания.

Все отлично, бот работает, торрент-клиент управляется из мессенджера. Цель достигнута. Единственное, что осталось сделать – это добавить его в качестве службы в систему и заставить запускаться автоматически, при старте нашего медиацентра. Ведь сейчас мы его запустили вручную и если прервать выполнение (Ctrl+C) – прервется и общение с нашим ботом.

Будем использовать подсистему systemd. Создаем файл с описанием нашей службы для запуска Telegram-бота (назовем службу, например, qbittorrent-bot):

sudo mcedit /etc/systemd/system/qbittorrent-bot.service

Вставляем содержимое (изменить User на вашего пользователя в системе):

[Unit]
Description=qBittorrent-bot
After=multi-user.target

[Service]
Type=idle
User=kodi
ExecStart=python3 /opt/qbittorrent-bot/main.py

[Install]
WantedBy=multi-user.target

Пересобираем все службы systemd:

systemctl daemon-reload

И запускаем нашу службу с Telegram-ботом:

systemctl start qbittorrent-bot

Проверяем, все ли успешно:

systemctl status qbittorrent-bot

В ответ вы должны получить статус «Active: active (running)»:

Теперь добавляем службу в автозагрузку:

systemctl enable qbittorrent-bot

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

Все готово, можно перезагрузить систему и проверить автозапуск.

Теперь ваш домашний сервер стал еще чуточку «умнее» и «послушнее». Всем хорошего времяпрепровождения с вашим медиацентром!

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+5
Comments 10
Comments Comments 10

Articles