From 817819c3825a93ed556c2fb092fe71d55fa2576c Mon Sep 17 00:00:00 2001 From: smolkik-code Date: Wed, 18 Feb 2026 18:58:25 +0700 Subject: [PATCH] bug vix2 --- bot/cache.py | 8 +++++++- bot/main.py | 18 ++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bot/cache.py b/bot/cache.py index 0fbdc93..40b5772 100644 --- a/bot/cache.py +++ b/bot/cache.py @@ -1,7 +1,13 @@ # cache.py +import hashlib import os + +def cache_key(url: str, quality: str, audio: bool = False) -> str: + key_str = f"{url}_{quality}_{audio}" + return hashlib.sha256(key_str.encode()).hexdigest() + def cache_path(cache_dir: str, key: str, extension: str) -> str: subdir = key[:2] full_dir = os.path.join(cache_dir, subdir) - os.makedirs(full_dir, exist_ok=True) # ← ОБЯЗАТЕЛЬНО + os.makedirs(full_dir, exist_ok=True) return os.path.join(full_dir, f"{key}.{extension}") \ No newline at end of file diff --git a/bot/main.py b/bot/main.py index 98dc2ca..831b9fc 100644 --- a/bot/main.py +++ b/bot/main.py @@ -1,10 +1,9 @@ -# main.py +# main.py — ИСПРАВЛЕНО: добавлен import cache_key import os import asyncio import threading import logging import time -from datetime import datetime from typing import Optional from aiogram import Bot, Dispatcher, F @@ -33,7 +32,7 @@ from downloader import ( from middleware import PrivateMiddleware from rate_limit import check_rate_limit from info import extract_info, is_playlist, get_platform_info -from cache import cache_path +from cache import cache_key, cache_path # ← ИСПРАВЛЕНО: добавлен cache_key from cleanup import cleanup_tmp logging.basicConfig(level=logging.INFO) @@ -56,7 +55,6 @@ USER_URLS: dict[int, str] = {} USER_DATA: dict[int, dict] = {} ACTIVE_DOWNLOADS: dict[int, dict] = {} -# Вспомогательные функции def render_bar(percent: float, size: int = 10) -> str: filled = int(size * percent / 100) return "█" * filled + "░" * (size - filled) @@ -89,7 +87,7 @@ def make_progress_cb(loop, message): asyncio.run_coroutine_threadsafe(update(d), loop) return cb -# ---------------------- AUTO DOWNLOADS (TikTok/Instagram) ---------------------- +# ---------------------- AUTO DOWNLOADS (TikTok/Instagram) ------------------ async def process_tiktok_auto(message: Message, user_id: int, url: str): status = await message.answer("🎵 Загружаю TikTok (видео + аудио)...", parse_mode="HTML") @@ -97,7 +95,6 @@ async def process_tiktok_auto(message: Message, user_id: int, url: str): key_video = cache_key(url, "tiktok_video", audio=False) key_audio = cache_key(url, "tiktok_audio", audio=True) - # ✅ ИСПРАВЛЕНО: создаём подкаталоги в TMP video_cache = cache_path(CACHE_DIR, key_video, "mp4") tmp_video = cache_path(TMP_DIR, key_video, "mp4") os.makedirs(os.path.dirname(tmp_video), exist_ok=True) @@ -224,7 +221,7 @@ async def process_instagram_auto(message: Message, user_id: int, url: str): ACTIVE_DOWNLOADS.pop(user_id, None) cleanup_tmp(TMP_DIR) -# ---------------------- HANDLERS ---------------------- +# ---------------------- HANDLERS ------------------ @dp.message(F.text == "/start") async def start(message: Message): @@ -275,8 +272,6 @@ async def handle_link(message: Message): parse_mode="HTML" ) -# ---------------------- YOUTUBE/VK HANDLERS ---------------------- - @dp.callback_query(F.data.startswith("q:")) async def handle_video(callback: CallbackQuery): await callback.answer() @@ -329,7 +324,6 @@ async def handle_video(callback: CallbackQuery): await status.edit_text("⛔ Загрузка отменена") return - # ✅ ИСПРАВЛЕНО: просто перемещаем без оптимизации if os.path.exists(final_path): os.remove(final_path) os.makedirs(os.path.dirname(final_path), exist_ok=True) os.rename(tmp_path, final_path) @@ -439,7 +433,7 @@ async def handle_audio(callback: CallbackQuery): logger.error(f"Error sending audio: {e}") await status.edit_text("❌ Ошибка при отправке аудио") -# ---------------------- PLAYLIST HANDLERS ---------------------- +# ---------------------- PLAYLIST HANDLERS ------------------ @dp.callback_query(F.data == "playlist_all") async def handle_playlist_all(callback: CallbackQuery): await callback.answer() @@ -602,7 +596,7 @@ async def cancel_download(callback: CallbackQuery): else: await callback.answer("❌ Нет активной загрузки", show_alert=True) -# ---------------------- ENTRYPOINT ---------------------- +# ---------------------- ENTRYPOINT ------------------ async def main(): cleanup_tmp(TMP_DIR) try: