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
eb12643396
commit
a7ef629b48
20
bot.py
20
bot.py
@ -79,7 +79,7 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
"Используй /help для списка команд."
|
||||
)
|
||||
|
||||
# --- Команда /help ---
|
||||
# --- Команда /help (ИСПРАВЛЕНО форматирование Markdown) ---
|
||||
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
if update.message is None:
|
||||
logger.warning("Received an update without a message object in help handler.")
|
||||
@ -93,13 +93,13 @@ async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
|
||||
"**/status** - Показать текущий статус всех активных загрузок и управлять ими.\n"
|
||||
"**/stop_torrent** - Выбрать и остановить загрузку торрента (устаревает, используйте /status).\n"
|
||||
"**/help** - Показать это справочное сообщение.\n\n"
|
||||
"Также вы можете отправить мне *magnet-ссылку* или *URL torrent-файла* "
|
||||
"Также вы можете отправить мне `magnet-ссылку` или `URL torrent-файла` " # ИСПРАВЛЕНО: Использованы обратные апострофы
|
||||
"для добавления загрузки. Бот предложит выбрать категорию и директорию."
|
||||
)
|
||||
await update.message.reply_text(help_text, parse_mode="Markdown")
|
||||
|
||||
|
||||
# --- Команда /status (ОБНОВЛЕНО с учетом точных статусов) ---
|
||||
# --- Команда /status ---
|
||||
async def status(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
if update.message is None:
|
||||
logger.warning("Received an update without a message object in status handler.")
|
||||
@ -120,8 +120,6 @@ async def status(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
return
|
||||
|
||||
for torrent in torrents:
|
||||
# logger.info(f"Torrent '{torrent.name}' has state: '{torrent.state}'") # Временное логирование удалено
|
||||
|
||||
download_speed = torrent.dlspeed / (1024 * 1024) if torrent.dlspeed >= (1024 * 1024) else torrent.dlspeed / 1024
|
||||
upload_speed = torrent.upspeed / (1024 * 1024) if torrent.upspeed >= (1024 * 1024) else torrent.upspeed / 1024
|
||||
|
||||
@ -129,7 +127,7 @@ async def status(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
up_unit = "MB/s" if torrent.upspeed >= (1024 * 1024) else "KB/s"
|
||||
|
||||
eta_str = ""
|
||||
if torrent.eta == 8640000: # qBittorrent returns 8640000 for "infinite" ETA
|
||||
if torrent.eta == 8640000:
|
||||
eta_str = "∞"
|
||||
elif torrent.eta > 0:
|
||||
hours, remainder = divmod(torrent.eta, 3600)
|
||||
@ -159,7 +157,7 @@ async def status(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
'queuedDL', 'checkingUP', 'queuedUP'
|
||||
]
|
||||
paused_states = [
|
||||
'pausedDL', 'pausedUP', 'stoppedUP', 'stoppedDL' # Корректные статусы из логов
|
||||
'pausedDL', 'pausedUP', 'stoppedUP', 'stoppedDL'
|
||||
]
|
||||
|
||||
if torrent.state in active_states:
|
||||
@ -167,9 +165,8 @@ async def status(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
elif torrent.state in paused_states:
|
||||
keyboard.append(InlineKeyboardButton("▶️ Запустить", callback_data=f"start_hash_{torrent.hash}"))
|
||||
elif torrent.state == 'metaDL':
|
||||
pass # Не предлагаем кнопок, пока не начнется фактическая загрузка
|
||||
pass
|
||||
else:
|
||||
# Если торрент не в активных и не в явных "пауза/остановлено"
|
||||
keyboard.append(InlineKeyboardButton("ℹ️ Неизвестное состояние", callback_data=f"info_hash_{torrent.hash}"))
|
||||
|
||||
|
||||
@ -245,7 +242,7 @@ async def start_torrent_callback(update: Update, context: ContextTypes.DEFAULT_T
|
||||
await query.edit_message_text(f"Торрент ({torrent_hash[:6]}...) успешно запущен (возобновлен).")
|
||||
except APIError as e:
|
||||
logger.error(f"Error resuming torrent {torrent_hash}: {e}")
|
||||
await query.edit_message_text(f"Ошибка при запуске торрента: {e}")
|
||||
await query.edit_message_text(f"Ошибка при запуске торrenta: {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"An unexpected error occurred during torrent resuming: {e}")
|
||||
await query.edit_message_text(f"Произошла непредвиденная ошибка: {e}")
|
||||
@ -318,12 +315,10 @@ async def send_directory_options(query, context):
|
||||
"/share/Data/torrents",
|
||||
]
|
||||
|
||||
# Убедимся, что пути уникальны и отсортированы
|
||||
available_paths = sorted(list(set([p.replace(os.sep, '/') for p in available_paths if p])))
|
||||
|
||||
directory_keyboard = []
|
||||
for path in available_paths:
|
||||
# Отображаем только имя папки, если путь слишком длинный
|
||||
display_path = os.path.basename(path) if len(path) > 30 else path
|
||||
directory_keyboard.append([InlineKeyboardButton(display_path, callback_data=f"select_dir_{path}")])
|
||||
|
||||
@ -372,7 +367,6 @@ async def select_directory_callback(update: Update, context: ContextTypes.DEFAUL
|
||||
f"Категория: {category or 'Без категории'}\n"
|
||||
f"Директория: {selected_directory}"
|
||||
)
|
||||
# Очищаем данные пользователя после успешного добавления
|
||||
if 'current_torrent_url' in context.user_data:
|
||||
del context.user_data['current_torrent_url']
|
||||
if 'selected_category' in context.user_data:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user