mirror of
https://github.com/DerrtSML/qbittorent_bot.git
synced 2025-10-26 04:20:08 +03:00
Update bot.py
This commit is contained in:
parent
ff9fa39493
commit
be9d31908e
44
bot.py
44
bot.py
@ -217,38 +217,36 @@ async def select_category_callback(update: Update, context: ContextTypes.DEFAULT
|
||||
|
||||
# --- Отправка опций директорий ---
|
||||
async def send_directory_options(query, context):
|
||||
try:
|
||||
# Получаем пути сохранения из qBittorrent
|
||||
# qbittorrentapi.app.default_save_path - это дефолтная директория
|
||||
# qbittorrentapi.app.preferences().save_path - это та же дефолтная директория,
|
||||
# но если хотим показать другие, нам нужно их получить откуда-то еще,
|
||||
# например, из существующих торрентов или заранее заданного списка.
|
||||
# Для простоты пока используем дефолтный и какой-нибудь пример.
|
||||
# Попытка инициализации клиента qBittorrent
|
||||
if not init_qbittorrent_client():
|
||||
await query.edit_message_text(
|
||||
"Не удалось подключиться к qBittorrent. Проверьте переменные окружения и доступность сервера."
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
# !!! ВНИМАНИЕ: qBittorrent API не предоставляет список "доступных" директорий автоматически.
|
||||
# Вам нужно будет вручную указать те директории, которые вы хотите предложить пользователю.
|
||||
# Здесь приведен ПРИМЕР, как это можно сделать.
|
||||
# ЗАМЕНИТЕ ЭТОТ СПИСОК СВОИМИ АКТУАЛЬНЫМИ ПУТЯМИ!
|
||||
# Пример:
|
||||
available_paths = [
|
||||
qb.app.default_save_path, # Дефолтный путь qBittorrent
|
||||
qb.app.default_save_path, # Дефолтный путь qBittorrent, например: /downloads/complete
|
||||
"/share/Data/Films",
|
||||
"/share/Data/Serials",
|
||||
"/share/Data/Music",
|
||||
"/share/Data/torrents",
|
||||
# Добавьте здесь другие пути, если они у вас есть
|
||||
]
|
||||
|
||||
# Удаляем дубликаты и пустые пути
|
||||
available_paths = list(set([p for p in available_paths if p]))
|
||||
# Удаляем дубликаты и пустые пути, нормализуем слеши для отображения
|
||||
available_paths = sorted(list(set([p.replace(os.sep, '/') for p in available_paths if p])))
|
||||
|
||||
directory_keyboard = []
|
||||
for path in available_paths:
|
||||
# path.replace(os.sep, '/') для кроссплатформенности и читаемости
|
||||
display_path = path.replace(os.sep, '/')
|
||||
# Для отображения: используем basename, если путь очень длинный, или просто путь
|
||||
display_path = os.path.basename(path) if len(path) > 30 else path
|
||||
directory_keyboard.append([InlineKeyboardButton(display_path, callback_data=f"select_dir_{path}")])
|
||||
|
||||
# Опция для использования дефолтной директории qBittorrent (если пользователь не хочет выбирать)
|
||||
directory_keyboard.append([InlineKeyboardButton("Использовать дефолтную qBittorrent", callback_data=f"select_dir_{qb.app.default_save_path}")])
|
||||
|
||||
reply_markup = InlineKeyboardMarkup(directory_keyboard)
|
||||
await query.edit_message_reply_markup(reply_markup=reply_markup) # Изменяем только разметку, чтобы сообщение осталось
|
||||
|
||||
@ -299,8 +297,10 @@ async def select_directory_callback(update: Update, context: ContextTypes.DEFAUL
|
||||
f"Директория: {selected_directory}"
|
||||
)
|
||||
# Очищаем данные из context.user_data после использования
|
||||
del context.user_data['current_torrent_url']
|
||||
del context.user_data['selected_category']
|
||||
if 'current_torrent_url' in context.user_data:
|
||||
del context.user_data['current_torrent_url']
|
||||
if 'selected_category' in context.user_data:
|
||||
del context.user_data['selected_category']
|
||||
except APIError as e:
|
||||
logger.error(f"Error adding torrent with path: {e}")
|
||||
await query.edit_message_text(f"Ошибка при добавлении торрента: {e}")
|
||||
@ -350,7 +350,13 @@ def main() -> None:
|
||||
# --- Добавление обработчиков сообщений ---
|
||||
# Перехватывает URL и Magnet-ссылки
|
||||
url_regex = r"magnet:\?xt=urn:[a-z0-9]+" # Регулярное выражение для magnet-ссылок
|
||||
torrent_url_regex = r"https?://[^\s]+(?:\.torrent|\/torrent\.php\?hash=)[\S]*" # Регулярное выражение для URL торрент-файлов
|
||||
# Обновленное регулярное выражение для URL торрент-файлов
|
||||
# Включает:
|
||||
# - обычные .torrent ссылки (например, example.com/file.torrent)
|
||||
# - /torrent.php?hash= (некоторые трекеры используют это)
|
||||
# - /download/<ID> (например, d.rutor.info/download/1042274)
|
||||
# - любые URL, оканчивающиеся на число, которое может быть ID торрента
|
||||
torrent_url_regex = r"https?://[^\s]+(?:/\d+|/\w+\.torrent|/download/\d+|\/torrent\.php\?hash=)[\S]*"
|
||||
|
||||
application.add_handler(MessageHandler(filters.TEXT & (filters.Regex(url_regex) | filters.Regex(torrent_url_regex)), handle_url))
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user