@xzxzzx/bilibili-mcp 1.6.1 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +47 -7
  2. package/README_EN.md +47 -7
  3. package/dist/bilibili/comments.d.ts.map +1 -1
  4. package/dist/bilibili/comments.js +27 -18
  5. package/dist/bilibili/comments.js.map +1 -1
  6. package/dist/bilibili/fingerprint.d.ts.map +1 -1
  7. package/dist/bilibili/fingerprint.js +5 -3
  8. package/dist/bilibili/fingerprint.js.map +1 -1
  9. package/dist/bilibili/http.d.ts.map +1 -1
  10. package/dist/bilibili/http.js +14 -35
  11. package/dist/bilibili/http.js.map +1 -1
  12. package/dist/bilibili/subtitle.d.ts.map +1 -1
  13. package/dist/bilibili/subtitle.js +13 -12
  14. package/dist/bilibili/subtitle.js.map +1 -1
  15. package/dist/bilibili/video-api.d.ts.map +1 -1
  16. package/dist/bilibili/video-api.js +1 -1
  17. package/dist/bilibili/video-api.js.map +1 -1
  18. package/dist/bilibili/wbi.d.ts.map +1 -1
  19. package/dist/bilibili/wbi.js +21 -10
  20. package/dist/bilibili/wbi.js.map +1 -1
  21. package/dist/server/error-response.d.ts.map +1 -1
  22. package/dist/server/error-response.js +7 -18
  23. package/dist/server/error-response.js.map +1 -1
  24. package/dist/server/tool-handlers.d.ts.map +1 -1
  25. package/dist/server/tool-handlers.js +6 -20
  26. package/dist/server/tool-handlers.js.map +1 -1
  27. package/dist/utils/credential-guidance.d.ts +10 -0
  28. package/dist/utils/credential-guidance.d.ts.map +1 -1
  29. package/dist/utils/credential-guidance.js +42 -10
  30. package/dist/utils/credential-guidance.js.map +1 -1
  31. package/dist/utils/error-guidance.d.ts +25 -0
  32. package/dist/utils/error-guidance.d.ts.map +1 -0
  33. package/dist/utils/error-guidance.js +229 -0
  34. package/dist/utils/error-guidance.js.map +1 -0
  35. package/dist/utils/retry.d.ts.map +1 -1
  36. package/dist/utils/retry.js +3 -7
  37. package/dist/utils/retry.js.map +1 -1
  38. package/dist/utils/update-check.d.ts +2 -0
  39. package/dist/utils/update-check.d.ts.map +1 -1
  40. package/dist/utils/update-check.js +21 -5
  41. package/dist/utils/update-check.js.map +1 -1
  42. package/package.json +1 -1
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Bilibili MCP server — 让 Claude、Cursor、Codex 等 AI 客户端直接读取 Bilibili 视频字幕、转录、元数据和热门评论的 MCP server。
8
8
 
9
- 🌐 [English Documentation](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/README_EN.md) · 📜 [更新日志](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/CHANGELOG.md) · 📦 [npm](https://www.npmjs.com/package/@xzxzzx/bilibili-mcp) · 🚀 [Release v1.6.1](https://github.com/XZXZZX-Ai/bilibili-mcp/releases/tag/v1.6.1)
9
+ 🌐 [English Documentation](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/README_EN.md) · 📜 [更新日志](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/CHANGELOG.md) · 📦 [npm](https://www.npmjs.com/package/@xzxzzx/bilibili-mcp) · 🚀 [Release v1.6.4](https://github.com/XZXZZX-Ai/bilibili-mcp/releases/tag/v1.6.4)
10
10
 
11
11
  > [!TIP]
12
12
  > ⚠️ 你可以把下方“用 agent 工具帮你安装”的提示词复制给 Codex、Claude Code、Cursor 等 agent,让它帮你完成 MCP 客户端接入和 Cookie 配置引导。为了稳定获取字幕、转录和评论,安装后仍需配置 B 站 Cookie(agent会引导你);不要把 Cookie 写进 MCP 客户端配置。Metadata 可能无需 Cookie。详见 [**凭证配置**](#️-凭证配置)。
@@ -158,11 +158,51 @@ npx -y @xzxzzx/bilibili-mcp@latest check
158
158
 
159
159
  #### 预期错误码
160
160
 
161
+ 所有 MCP 工具的错误响应都使用统一的结构化 payload,同时保留向后兼容的 `error`、`message`、`code`、`next_steps` 字段,并新增中英双语与分类字段:
162
+
163
+ ```json
164
+ {
165
+ "error": true,
166
+ "message": "Network request failed.",
167
+ "message_en": "Network request failed.",
168
+ "message_zh": "网络请求失败。",
169
+ "code": "NETWORK_ERROR",
170
+ "category": "network",
171
+ "retryable": true,
172
+ "user_action_required": false,
173
+ "next_steps": ["Retry later.", "Check local network, proxy, firewall, or VPN settings if the problem repeats."],
174
+ "next_steps_en": ["Retry later.", "Check local network, proxy, firewall, or VPN settings if the problem repeats."],
175
+ "next_steps_zh": ["稍后重试。", "如果问题反复出现,请检查本机网络、代理、防火墙或 VPN 设置。"],
176
+ "details": {
177
+ "status_code": 503
178
+ }
179
+ }
180
+ ```
181
+
182
+ 字段含义:
183
+
184
+ - `error` / `message` / `code` / `next_steps`:向后兼容字段;`next_steps` 与 `next_steps_en` 内容一致。
185
+ - `message_en` / `message_zh` / `next_steps_en` / `next_steps_zh`:显式中英文版本,便于客户端按语言渲染。
186
+ - `category`:错误分类(`validation` / `credentials` / `content` / `network` / `access` / `rate_limit` / `api` / `unknown`)。
187
+ - `retryable`:是否建议自动重试。
188
+ - `user_action_required`:是否需要用户介入才能解决。
189
+ - `details`:可选的附加信息(如 HTTP 状态码、超时毫秒数、Bilibili API 错误码),不包含 Cookie 或完整 URL。
190
+
191
+ 支持的错误码:
192
+
161
193
  | 错误码 | 含义 | 调用方建议 |
162
194
  |--------|------|-----------|
163
195
  | `VALIDATION_ERROR` | 输入参数不合法 | 检查并修正 `bvid_or_url` 或其他参数 |
164
196
  | `COOKIE_EXPIRED` | Cookie 已失效或未登录 | 用户应更新/轮换 Bilibili 凭据 |
165
197
  | `SUBTITLE_UNAVAILABLE` | 视频无可用的字幕 | 对 `get_video_transcript` 可重试并设置 `fallback_to_description: true` |
198
+ | `NETWORK_ERROR` | 网络请求失败(HTTP 5xx、连接错误等) | 稍后重试;如反复出现请检查网络/代理/防火墙 |
199
+ | `NETWORK_TIMEOUT` | 请求 Bilibili 超时 | 稍后重试;如反复出现请检查网络/代理/防火墙 |
200
+ | `API_RATE_LIMITED` | 触发 Bilibili API 频率限制(HTTP 429) | 等待一段时间后重试;降低调用频率或调大 `BILIBILI_RATE_LIMIT_MS` |
201
+ | `ACCESS_DENIED` | Bilibili 拒绝访问(权限不足、私密、地区限制、已下架等) | 检查视频访问权限,必要时运行凭据检查 |
202
+ | `PAID_VIDEO` | 视频可能需要付费、会员或额外权限 | 在 Bilibili 端确认;本 MCP 不会绕过付费或受限访问 |
203
+ | `COMMENTS_DISABLED` | 视频评论已关闭或访问受限 | 改用字幕或元数据工具;也可在 Bilibili 页面确认 |
204
+ | `BILIBILI_API_ERROR` | 其他 Bilibili API 错误 | 临时问题可稍后重试;持续出现请带错误码反馈 |
205
+ | `UNKNOWN_ERROR` | 未知错误 | 稍后重试;反馈时请勿包含 Cookie 或凭据 |
166
206
 
167
207
  ## 📋 环境要求
168
208
 
@@ -1196,8 +1236,8 @@ BILIBILI_DEDEUSERID=<your_dedeuserid>
1196
1236
  | 想查看标题、作者、播放量等结构化信息 | `get_video_metadata` | 标题、作者、时长、发布时间、标签、统计数据 |
1197
1237
  | 想看观众反馈和热门评论 | `get_video_comments` | 热门评论、时间戳评论、可选回复 |
1198
1238
  | 让 agent 引导用户配置 Cookie | `get_credential_setup_instructions` | 安全配置步骤、推荐命令、注意事项 |
1199
- | 检查 Cookie 是否已配置/登录 | `check_bilibili_credentials` | configured、source、logged_in、next_steps |
1200
- | 检查 MCP 包是否需要更新 | `check_mcp_update` | current_version、latest_version、update_available、更新命令 |
1239
+ | 检查 Cookie 是否已配置/登录 | `check_bilibili_credentials` | configured、source、logged_in、next_steps、next_steps_zh |
1240
+ | 检查 MCP 包是否需要更新 | `check_mcp_update` | current_version、latest_version、update_available、notes_zh、更新命令 |
1201
1241
 
1202
1242
  ## 💡 工具调用示例
1203
1243
 
@@ -1216,7 +1256,7 @@ BILIBILI_DEDEUSERID=<your_dedeuserid>
1216
1256
  }
1217
1257
  ```
1218
1258
 
1219
- 返回内容:推荐配置命令、全局安装命令、所需 Cookie 字段和安全提醒;不会返回任何 Cookie 值。
1259
+ 返回内容:推荐配置命令、全局安装命令、所需 Cookie 字段,以及 `security_notes_en` / `security_notes_zh` 双语安全提醒;不会返回任何 Cookie 值。
1220
1260
 
1221
1261
  ### `check_bilibili_credentials`
1222
1262
 
@@ -1231,7 +1271,7 @@ BILIBILI_DEDEUSERID=<your_dedeuserid>
1231
1271
  }
1232
1272
  ```
1233
1273
 
1234
- 返回内容:`configured`、`source`(`env` / `global_config` / `none`)、`logged_in` 和 `next_steps`;不会返回任何 Cookie 值。
1274
+ 返回内容:`configured`、`source`(`env` / `global_config` / `none`)、`logged_in`、兼容旧调用方的 `next_steps`,以及双语 `next_steps_en` / `next_steps_zh`;不会返回任何 Cookie 值。
1235
1275
 
1236
1276
  ### `check_mcp_update`
1237
1277
 
@@ -1246,7 +1286,7 @@ BILIBILI_DEDEUSERID=<your_dedeuserid>
1246
1286
  }
1247
1287
  ```
1248
1288
 
1249
- 返回内容:`current_version`、`latest_version`、`update_available`、`recommended_mcp_config` 和 `update_commands`;不会自动更新包。
1289
+ 返回内容:`current_version`、`latest_version`、`update_available`、`recommended_mcp_config`、`update_commands`,以及双语 `notes_en` / `notes_zh`;不会自动更新包。
1250
1290
 
1251
1291
  ### `get_video_transcript`
1252
1292
 
@@ -1402,7 +1442,7 @@ npm run watch
1402
1442
 
1403
1443
  1. **初版生成**:由 **Claude Code** (搭载 **GLM-4.7** 模型) 快速搭建核心架构与基础逻辑。
1404
1444
  2. **调试与优化**:在 **Antigravity** 环境下,利用 **Claude** 和 **Gemini** 模型进行深度的 Bug 修复与功能增强,确保了字幕提取与评论分析的稳定性。
1405
- 3. **迭代与扩展**:由 **Codex** 进行架构决策与计划分解,**Claude Code** 执行实现;目前覆盖 30+ AI 客户端的 MCP 接入配置、7 个 MCP 工具、145 个单元测试。
1445
+ 3. **迭代与扩展**:由 **Codex** 进行架构决策与计划分解,**Claude Code** 执行实现;目前覆盖 30+ AI 客户端的 MCP 接入配置、7 个 MCP 工具、180 个单元测试。
1406
1446
 
1407
1447
  ---
1408
1448
 
package/README_EN.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  MCP server that gives AI clients access to Bilibili video subtitles, transcripts, metadata, and popular comments.
8
8
 
9
- View in [简体中文](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/README.md) · 📜 [Changelog](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/CHANGELOG_EN.md) · 📦 [npm](https://www.npmjs.com/package/@xzxzzx/bilibili-mcp) · 🚀 [Release v1.6.1](https://github.com/XZXZZX-Ai/bilibili-mcp/releases/tag/v1.6.1)
9
+ View in [简体中文](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/README.md) · 📜 [Changelog](https://github.com/XZXZZX-Ai/bilibili-mcp/blob/master/CHANGELOG_EN.md) · 📦 [npm](https://www.npmjs.com/package/@xzxzzx/bilibili-mcp) · 🚀 [Release v1.6.4](https://github.com/XZXZZX-Ai/bilibili-mcp/releases/tag/v1.6.4)
10
10
 
11
11
  > [!TIP]
12
12
  > ⚠️ You can copy the "Install With Your Agent" prompt below to Codex, Claude Code, Cursor, or another agent and let it add this MCP server to your client and guide Cookie setup. For reliable subtitles, transcripts, and comments, you still need to configure Bilibili Cookies after installation; do not write Cookies into MCP client config. Metadata may work without cookies. See [**Credential Configuration**](#-credential-configuration).
@@ -158,11 +158,51 @@ After the MCP server is connected, if available, call get_credential_setup_instr
158
158
 
159
159
  #### Expected Error Codes
160
160
 
161
+ All MCP tool error responses use a unified structured payload. The backward-compatible `error`, `message`, `code`, and `next_steps` fields remain, alongside explicit bilingual fields:
162
+
163
+ ```json
164
+ {
165
+ "error": true,
166
+ "message": "Network request failed.",
167
+ "message_en": "Network request failed.",
168
+ "message_zh": "网络请求失败。",
169
+ "code": "NETWORK_ERROR",
170
+ "category": "network",
171
+ "retryable": true,
172
+ "user_action_required": false,
173
+ "next_steps": ["Retry later.", "Check local network, proxy, firewall, or VPN settings if the problem repeats."],
174
+ "next_steps_en": ["Retry later.", "Check local network, proxy, firewall, or VPN settings if the problem repeats."],
175
+ "next_steps_zh": ["稍后重试。", "如果问题反复出现,请检查本机网络、代理、防火墙或 VPN 设置。"],
176
+ "details": {
177
+ "status_code": 503
178
+ }
179
+ }
180
+ ```
181
+
182
+ Field meaning:
183
+
184
+ - `error` / `message` / `code` / `next_steps`: backward-compatible fields; `next_steps` mirrors `next_steps_en`.
185
+ - `message_en` / `message_zh` / `next_steps_en` / `next_steps_zh`: explicit English and Chinese copies for clients that render by language.
186
+ - `category`: classification (`validation` / `credentials` / `content` / `network` / `access` / `rate_limit` / `api` / `unknown`).
187
+ - `retryable`: whether automatic retry is reasonable.
188
+ - `user_action_required`: whether the user must act before the call can succeed.
189
+ - `details`: optional metadata such as HTTP status, timeout in milliseconds, or Bilibili API code; never includes Cookie values or full URLs.
190
+
191
+ Supported error codes:
192
+
161
193
  | Code | Meaning | Caller Action |
162
194
  |------|---------|---------------|
163
195
  | `VALIDATION_ERROR` | Invalid input parameter | Fix the `bvid_or_url` or other parameter |
164
196
  | `COOKIE_EXPIRED` | Cookie expired or not logged in | User should refresh/rotate Bilibili credentials |
165
197
  | `SUBTITLE_UNAVAILABLE` | No subtitles available for this video | For `get_video_transcript`, retry with `fallback_to_description: true` |
198
+ | `NETWORK_ERROR` | Network request failed (HTTP 5xx, connection errors, etc.) | Retry later; check network/proxy/firewall if it keeps happening |
199
+ | `NETWORK_TIMEOUT` | Request to Bilibili timed out | Retry later; check network/proxy/firewall if it keeps happening |
200
+ | `API_RATE_LIMITED` | Bilibili API rate limit hit (HTTP 429) | Wait and retry; reduce request frequency or raise `BILIBILI_RATE_LIMIT_MS` |
201
+ | `ACCESS_DENIED` | Bilibili denied access (permissions, private, region-locked, removed) | Verify the video access permissions; run the credential check if needed |
202
+ | `PAID_VIDEO` | Video may require payment, membership, or extra permissions | Confirm in Bilibili; this MCP will not bypass paid or restricted access |
203
+ | `COMMENTS_DISABLED` | Comments are disabled or restricted | Use transcript or metadata tools; confirm on the Bilibili page |
204
+ | `BILIBILI_API_ERROR` | Other Bilibili API errors | Retry if it looks temporary; include the code when reporting repeated issues |
205
+ | `UNKNOWN_ERROR` | Unknown failure | Retry later; never include Cookie values when reporting |
166
206
 
167
207
  ## 📋 Requirements
168
208
 
@@ -1196,8 +1236,8 @@ Do not share cookies with others. Do not paste them into public chats, issues, P
1196
1236
  | See structured metadata | `get_video_metadata` | Title, author, duration, publish date, tags, stats |
1197
1237
  | View audience reactions | `get_video_comments` | Popular comments, timestamped highlights, optional replies |
1198
1238
  | Guide users through Cookie setup | `get_credential_setup_instructions` | Safe setup steps, recommended commands, security notes |
1199
- | Check whether Cookies are configured/logged in | `check_bilibili_credentials` | configured, source, logged_in, next_steps |
1200
- | Check whether the MCP package needs an update | `check_mcp_update` | current_version, latest_version, update_available, update commands |
1239
+ | Check whether Cookies are configured/logged in | `check_bilibili_credentials` | configured, source, logged_in, next_steps, next_steps_zh |
1240
+ | Check whether the MCP package needs an update | `check_mcp_update` | current_version, latest_version, update_available, notes_zh, update commands |
1201
1241
 
1202
1242
  ## 💡 Tool Call Examples
1203
1243
 
@@ -1216,7 +1256,7 @@ Request:
1216
1256
  }
1217
1257
  ```
1218
1258
 
1219
- Returns: recommended setup commands, global-install commands, required Cookie fields, and security notes; never returns Cookie values.
1259
+ Returns: recommended setup commands, global-install commands, required Cookie fields, and bilingual `security_notes_en` / `security_notes_zh`; never returns Cookie values.
1220
1260
 
1221
1261
  ### `check_bilibili_credentials`
1222
1262
 
@@ -1231,7 +1271,7 @@ Request:
1231
1271
  }
1232
1272
  ```
1233
1273
 
1234
- Returns: `configured`, `source` (`env` / `global_config` / `none`), `logged_in`, and `next_steps`; never returns Cookie values.
1274
+ Returns: `configured`, `source` (`env` / `global_config` / `none`), `logged_in`, backward-compatible `next_steps`, and bilingual `next_steps_en` / `next_steps_zh`; never returns Cookie values.
1235
1275
 
1236
1276
  ### `check_mcp_update`
1237
1277
 
@@ -1246,7 +1286,7 @@ Request:
1246
1286
  }
1247
1287
  ```
1248
1288
 
1249
- Returns: `current_version`, `latest_version`, `update_available`, `recommended_mcp_config`, and `update_commands`; never updates packages automatically.
1289
+ Returns: `current_version`, `latest_version`, `update_available`, `recommended_mcp_config`, `update_commands`, and bilingual `notes_en` / `notes_zh`; never updates packages automatically.
1250
1290
 
1251
1291
  ### `get_video_transcript`
1252
1292
 
@@ -1399,7 +1439,7 @@ This project is a crystal of AI-collaborative development, spanning from prototy
1399
1439
 
1400
1440
  1. **Initial Generation**: Core architecture and base logic were rapidly built by **Claude Code** (powered by **GLM-4.7** model).
1401
1441
  2. **Debugging & Optimization**: Bugs were fixed and features enhanced using **Claude** and **Gemini** models within the **Antigravity** environment, ensuring stable subtitle extraction and comment analysis.
1402
- 3. **Iteration & Expansion**: **Codex** handles architectural decisions and planning, while **Claude Code** executes implementation; now covers 30+ AI client MCP configurations, 7 MCP tools, and 145 unit tests.
1442
+ 3. **Iteration & Expansion**: **Codex** handles architectural decisions and planning, while **Claude Code** executes implementation; now covers 30+ AI client MCP configurations, 7 MCP tools, and 180 unit tests.
1403
1443
 
1404
1444
  ---
1405
1445
 
@@ -1 +1 @@
1
- {"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/bilibili/comments.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;CACH;AAkDD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,oBAAoB,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAC1D,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,OAAO,GAC7B,OAAO,CAAC,WAAW,CAAC,CA8HtB"}
1
+ {"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/bilibili/comments.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;CACH;AAkDD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,oBAAoB,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAC1D,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,OAAO,GAC7B,OAAO,CAAC,WAAW,CAAC,CAwItB"}
@@ -1,5 +1,5 @@
1
1
  // 评论处理逻辑
2
- import { getVideoInfo, getVideoComments } from "./client.js";
2
+ import { getVideoComments } from "./client.js";
3
3
  import { extractBVId } from "../utils/bvid.js";
4
4
  import { cacheManager } from "../utils/cache.js";
5
5
  import { CommentsDisabledError } from "../utils/errors.js";
@@ -70,7 +70,7 @@ export async function getVideoCommentsData(bvidOrUrl, detailLevelOrOptions, lega
70
70
  : (detailLevelOrOptions.includeReplies ?? true);
71
71
  const bvid = extractBVId(bvidOrUrl);
72
72
  // 生成缓存键:包含有效的 detailLevel/limit/sort/includeReplies
73
- const cacheDetail = limit !== undefined ? `limit-${limit}` : detailLevel;
73
+ const cacheDetail = limit !== undefined ? `${detailLevel}-limit-${limit}` : detailLevel;
74
74
  const cacheKey = cacheManager.generateKey("comments", bvid, cacheDetail, sort.toString(), includeReplies.toString());
75
75
  try {
76
76
  // 尝试从缓存获取
@@ -80,14 +80,32 @@ export async function getVideoCommentsData(bvidOrUrl, detailLevelOrOptions, lega
80
80
  return cachedData;
81
81
  }
82
82
  logger.debug("Comments cache miss", { bvid, cacheKey }, { type: "comments" });
83
- // 获取视频基本信息以获取 CID
84
- const videoData = await getVideoInfo(bvid);
85
- const cid = videoData.cid;
86
83
  // 评论数量:优先使用显式 limit,否则根据 detailLevel 决定
87
84
  const commentCount = limit ?? (detailLevel === "brief" ? 10 : 20);
88
- // 获取评论
89
- const commentsData = (await getVideoComments(bvidOrUrl, 1, commentCount, sort, includeReplies));
90
- const rawComments = commentsData?.replies || [];
85
+ // 获取评论:limit ≤ 20 单次请求,> 20 顺序分页拉取
86
+ let rawComments;
87
+ if (commentCount <= 20) {
88
+ const commentsData = (await getVideoComments(bvidOrUrl, 1, commentCount, sort, includeReplies));
89
+ rawComments = commentsData?.replies || [];
90
+ }
91
+ else {
92
+ rawComments = [];
93
+ let page = 1;
94
+ let remaining = commentCount;
95
+ while (remaining > 0) {
96
+ const pageSize = Math.min(remaining, 20);
97
+ const pageData = (await getVideoComments(bvidOrUrl, page, pageSize, sort, includeReplies));
98
+ const pageReplies = pageData?.replies || [];
99
+ if (pageReplies.length === 0)
100
+ break;
101
+ rawComments.push(...pageReplies);
102
+ if (pageReplies.length < pageSize)
103
+ break;
104
+ remaining -= pageReplies.length;
105
+ page++;
106
+ }
107
+ rawComments = rawComments.slice(0, commentCount);
108
+ }
91
109
  // 处理评论
92
110
  let processedComments = rawComments.map((comment) => processComment(comment, includeReplies));
93
111
  // 如果是详细模式且包含回复,添加高赞回复
@@ -127,16 +145,7 @@ export async function getVideoCommentsData(bvidOrUrl, detailLevelOrOptions, lega
127
145
  catch (error) {
128
146
  if (error instanceof CommentsDisabledError) {
129
147
  logger.warn("Comments disabled for video", { bvid }, { type: "comments" });
130
- const result = {
131
- comments: [],
132
- summary: {
133
- total_comments: 0,
134
- comments_with_timestamp: 0,
135
- },
136
- };
137
- // 存入缓存
138
- cacheManager.setCommentInfo(cacheKey, result);
139
- return result;
148
+ throw error;
140
149
  }
141
150
  logger.error("Error getting video comments", { error: redactSecrets(error) }, { type: "comments" });
142
151
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/bilibili/comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/bilibili/comments.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/bilibili/fingerprint.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,CA8CR"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/bilibili/fingerprint.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,CA+CR"}
@@ -16,9 +16,9 @@ export async function getBuvid() {
16
16
  if (cachedBuvid && cachedBuvid.expireTime > now) {
17
17
  return { buvid3: cachedBuvid.buvid3, buvid4: cachedBuvid.buvid4 };
18
18
  }
19
+ const controller = new AbortController();
20
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
19
21
  try {
20
- const controller = new AbortController();
21
- const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
22
22
  const resp = await fetch(`${BASE_URL}/x/frontend/finger/spi`, {
23
23
  headers: {
24
24
  "User-Agent": config.userAgent,
@@ -26,7 +26,6 @@ export async function getBuvid() {
26
26
  },
27
27
  signal: controller.signal,
28
28
  });
29
- clearTimeout(timeoutId);
30
29
  if (!resp.ok)
31
30
  return null;
32
31
  const data = await resp.json();
@@ -46,5 +45,8 @@ export async function getBuvid() {
46
45
  logger.warn("Failed to fetch buvid fingerprint, continuing without it", { error: error instanceof Error ? error.message : error });
47
46
  return null;
48
47
  }
48
+ finally {
49
+ clearTimeout(timeoutId);
50
+ }
49
51
  }
50
52
  //# sourceMappingURL=fingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/bilibili/fingerprint.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnD,uBAAuB;AACvB,IAAI,WAAW,GAIJ,IAAI,CAAC;AAEhB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAI5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;IAEvD,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAChD,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAC1B,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,kBAAkB,CACnB,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,wBAAwB,EAAE;YAC5D,OAAO,EAAE;gBACP,YAAY,EAAE,MAAM,CAAC,SAAS;gBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG;YAAE,OAAO,IAAI,CAAC;QAEvE,WAAW,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,GAAG,cAAc;SACjC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,0DAA0D,EAC1D,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAC1D,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/bilibili/fingerprint.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnD,uBAAuB;AACvB,IAAI,WAAW,GAIJ,IAAI,CAAC;AAEhB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAI5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;IAEvD,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAChD,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAC1B,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,kBAAkB,CACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,wBAAwB,EAAE;YAC5D,OAAO,EAAE;gBACP,YAAY,EAAE,MAAM,CAAC,SAAS;gBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG;YAAE,OAAO,IAAI,CAAC;QAEvE,WAAW,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,UAAU,EAAE,GAAG,GAAG,cAAc;SACjC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,0DAA0D,EAC1D,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAC1D,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/bilibili/http.ts"],"names":[],"mappings":"AAqCA;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GACnD,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ7E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAwBtE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACvC,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC7C,OAAO,CAAC,OAAO,CAAC,CAwJlB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC7C,OAAO,CAAC,OAAO,CAAC,CAsFlB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/bilibili/http.ts"],"names":[],"mappings":"AAqCA;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GACnD,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ7E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAItE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACvC,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC7C,OAAO,CAAC,OAAO,CAAC,CAwJlB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC7C,OAAO,CAAC,OAAO,CAAC,CAuFlB"}
@@ -10,7 +10,7 @@ const BASE_URL = config.baseUrl;
10
10
  const RATE_LIMIT_MS = config.rateLimitMs;
11
11
  const REQUEST_TIMEOUT_MS = config.requestTimeoutMs;
12
12
  let lastRequestTime = 0;
13
- let pendingPromise = null;
13
+ let admissionChain = Promise.resolve();
14
14
  /**
15
15
  * 等待到下一个允许请求的时间
16
16
  */
@@ -27,34 +27,32 @@ async function waitForRateLimit() {
27
27
  * 带限流和超时控制的请求包装器
28
28
  */
29
29
  export async function throttledFetch(fetchFn) {
30
- // 等待上一个请求完成
31
- if (pendingPromise) {
32
- await pendingPromise;
33
- }
30
+ const previousTurn = admissionChain;
31
+ const myTurn = previousTurn.then(() => waitForRateLimit());
32
+ admissionChain = myTurn.catch(() => { });
33
+ await previousTurn;
34
34
  // 创建 AbortController 用于超时控制
35
35
  const controller = new AbortController();
36
36
  const timeoutId = setTimeout(() => {
37
37
  controller.abort();
38
38
  logger.error(`Request timeout after ${REQUEST_TIMEOUT_MS}ms`, {}, { type: "request-timeout" });
39
39
  }, REQUEST_TIMEOUT_MS);
40
- // 创建新的请求
41
- pendingPromise = (async () => {
42
- await waitForRateLimit();
43
- })();
44
40
  try {
45
- await pendingPromise;
41
+ await myTurn;
46
42
  return await fetchFn(controller);
47
43
  }
48
44
  catch (error) {
49
45
  if (error instanceof Error && error.name === "AbortError") {
50
46
  throw new TimeoutError(`Request timeout: ${REQUEST_TIMEOUT_MS}ms`, REQUEST_TIMEOUT_MS);
51
47
  }
48
+ if (error instanceof TypeError) {
49
+ throw new NetworkError("Network request failed", error);
50
+ }
52
51
  throw error;
53
52
  }
54
53
  finally {
55
54
  clearTimeout(timeoutId);
56
55
  controller.abort(); // 确保 AbortController 被清理
57
- pendingPromise = null;
58
56
  }
59
57
  }
60
58
  /**
@@ -74,28 +72,9 @@ export async function retryableFetch(fetchFn) {
74
72
  * 该函数不会在日志或错误信息中输出任何 Cookie 内容。
75
73
  */
76
74
  export async function checkLoginStatus() {
77
- try {
78
- const authHeaders = credentialManager.getAuthHeaders();
79
- const controller = new AbortController();
80
- const timeoutId = setTimeout(() => controller.abort(), config.requestTimeoutMs);
81
- const resp = await fetch(`${BASE_URL}/x/web-interface/nav`, {
82
- headers: {
83
- "User-Agent": config.userAgent,
84
- Referer: config.referer,
85
- ...authHeaders,
86
- },
87
- signal: controller.signal,
88
- });
89
- clearTimeout(timeoutId);
90
- if (!resp.ok)
91
- return { isLogin: false };
92
- const data = await resp.json();
93
- return { isLogin: data?.data?.isLogin === true };
94
- }
95
- catch {
96
- // 网络问题或超时,保守地认为登录状态未知,返回 false
97
- return { isLogin: false };
98
- }
75
+ const authHeaders = credentialManager.getAuthHeaders();
76
+ const data = await fetchWithoutWBI("/x/web-interface/nav", undefined, authHeaders);
77
+ return { isLogin: data?.isLogin === true };
99
78
  }
100
79
  /**
101
80
  * 带有 WBI 签名的 GET 请求
@@ -136,7 +115,7 @@ export async function fetchWithWBI(path, params, additionalHeaders = {}) {
136
115
  status: response.status,
137
116
  statusText: response.statusText,
138
117
  }, { type: "bilibili-http", operation: "fetchWithWBI" });
139
- throw new NetworkError(errorMsg, undefined, url.toString());
118
+ throw new NetworkError(errorMsg, undefined, url.toString(), response.status);
140
119
  }
141
120
  const data = await response.json();
142
121
  if (data.code !== 0) {
@@ -216,7 +195,7 @@ export async function fetchWithoutWBI(path, params, additionalHeaders = {}) {
216
195
  signal: controller.signal,
217
196
  });
218
197
  if (!response.ok) {
219
- throw new NetworkError(`HTTP ${response.status}: ${response.statusText}`, undefined, url.toString());
198
+ throw new NetworkError(`HTTP ${response.status}: ${response.statusText}`, undefined, url.toString(), response.status);
220
199
  }
221
200
  const data = await response.json();
222
201
  if (data.code !== 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/bilibili/http.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAEhC,6BAA6B;AAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnD,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAI,cAAc,GAAyB,IAAI,CAAC;AAEhD;;GAEG;AACH,KAAK,UAAU,gBAAgB;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,eAAe,CAAC;IAEnD,IAAI,oBAAoB,GAAG,aAAa,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,aAAa,GAAG,oBAAoB,CAAC;QACtD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAoD;IAEpD,YAAY;IACZ,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC;IACvB,CAAC;IAED,4BAA4B;IAC5B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAChC,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CACV,yBAAyB,kBAAkB,IAAI,EAC/C,EAAE,EACF,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAC5B,CAAC;IACJ,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAEvB,SAAS;IACT,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,CAAC;QACH,MAAM,cAAc,CAAC;QACrB,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,YAAY,CACpB,oBAAoB,kBAAkB,IAAI,EAC1C,kBAAkB,CACnB,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,yBAAyB;QAC7C,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,OAAyB;IAC/D,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;QAChC,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,KAAK;QACf,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACpD,mBAAmB,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAC1B,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,MAAM,CAAC,gBAAgB,CACxB,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,sBAAsB,EAAE;YAC1D,OAAO,EAAE;gBACP,YAAY,EAAE,MAAM,CAAC,SAAS;gBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,WAAW;aACf;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,MAAuC,EACvC,oBAA4C,EAAE;IAE9C,OAAO,cAAc,CAAC,KAAK,IAAI,EAAE;QAC/B,OAAO,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAElC,kCAAkC;gBAClC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBAEjE,OAAO;gBACP,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE9C,SAAS;gBACT,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC5D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG;oBACnB,YAAY,EAAE,MAAM,CAAC,SAAS;oBAC9B,OAAO,EAAE,iBAAiB,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;oBACpD,MAAM,EAAE,kBAAkB;oBAC1B,GAAG,iBAAiB;iBACrB,CAAC;gBAEF,MAAM,CAAC,KAAK,CACV,qBAAqB,EACrB;oBACE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;oBACnB,OAAO,EAAE,YAAY;iBACtB,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;oBAC3C,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,QAAQ,GAAG,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACnE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB;wBACE,KAAK,EAAE,QAAQ;wBACf,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;wBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;qBAChC,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;oBACF,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpB,8BAA8B;oBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,CAAC,IAAI,CACT,qCAAqC,EACrC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EACxC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAClD,CAAC;wBACF,MAAM,IAAI,gBAAgB,CACxB,mMAAmM,EACnM,gBAAgB,EAChB,SAAS,EACT,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACpB,CAAC;oBACJ,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;wBAClD,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC;4BACE,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;4BACnB,MAAM;yBACP,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;wBACF,MAAM,IAAI,qBAAqB,CAC7B,mBAAmB,CACpB,CAAC;oBACJ,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC;4BACE,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;4BACnB,MAAM;yBACP,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;wBACF,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,OAAO,IAAI,oBAAoB,EACpC,eAAe,EACf,SAAS,EACT,IAAI,CACL,CAAC;oBACJ,CAAC;oBAED,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC;wBACE,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;wBACnB,MAAM;qBACP,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;oBACF,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,OAAO,IAAI,eAAe,EAC/B,WAAW,EACX,SAAS,EACT,IAAI,CACL,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,cAAc;gBACd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC9C,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CACV,mBAAmB,EACnB;oBACE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC7D,IAAI;oBACJ,MAAM;oBACN,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE;iBACxB,EACD,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CACrD,CAAC;gBAEF,MAAM,CAAC,KAAK,CACV,kBAAkB,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EACzD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAC9B,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,MAAwC,EACxC,oBAA4C,EAAE;IAE9C,MAAM,CAAC,KAAK,CACV,yBAAyB,EACzB,EAAE,IAAI,EAAE,MAAM,EAAE,EAChB,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACxD,CAAC;IACF,OAAO,cAAc,CAAC,KAAK,IAAI,EAAE;QAC/B,OAAO,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,CAAC,KAAK,CACV,qBAAqB,EACrB,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,EACvB,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACxD,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;oBAC3C,OAAO,EAAE;wBACP,YAAY,EAAE,MAAM,CAAC,SAAS;wBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,MAAM,EAAE,kBAAkB;wBAC1B,GAAG,iBAAiB;qBACrB;oBACD,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,YAAY,CACpB,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACjD,SAAS,EACT,GAAG,CAAC,QAAQ,EAAE,CACf,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpB,8BAA8B;oBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,CAAC,IAAI,CACT,qCAAqC,EACrC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EACxC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAClD,CAAC;wBACF,MAAM,IAAI,gBAAgB,CACxB,mMAAmM,EACnM,gBAAgB,EAChB,SAAS,EACT,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACpB,CAAC;oBACJ,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;wBAClD,MAAM,IAAI,qBAAqB,CAC7B,mBAAmB,CACpB,CAAC;oBACJ,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,IAAI,cAAc,CACtB,mBAAmB,CACpB,CAAC;oBACJ,CAAC;oBACD,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,OAAO,IAAI,eAAe,EAC/B,WAAW,EACX,SAAS,EACT,IAAI,CACL,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,kBAAkB,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EACzD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAC9B,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/bilibili/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subtitle.d.ts","sourceRoot":"","sources":["../../src/bilibili/subtitle.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,GAAG,aAAa,CAAC;IACxC,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAsFD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,qBAAqB,UAAQ,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAuG9B;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,CAAC,CAqLvB"}
1
+ {"version":3,"file":"subtitle.d.ts","sourceRoot":"","sources":["../../src/bilibili/subtitle.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,GAAG,aAAa,CAAC;IACxC,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AA0GD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,qBAAqB,UAAQ,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAwG9B;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,CAAC,CAkKvB"}
@@ -17,6 +17,16 @@ function formatPublishDate(timestamp) {
17
17
  const date = new Date(timestamp * 1000); // B站返回的是秒级时间戳
18
18
  return date.toISOString();
19
19
  }
20
+ /**
21
+ * 字幕列表为空时验证登录状态,未登录则抛出 COOKIE_EXPIRED。
22
+ */
23
+ async function verifyLoginForEmptySubtitles(bvid) {
24
+ logger.warn("Video returned no subtitles; verifying login status", { bvid }, { type: "subtitle" });
25
+ const { isLogin } = await checkLoginStatus();
26
+ if (!isLogin) {
27
+ throw new BilibiliAPIError(`Video ${bvid} returned an empty subtitle list and current Bilibili credentials are not logged in. Run "npx -y @xzxzzx/bilibili-mcp@latest config", then "npx -y @xzxzzx/bilibili-mcp@latest check", or update environment variables.`, 'COOKIE_EXPIRED', undefined, { code: -101, bvid });
28
+ }
29
+ }
20
30
  /**
21
31
  * 选择最佳字幕语言
22
32
  */
@@ -89,6 +99,7 @@ export async function getVideoTranscriptData(bvidOrUrl, preferredLang, fallbackT
89
99
  const subtitleData = await getVideoSubtitle(bvid, cid);
90
100
  if (!subtitleData?.subtitle?.subtitles ||
91
101
  subtitleData.subtitle.subtitles.length === 0) {
102
+ await verifyLoginForEmptySubtitles(bvid);
92
103
  if (fallbackToDescription) {
93
104
  return {
94
105
  bvid,
@@ -194,16 +205,7 @@ export async function getVideoInfoWithSubtitle(bvidOrUrl, preferredLang) {
194
205
  try {
195
206
  const subtitleData = await getVideoSubtitle(bvid, cid);
196
207
  if (!subtitleData?.subtitle?.subtitles || subtitleData.subtitle.subtitles.length === 0) {
197
- // 字幕列表为空。主动调用 /x/web-interface/nav 验证登录状态。
198
- // 理由:B站不会因 Cookie 无效就返回 -101,而是静默降级——字幕列表返回空。
199
- // 通过核实登录状态,我们可以区分两种情况:
200
- // 1. 已登录但视频确实无字幕 → 合法降级
201
- // 2. 未登录(Cookie 过期)→ 抛出明确错误,拒绝静默降级
202
- logger.warn("Video returned no subtitles; verifying login status", { bvid }, { type: "subtitle" });
203
- const { isLogin } = await checkLoginStatus();
204
- if (!isLogin) {
205
- throw new BilibiliAPIError(`Video ${bvid} returned an empty subtitle list and current Bilibili credentials are not logged in. Run "npx -y @xzxzzx/bilibili-mcp@latest config", then "npx -y @xzxzzx/bilibili-mcp@latest check", or update environment variables.`, 'COOKIE_EXPIRED', undefined, { code: -101, bvid });
206
- }
208
+ await verifyLoginForEmptySubtitles(bvid);
207
209
  // 已登录但视频本身无字幕,使用简介降级
208
210
  logger.info("Video has no subtitles while credentials are logged in", { bvid }, { type: "subtitle" });
209
211
  const result = {
@@ -288,8 +290,7 @@ export async function getVideoInfoWithSubtitle(bvidOrUrl, preferredLang) {
288
290
  pubdate_timestamp: pubdate,
289
291
  },
290
292
  };
291
- // 成功获取到字幕,存入缓存
292
- cacheManager.setVideoInfo(cacheKey, result);
293
+ // 不缓存降级结果,以便下次重试时能拉取字幕
293
294
  return result;
294
295
  }
295
296
  }