Commit d7c8cb5

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-09-27 01:16:00
fix(ytdlp): add `deno` dependency
1 parent 8b57056
Changed files (4)
docker/base.Dockerfile
@@ -1,15 +1,19 @@
 FROM ghcr.io/benny-dou/ffmpeg:latest@sha256:f184d2518e6e5a0986393420a42ef965dd03f51f083635951545acf0b3dcba5d AS ffmpeg
 FROM shinsenter/s6-overlay:latest@sha256:1d5c2ade2de9c9764cff27cafe5257bc29b8dfb72959d87a71841b072e0a91ba AS s6
 FROM python:3.13-slim@sha256:27f90d79cc85e9b7b2560063ef44fa0e9eaae7a7c3f5a9f74563065c5477cc24 AS python
+FROM denoland/deno:bin@sha256:b0e1bf78aea23abe03edf5c411cb9db3e1011d8659bfdeafcb80c1f53cdd71d7 AS deno
 
 FROM python AS venv
 RUN --mount=type=bind,source=uv.lock,target=uv.lock \
     --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
     --mount=from=ghcr.io/astral-sh/uv:latest,source=/uv,target=/bin/uv \
+    apt-get update && \
+    apt-get install -y --no-install-recommends git && \
     uv venv --relocatable --no-python-downloads --no-cache && \
     uv sync --frozen --no-dev --no-python-downloads --no-cache --no-install-project --no-editable
 COPY --from=ffmpeg /ffmpeg /.venv/bin/ffmpeg
 COPY --from=ffmpeg /ffprobe /.venv/bin/ffprobe
+COPY --from=deno /deno /.venv/bin/deno
 
 FROM python
 COPY --link --from=s6 / /
src/ytdlp/utils.py
@@ -61,7 +61,12 @@ async def get_ytdlp_opts(platform: Literal["youtube", "bilibili", "ytdlp"] | Non
         "writethumbnail": True,
         "trim_file_name": 60,  # filesystem limit for filename is 255 bytes. UFT-8 char is 1-4 bytes.
         "proxy": proxy,
-        "extractor_args": {"youtube": {"lang": ["zh-CN", "zh-HK", "zh-TW", "en", "en-GB"]}},
+        "extractor_args": {
+            "youtube": {
+                "lang": ["zh-CN", "zh-HK", "zh-TW", "en", "en-GB"],
+                "player_client": ["default", "-tv_simply"],  # tv_simply is broken
+            }
+        },
         "ignore_no_formats_error": False,
         "live_from_start": False,
         "retries": 5,
pyproject.toml
@@ -37,7 +37,7 @@ dependencies = [
   "uvloop==0.21.0",
   "xmltodict==1.0.2",
   "youtube-transcript-api==1.2.2",
-  "yt-dlp==2025.9.23.232818.dev0",
+  "yt-dlp[default]",
   "zhconv==1.4.3",
 ]
 name = "bennybot"
@@ -115,3 +115,4 @@ ignore = ["src/quotly/fonts.py"]
 [tool.uv.sources]
 # jonghwanhyeon/python-ffmpeg, PR-56
 python-ffmpeg = { url = "https://github.com/chadawagner/python-ffmpeg/archive/4614d8b7939679ea4d6ae9c32241d7607e2b136c.zip" }
+yt-dlp = { git = "https://github.com/yt-dlp/yt-dlp.git" }
uv.lock
@@ -259,7 +259,7 @@ dependencies = [
     { name = "uvloop" },
     { name = "xmltodict" },
     { name = "youtube-transcript-api" },
-    { name = "yt-dlp" },
+    { name = "yt-dlp", extra = ["default"] },
     { name = "zhconv" },
 ]
 
@@ -307,7 +307,7 @@ requires-dist = [
     { name = "uvloop", specifier = "==0.21.0" },
     { name = "xmltodict", specifier = "==1.0.2" },
     { name = "youtube-transcript-api", specifier = "==1.2.2" },
-    { name = "yt-dlp", specifier = "==2025.9.23.232818.dev0" },
+    { name = "yt-dlp", extras = ["default"], git = "https://github.com/yt-dlp/yt-dlp.git" },
     { name = "zhconv", specifier = "==1.4.3" },
 ]
 
@@ -428,6 +428,23 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b", size = 358517, upload-time = "2024-10-18T12:32:54.066Z" },
 ]
 
+[[package]]
+name = "brotlicffi"
+version = "1.1.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "cffi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/95/9d/70caa61192f570fcf0352766331b735afa931b4c6bc9a348a0925cc13288/brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13", size = 465192, upload-time = "2023-09-14T14:22:40.707Z" }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/a2/11/7b96009d3dcc2c931e828ce1e157f03824a69fb728d06bfd7b2fc6f93718/brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851", size = 453786, upload-time = "2023-09-14T14:21:57.72Z" },
+    { url = "https://files.pythonhosted.org/packages/d6/e6/a8f46f4a4ee7856fbd6ac0c6fb0dc65ed181ba46cd77875b8d9bbe494d9e/brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b", size = 2911165, upload-time = "2023-09-14T14:21:59.613Z" },
+    { url = "https://files.pythonhosted.org/packages/be/20/201559dff14e83ba345a5ec03335607e47467b6633c210607e693aefac40/brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814", size = 2927895, upload-time = "2023-09-14T14:22:01.22Z" },
+    { url = "https://files.pythonhosted.org/packages/cd/15/695b1409264143be3c933f708a3f81d53c4a1e1ebbc06f46331decbf6563/brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820", size = 2851834, upload-time = "2023-09-14T14:22:03.571Z" },
+    { url = "https://files.pythonhosted.org/packages/b4/40/b961a702463b6005baf952794c2e9e0099bde657d0d7e007f923883b907f/brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb", size = 341731, upload-time = "2023-09-14T14:22:05.74Z" },
+    { url = "https://files.pythonhosted.org/packages/1c/fa/5408a03c041114ceab628ce21766a4ea882aa6f6f0a800e04ee3a30ec6b9/brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613", size = 366783, upload-time = "2023-09-14T14:22:07.096Z" },
+]
+
 [[package]]
 name = "cacheout"
 version = "0.16.0"
@@ -1446,6 +1463,15 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/fd/69/b547032297c7e63ba2af494edba695d781af8a0c6e89e4d06cf848b21d80/multidict-6.6.4-py3-none-any.whl", hash = "sha256:27d8f8e125c07cb954e54d75d04905a9bba8a439c1d84aca94949d4d03d8601c", size = 12313, upload-time = "2025-08-11T12:08:46.891Z" },
 ]
 
+[[package]]
+name = "mutagen"
+version = "1.47.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/81/e6/64bc71b74eef4b68e61eb921dcf72dabd9e4ec4af1e11891bbd312ccbb77/mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99", size = 1274186, upload-time = "2023-09-03T16:33:33.411Z" }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/b0/7a/620f945b96be1f6ee357d211d5bf74ab1b7fe72a9f1525aafbfe3aee6875/mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719", size = 194391, upload-time = "2023-09-03T16:33:29.955Z" },
+]
+
 [[package]]
 name = "numpy"
 version = "2.3.3"
@@ -3040,11 +3066,19 @@ wheels = [
 
 [[package]]
 name = "yt-dlp"
-version = "2025.9.23.232818.dev0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b4/1c/4e49ea756955a0eda6ddef178ca2f87fe7b97b4068149d8a5eaa8da253bd/yt_dlp-2025.9.23.232818.dev0.tar.gz", hash = "sha256:e4a6aa517162357818e4e90366d0c82c1a08396aa352498f18f3463036dc6d3e", size = 3037535, upload-time = "2025-09-23T23:34:32.45Z" }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/c7/24/4a0c0038d281f511c95711bc5f121a85a58353990d7d0a3080ddd7cb5e2a/yt_dlp-2025.9.23.232818.dev0-py3-none-any.whl", hash = "sha256:318485644f1444e9c25f1fb1b1b8e87be4a604a787bdd3829bc6fe1513b15e48", size = 3241773, upload-time = "2025-09-23T23:34:30.135Z" },
+version = "2025.9.26"
+source = { git = "https://github.com/yt-dlp/yt-dlp.git#88e2a2de8e2fb247b3e2c55891625b7a148f09e5" }
+
+[package.optional-dependencies]
+default = [
+    { name = "brotli", marker = "implementation_name == 'cpython'" },
+    { name = "brotlicffi", marker = "implementation_name != 'cpython'" },
+    { name = "certifi" },
+    { name = "mutagen" },
+    { name = "pycryptodomex" },
+    { name = "requests" },
+    { name = "urllib3" },
+    { name = "websockets" },
 ]
 
 [[package]]