diff --git a/addons/download_mp3_to_youtube/dowloadmp3_to_youtube.py b/addons/download_mp3_to_youtube/dowloadmp3_to_youtube.py index 0c920f5..99e834f 100644 --- a/addons/download_mp3_to_youtube/dowloadmp3_to_youtube.py +++ b/addons/download_mp3_to_youtube/dowloadmp3_to_youtube.py @@ -20,8 +20,6 @@ async def get_video_info(url: str) -> dict: "yt-dlp", "--dump-json", "--no-playlist", - "--cookies", - "/addons/download_mp3_to_youtube/cookies.txt", url, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, @@ -29,9 +27,14 @@ async def get_video_info(url: str) -> dict: stdout, stderr = await process.communicate() if process.returncode == 0: - return json.loads(stdout.decode()) + info = json.loads(stdout.decode()) + logger.info(f"Информация получена: {info.get('title', 'Unknown')}") + return info + else: + stderr_msg = stderr.decode() + logger.error(f"yt-dlp ошибка: {stderr_msg}") except Exception as e: - logger.warning(f"Не удалось получить информацию о видео: {e}") + logger.error(f"Не удалось получить информацию о видео: {e}", exc_info=True) return None @@ -57,18 +60,30 @@ async def download_thumbnail( def apply_metadata(mp3_path: str, metadata: dict): """Прописывает ID3-теги и обложку в MP3""" try: + # Сначала удаляем старые теги ID3 если есть + try: + ID3(mp3_path).delete() + except: + pass + + # Добавляем текстовые теги try: audio = EasyID3(mp3_path) except error: audio = EasyID3() - audio.save(mp3_path) audio["title"] = metadata.get("title", "Unknown Title") audio["artist"] = metadata.get("performer", "Unknown Artist") - audio.save(mp3_path) + audio.save(mp3_path, v2_version=4) + logger.info(f"Текстовые теги добавлены: {audio['title']} - {audio['artist']}") + # Добавляем обложку отдельно if metadata.get("thumbnail_data"): - audio = ID3(mp3_path) + try: + audio = ID3(mp3_path) + except error: + audio = ID3() + audio.add( APIC( encoding=3, @@ -78,10 +93,12 @@ def apply_metadata(mp3_path: str, metadata: dict): data=metadata["thumbnail_data"], ) ) - audio.save(mp3_path) - logger.info("Обложка добавлена в MP3") + audio.save(mp3_path, v2_version=4) + logger.info(f"Обложка добавлена в MP3 ({len(metadata['thumbnail_data'])} байт)") + else: + logger.warning("Данные обложки не найдены в метаданных") except Exception as e: - logger.warning(f"Не удалось прописать метаданные: {e}") + logger.error(f"Не удалось прописать метаданные: {e}", exc_info=True) async def download_mp3_isolated(url: str) -> tuple[str, dict]: @@ -108,15 +125,15 @@ async def download_mp3_isolated(url: str) -> tuple[str, dict]: if thumbnails: thumbnail_url = thumbnails[-1].get("url") duration = video_info.get("duration", 0) - logger.info(f"Получена информация о видео: {title}") + logger.info(f"Получена информация о видео: title={title}, uploader={uploader}, thumbnail={thumbnail_url is not None}") + else: + logger.warning("video_info = None, используются значения по умолчанию") process = await asyncio.create_subprocess_exec( "yt-dlp", "-x", "--audio-format", "mp3", - "--cookies", - "/addons/download_mp3_to_youtube/cookies.txt", "--audio-quality", "320K", "--no-playlist", @@ -173,4 +190,5 @@ async def download_mp3_isolated(url: str) -> tuple[str, dict]: except asyncio.TimeoutError: raise Exception("Таймаут загрузки (5 минут)") except Exception as e: + logger.error(f"Ошибка при скачивании: {e}", exc_info=True) raise e diff --git a/addons/download_mp3_to_youtube/handlers.py b/addons/download_mp3_to_youtube/handlers.py index c319224..b2ba2c7 100644 --- a/addons/download_mp3_to_youtube/handlers.py +++ b/addons/download_mp3_to_youtube/handlers.py @@ -49,6 +49,7 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot): } # Добавляем обложку если есть + thumb_filename = None if metadata["thumbnail_data"]: try: # Создаем временный файл для обложки @@ -60,17 +61,21 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot): # Используем FSInputFile для обложки send_params["thumbnail"] = types.FSInputFile(thumb_filename) - logger.info("Обложка добавлена к сообщению") + logger.info(f"Обложка подготовлена: {thumb_filename} ({len(metadata['thumbnail_data'])} байт)") except Exception as e: - logger.warning(f"Не удалось добавить обложку: {e}") + logger.error(f"Не удалось добавить обложку: {e}", exc_info=True) # Отправляем аудио await message.answer_audio(**send_params) # Удаляем временный файл обложки если создавали - if "thumb_filename" in locals() and path.exists(thumb_filename): - unlink(thumb_filename) + if thumb_filename and path.exists(thumb_filename): + try: + unlink(thumb_filename) + logger.info("Временный файл обложки удален") + except OSError as e: + logger.warning(f"Не удалось удалить файл обложки: {e}") await status_msg.delete() logger.info(f"Аудио отправлено пользователю {message.from_user.id}") diff --git a/storage/DB.py b/storage/DB.py index 9facc23..a3f1aa2 100644 --- a/storage/DB.py +++ b/storage/DB.py @@ -6,11 +6,11 @@ if __name__ == "__main__": cursor = db.cursor() - # cursor.execute("""CREATE TABLE message ( - # chat_id integer, - # message_id integer - # )""") - # db.commit() + cursor.execute("""CREATE TABLE message ( + chat_id integer, + message_id integer + )""") + db.commit() cursor.execute("SELECT * FROM message") print(cursor.fetchone())