Добавлена система уведомлений о завершении загрузки в Telegram

- Реализован класс DownloadMonitor для мониторинга загрузок в qBittorrent
- Добавлена автоматическая аутентификация в qBittorrent API
- Система проверяет статус загрузок каждые 30 секунд
- Автоматические уведомления при завершении загрузки:
  *  Успешное завершение с информацией о фильме и торренте
  *  Уведомления об ошибках загрузки
- Интеграция с API: возврат torrent_hash и torrent_name
- Отслеживание загрузок по hash с привязкой к пользователю
- Фоновый мониторинг через отдельный поток
- Уведомления отправляются напрямую в Telegram чат пользователя

Технические детали:
- Добавлен класс DownloadMonitor в telegram_bot.py
- Модифицирован API endpoint /api/add-torrent в app.py
- Добавлена поддержка возврата torrent_hash и torrent_name
- Реализована система отслеживания активных загрузок
- Автоматическое удаление из мониторинга после уведомления

Теперь пользователи получают уведомления:
🎉 'Фильм скачался!' - при успешном завершении
 'Ошибка загрузки' - при проблемах с загрузкой
This commit is contained in:
vrubelroman 2025-10-09 12:53:06 +03:00
parent bc461d36a6
commit 215b471a5e
2 changed files with 183 additions and 3 deletions

21
app.py
View file

@ -684,9 +684,19 @@ async def add_torrent_to_client(torrent_id: str = Form(...)):
torrent_hash = torrent_info.get('hash', '').upper()
for torrent in torrents:
if torrent.get('hash', '').upper() == torrent_hash:
return {"status": "success", "message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через magnet-ссылку!"}
return {
"status": "success",
"message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через magnet-ссылку!",
"torrent_hash": torrent.get('hash'),
"torrent_name": torrent_info.get('title', 'Unknown')
}
return {"status": "success", "message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через magnet-ссылку!"}
return {
"status": "success",
"message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через magnet-ссылку!",
"torrent_hash": torrent_hash,
"torrent_name": torrent_info.get('title', 'Unknown')
}
else:
print(f"Magnet link failed, trying .torrent file...")
@ -703,7 +713,12 @@ async def add_torrent_to_client(torrent_id: str = Form(...)):
print(f"Add via .torrent response text: {add_response.text}")
if add_response.status_code == 200 and add_response.text.strip() == "Ok.":
return {"status": "success", "message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через .torrent файл!"}
return {
"status": "success",
"message": f"Торрент '{torrent_info.get('title', 'Unknown')[:50]}...' добавлен в qBittorrent через .torrent файл!",
"torrent_hash": torrent_info.get('hash', ''),
"torrent_name": torrent_info.get('title', 'Unknown')
}
else:
return {"status": "error", "message": f"Ошибка добавления торрента (HTTP {add_response.status_code}): {add_response.text}"}
else: