17 Commits
Author SHA1 Message Date
huangxd- 089530f7ed chore: 移除 package.json 中的 devEngines 配置
不再强制指定 pnpm 版本,以简化项目管理并避免版本锁定带来的不必要约束。
2026-07-26 21:08:34 +08:00
Rinne 57e693f3d5 feat: 支持更多类型的弹幕输出 (#382)
* feat: 添加基于 @dan-uni/dan-any 的多弹幕格式输出支持,并优化弹幕数据格式化响应

* feat: 更新 README 关于支持多种弹幕格式输出的内容,并添加环境变量配置选项
2026-07-26 20:59:36 +08:00
huangxd- 3a6b5340a0 改用opencc-js处理繁简转换 (#395)
* refactor: 优化构建脚本并改用opencc-js处理繁简转换

- 重构 `build-forward-widget.js` 中的行删除逻辑,改用 split/filter 按片段匹配,避免单行大字典导致正则回溯或内存问题
- 增加 `esbuild.stop()` 确保构建进程正常退出,将 `process.exit(1)` 改为 `process.exitCode = 1` 以允许清理
- 将 `zh-util.js` 中硬编码的繁简映射替换为 `opencc-js` 库,大幅精简代码并提高转换准确性和可维护性

* refactor(utils): 更新 opencc-js 转换器初始化方式

改用 ConverterFactory 并显式导入字典文件,避免使用已弃用的 Converter 构造函数,确保与最新 opencc-js API 兼容。
2026-07-26 20:56:45 +08:00
huangxd- c4d2951eb5 新增红果短剧源 (#394)
* feat: 新增红果短剧源支持

- 在 README 和配置示例中添加红果短剧(hongguo)源,扩展弹幕获取来源
- 更新 SOURCE_ORDER、PLATFORM_ORDER、MERGE_SOURCE_PAIRS 等配置项的可选值
- 新增 hongguo.js 源文件,完善项目文档和目录结构说明

* fix: 支持通过红果播放链接获取弹幕

* feat: 添加红果短剧全集合并选项,支持按集号顺序合并所有集弹幕

- 新增环境变量 `HONGGUO_MERGE_ALL_EPISODES`,默认为 false,启用后将红果短剧所有集的弹幕按剧集顺序合并为一集返回,每集弹幕时间累加前面各集时长,剧集列表显示为“全集”
- 修改缓存键生成逻辑,当启用合并时在缓存键后追加标识,避免与未合并缓存冲突
- 新增 `parseHongguoSeriesId`、`isHongguoSeriesId` 等工具函数用于识别红果系列 ID
- 更新 README 和 `.env.example` 文档说明新配置项

* test: 增强 forward-widget 测试流程的健壮性与剧集匹配逻辑

- 注释掉 storage 模拟中的调试日志,减少测试输出干扰
- 增加进程退出码设置,测试失败时正确返回非零状态
- 新增搜索结果为空时的异常抛出,避免后续空引用
- 优化剧集选择:优先按集数精确匹配,回退到数组索引,增加匹配失败提示
- 新增弹幕分片选择:优先选择包含 450 秒左右的分片,否则取中间时间点
- 增加对分片列表和弹幕列表为空时的异常检查,确保链路完整性
- 调整输出日志,明确显示所选剧集、分片和请求时间点,便于调试

* test: 更新 forward-widget 测试用例参数

- 调整测试数据中的 episode、sourceOrder 和 title 值
- 新增 hongguoMergeAllEpisodes 配置项用于测试
- 更新测试场景以覆盖新逻辑

* feat(forward): 支持debug构建并添加真机远程日志回传

- 新增 `--debug` 构建参数,生成 `logvar-danmu.debug.js` 供真机调试使用
- debug 版本将 `httpGet/httpPost` 替换为带日志回传的调试实现
- 实时回传 handler 执行、请求详情、耗时、异常及 console 输出到服务端终端和 `/api/logs`
- 敏感信息(Cookie、token、API key)在回传前自动脱敏,且回传失败不影响主流程
- 更新 README,补充 Forward 真机调试步骤和使用说明
2026-07-26 20:56:32 +08:00
huangxd- ce8b3cbddf feat: 为ForwardWidget构建添加运行时兼容插件,并重构解压工具函数 (#376)
- 新增 forwardRuntimeCompatPlugin 插件,处理 node:async_hooks 的浏览器兼容实现,并重定向 brotli 字典文件至浏览器版本,确保 ForwardWidget 在浏览器类运行时环境中正常运行
- 将 iQiyi 源中的 Brotli 解压逻辑迁移至 codec-util 的 decompressBrotli 通用函数,统一使用 utf8BytesToString 替代 TextDecoder,提升代码复用性和可维护性
- 此举旨在减少构建产物中的 Node.js 内置模块依赖,并集中管理解码工具,便于后续扩展
2026-07-18 08:08:12 +08:00
huangxd- 8e1487409d 兼容ios环境下WebAssembly不存在的场景,适配peekpili搭建本地服务 (#245) 2026-03-19 22:38:56 +08:00
huangxd- 10b2ca89ae 支持本地redis缓存配置 (#213)
* 弹幕点赞数改成镂空♡显示,数量使用下标数字,并增加环境变量LIKE_SWITCH开关该功能,默认开启

* 增加hanjutv日志打印

* 修改说明

* 支持本地redis缓存配置

* 增加render环境的判断

* Revert "增加render环境的判断"

This reverts commit 952257895a2705debf079485c8558969b46f986a.

* 修改注释

* 修复cloudflare不支持redis包安装的问题

* 修复cloudflare不支持redis包安装的问题
2026-03-01 13:46:28 +08:00
Elegy233 2d5a343036 重构server.js为纯ESM,优化esm-shim兼容层逻辑,解决node启动时日志中的警告 (#178)
* esm-shim.js:更改扩展名.js为.cjs强制开启 CommonJS模式

原因: 项目启用了 "type": "module" 后,Node.js 会默认将所有 .js 文件视为 ES Module 解析。然而,兼容层 (shim) 的核心逻辑依赖于 CommonJS 特有的 API(如 require、module._load、Module.prototype._compile)来劫持模块加载。

解决: 通过将扩展名改为 .cjs,显式告知 Node.js 即使在 ESM 项目中,该文件仍需以 CommonJS 模式 加载。这确保了它能在不破坏新架构的前提下,继续为旧版 Node.js 提供兼容性支持。

* esm-shim.cjs:重构并优化,使其更加符合项目整体规范

将原本的脚本式 Shim 重构为符合工程规范的模块,并补充了标准的 JSDoc 注释。

提取了硬编码配置为常量,提升可维护性。

使用闭包隔离了 Shim 的内部逻辑,防止污染全局作用域。

* server.js:重写为 ESM 语法

移除了不再需要的“异步启动检测”逻辑(原生 ESM 支持顶层 await,无需迂回)
API 现代化:将已废弃的 req.connection 替换为 req.socket,将 url.parse 替换为标准的 new URL()。

* package.json:声明"type": "module",正式启用原生 ESM 支持

组合解决日志中的启动警告

* server.js:更新启动提示

* README.md:更新项目结构

* server.js:修复意外的全局覆盖导致不支持流式请求,改为和原版一致的局部引用

http-util.js 里调用的 fetch 是 Node.js 18+ 自带的原生 Fetch,但是重构后不小心强制了node-fetch,实际并无需要

* tmdb-util.js:修复未捕获的Promise拒绝导致进程崩溃退出

嗯?以往怎么没崩草
node:internal/deps/undici/undici:13510
      Error.captureStackTrace(err);
            ^
DOMException [AbortError]: This operation was aborted
    at node:internal/deps/undici/undici:13510:13
    at async httpGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/http-util.js:49:24)
    at async tmdbApiGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:22:22)
    at async searchTmdbTitles (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:71:22)
    at async executeSearch (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:354:24)

Node.js v22.18.0
2026-02-04 18:10:58 +08:00
huangxd- 53e81421a3 删除config.yaml配置支持,后续只支持.env配置文件 2026-01-11 23:10:01 +08:00
huangxd- 3022f14fdf Feature: 支持分片弹幕接口并增加一键导出forward弹幕插件 (#118)
支持分片弹幕接口

/api/v2/comment 请求时支持定义 segmentflag=true 参数,用于请求弹幕分片列表
/api/v2/segmentcomment 通过comment接口返回体中的Segment类JSON数据获取单独一个分片的弹幕数据
增加一键导出forward弹幕插件,使用命令 node build-forward-widget.js

修复youku弹幕里color是字符串导致返回的格式错误的问题
2025-12-24 22:38:36 +08:00
woleigedouer c04a11ffc1 小修小改 (#82)
* Fix:为所有源处理器添加全面的错误处理

* feat: 添加 YAML 配置文件支持

新增功能:
- 添加 js-yaml 依赖用于解析 YAML 配置文件
- 实现 YAML 配置加载和转换功能
  * loadYamlConfig() - 加载和解析 config.yaml 文件
  * applyYamlConfig() - 将 YAML 配置转换为环境变量(支持递归嵌套对象)
- 扩展文件监听机制,同时支持 .env 和 config.yaml 热更新

* feat: 实现空格无关的标题匹配,解决搜索结果不一致问题

* Update globals.js
2025-10-31 17:11:16 +08:00
woleigedouer 571bc727a6 feat: 添加弹幕转换功能 - 支持顶部/底部和彩色弹幕转换 (#62) (#65)
* feat: 添加弹幕转换功能

- 支持将顶部/底部弹幕转换为浮动弹幕(CONVERT_TOP_BOTTOM_TO_SCROLL)
- 支持将彩色弹幕转换为纯白弹幕(CONVERT_COLOR_TO_WHITE)
- 解决部分播放器不支持顶部/底部弹幕和彩色弹幕的问题
- 优化 convertToDanmakuJson() 函数逻辑
- 转换在去重后执行,性能开销极小(< 0.5 微秒/条)
- 已通过多平台真实测试(腾讯、爱奇艺、优酷、芒果)
- 更新 .env 和 README.md 文档

* 修复 bahamut episodes 处理错误并添加 b23.tv 短链接解析功能

* fix: 移除 worker.js 中的 dotenv require 以修复 Cloudflare Workers 部署问题

* feat: 添加环境变量热更新功能

- 实现 .env 文件监听和自动重载
- 添加 200ms 防抖机制避免重复触发
- 支持文件删除事件处理
- 实现优雅关闭和资源清理
- 修复 dotenv 不覆盖已存在环境变量的问题(添加 override: true)
- 添加 chokidar 依赖支持文件监听
- 更新文档说明热更新使用方法

影响范围:
- Node.js 本地运行环境
- Docker 容器环境(需 Volume 挂载)
- 不影响 Cloudflare/Vercel/Netlify 部署

* 调整日志级别默认值为 info

* Update worker.js
2025-10-19 23:35:25 +08:00
woleigedouer 694e6b9bf8 feat: 重构VOD服务器配置,支持多服务器并发查询。添加通过视频URL直接获取弹幕的API接口 。 (#46)
* feat: 重构VOD服务器配置,支持多服务器并发查询

- 移除 VOD_SERVER 和 VOD_SERVER2 双服务器配置
- 新增 VOD_SERVERS 支持无限个 VOD 服务器
- 配置格式: 名称@URL,名称@URL,...
- 使用 Promise.allSettled 并发查询所有 VOD 服务器
- 单个服务器失败不影响其他服务器
- 调整默认源排序: 360 优先于 vod
- 添加 dotenv 支持本地开发
- 新增 .env.example 环境变量配置示例

Breaking Changes:
- 环境变量 VOD_SERVER 和 VOD_SERVER2 已废弃
- 请使用 VOD_SERVERS 替代
- 默认 VOD 服务器从 https://gctf.tfdh.top 改为 https://www.caiji.cyou

* feat: 添加通过视频URL直接获取弹幕的API接口

- 新增 POST /api/v2/comment/by-url 接口,支持通过视频URL直接获取弹幕
- 新增 getCommentByUrl 函数处理URL推送请求
- 支持 B站、腾讯、爱奇艺、优酷、芒果TV 等主流平台
- 优化 getComment 函数的平台判断逻辑(改为 if-else if)

* Update README.md

* 更新版本号 修正文档错误示例
2025-10-14 18:51:00 +08:00
huangxd- c458577595 增加支持巴哈姆特源以及vod2源支持 (#41)
* 刷新弹幕屏蔽词正则示例列表

* 增加支持巴哈姆特源

* 添加vod2源支持

* docker和node启动支持配置代理环境变量PROXY_URL
2025-10-06 14:46:49 +08:00
Elegy233 32cb44c5e3 增加ESM兼容层,实现简单兼容Node.js低版本 (#16)
* 增加esbuild依赖

* 增加ESM兼容层,实现兼容Node.js低版本

* 修改启动方式,智能判断是否启用ESM兼容层

* 修复不知道为什么点号变成了中文句号

* 更新Node.js支持版本

esbuild依赖版本需要Node.js > v18,理论上降低版本就能兼容更低版本但懒得测了()也是重回v18了

* 更新项目结构
2025-09-21 07:52:28 +08:00
huangxd- efc85aee97 适配cloudflare部署 2025-09-11 22:21:21 +08:00
huangxd- ac96ecd739 调整目录结构 2025-09-09 23:16:43 +08:00