Commit e255fb2

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-11-04 15:35:55
fix(download): handle common audio and video formats
1 parent e0bcb15
Changed files (1)
src/others/download_external.py
@@ -23,6 +23,8 @@ HELP = f"""
 `{PREFIX.WGET}` + URL 下载文件
 文件大小不能超过Telegram的限制: {round(MAX_FILE_BYTES / 1024 / 1024)}MB
 """
+AUDIO_FORMAT = [".aac", ".aiff", ".flac", ".m4a", ".mp3", ".oga", ".ogg", ".opus", ".pcm", ".wav"]
+VIDEO_FORMAT = [".3gp", ".avi", ".flv", ".m2ts", ".m4v", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".mts", ".ogg", ".ogv", ".rmvb", ".webm", ".wmv"]
 
 
 async def download_url_in_message(client: Client, message: Message, extra_prefix: str = "", **kwargs):
@@ -60,7 +62,9 @@ async def download_url_in_message(client: Client, message: Message, extra_prefix
         path = await download_file(url, proxy=PROXY.DOWNLOAD, stream=True, **kwargs)
         path = Path(path)
         suffix = path.suffix
-        if (mime := guess_mime(path)) and not mime.startswith("text"):
+        mime = guess_mime(path)
+        logger.debug(f"File MIME: {mime}")
+        if not (mime.startswith("text") or suffix in AUDIO_FORMAT + VIDEO_FORMAT):
             suffix = "." + mime.split("/")[-1]
         if path.suffix != suffix:
             path.rename(path.with_suffix(suffix))
@@ -68,7 +72,7 @@ async def download_url_in_message(client: Client, message: Message, extra_prefix
         if img := validate_img(path, force_jpg=False, delete=False):
             await modify_progress(text=f"🏞图片下载成功: {readable_size(path=img)}", force_update=True, **kwargs)
             success = await send2tg(client, message, target_chat, reply_msg_id, texts=caption, media=[{"photo": img}])
-        elif path.suffix in [".m4a", ".mp3", ".wav", ".ogg", ".opus", ".flac", ".aac"]:
+        elif path.suffix in AUDIO_FORMAT:
             await modify_progress(text=f"🎧音频下载成功: {readable_size(path=path)}", force_update=True, **kwargs)
             success = await client.send_audio(target_chat, path.as_posix(), caption=caption, reply_parameters=reply_parameters)
         elif await is_valid_video_or_audio(path, delete=False):