Commit Graph
266 Commits
Author SHA1 Message Date
Celestials316 faa570273f DANMU_OFFSET 支持按来源指定弹幕偏移,重构偏移系统为独立模块,配置界面增加快速添加规则,修复模态框滚动问题 (#241)
* DANMU_OFFSET 支持按来源指定偏移,配置界面增加快速添加规则,修复模态框滚动问题

- DANMU_OFFSET 扩展 @来源 语法,支持针对特定弹幕来源单独设置偏移量
- 查找优先级:带来源规则优先,fallback 到通用规则,层级从集->季->剧名逐级回退
- 配置界面增加"添加规则"按钮,展开快速配置面板(剧名/季/集/来源/偏移秒数)
- 来源列表从后端 ALLOWED_SOURCES 动态加载,支持多选
- 修复所有变量编辑模态框内容过长时顶部无法滚动的问题

* 更新文档:DANMU_OFFSET 补充 @来源 语法说明

- README 功能介绍和环境变量表格补充来源指定格式
- .env.example 补充来源语法注释和示例

* 重构弹幕偏移系统:独立 offset-util 模块,支持合并源按来源分别偏移

- 新建 offset-util.js,集中偏移逻辑(解析/匹配/应用)
- parseOffsetRules 启动时解析一次,缓存到 globals.danmuOffsetRules
- resolveOffset 支持多级路径匹配(集>季>剧)、来源特定/all通配/通用规则优先级
- applyOffset 兼容 p/t/progress/timepoint 多种时间字段格式
- 支持来源别名映射(tencent→qq, iqiyi→qiyi, bilibili→bilibili1)
- 合并源流程:对齐后、合并前按来源分别应用偏移
- 单源流程:convertToDanmakuJson 前应用偏移
- 删除 danmu-util.js 中旧的 parseOffset/getOffset/applyDanmuOffset

* 优化偏移配置界面:inline styles 提取到 CSS,来源标签选中状态改用 class 控制
2026-03-18 23:38:31 +08:00
huangxd- 13fe8519f1 修改小版本号 2026-03-18 23:37:56 +08:00
lilixu3 f04403962f 优化弹幕测试界面的视频时长获取 (#239)
* 优化弹幕测试页时长获取

变更内容:
- 优先从评论接口和源字段提取测试页视频时长
- 补充不同来源时长回退与测试页展示逻辑
- 更新相关文档与测试用例

* 移除测试页时长界面改动

变更内容:
- 删除接口调试页面中附带时长参数与展示逻辑
- 回退测试页说明文档中的时长处理描述
- 保留评论接口时长能力与相关测试用例

* 恢复接口调试页时长参数

变更内容:
- 恢复接口调试页面中的duration参数与时长展示逻辑
- 恢复UI说明文档中的时长处理描述
- 保持评论接口视频时长能力与测试页联动

* 调整测试页时长展示细节

变更内容:让 comment JSON 的 videoDuration 字段固定排在返回体开头
变更内容:接口调试页在 xml 格式下隐藏附带时长开关并在切换时清空该参数
变更内容:版本号更新为 1.17.1
2026-03-18 00:34:24 +08:00
lilixu3 cdbea1b77d 修复韩剧TV S5 搜索请求 (#238)
变更内容:
- 更新韩剧TV S5搜索请求画像与版本头配置
- 统一韩剧TV应用请求头中的User-Agent与版本号
- 去除无效登录头并保持公开仓库可提交的通用设备画像
2026-03-18 00:33:46 +08:00
huangxd- 410ff59d61 修改弹幕时间偏移配置说明 2026-03-18 00:32:56 +08:00
Elegy233 2dac103629 修复合并源时同一个源不能参与不同组合并的问题 (#230)
* merge-util.js:巩固过滤集相关函数,修复同一个源不能参与多组合并配置

* bahamut.js:将tmdb智能标题前的标题传给合并工具

解决Fate/strange Fake智能替换成中文别名后无法关联的问题

* bilibili.js:将接口中的org_title条目原名也传给合并工具对比

解决 命运-奇异赝品 黎明低语 无法与英文别名关联

* bahamut.js:修复时间轴取整导致的去重偏差

* merge-util.js:修复执行顺序bug

* merge-util.js:修复合集复用副源bug,调整结果排序为用户配置优先

* common-util.js:清理标题空格的同时清理修饰性符号

修复【我推的孩子】括号带与不带时被过滤掉了

* bahamut.js:去除多余空格
2026-03-15 12:58:01 +08:00
huangxd- c5b7221997 新增记住手动选择结果功能新增支持记住集episode/弹幕时间偏移配置/IP黑名单列表配置 (#231)
* 记住手动选择结果功能新增支持记住集episode,下次自动匹配时会对集进行偏移

* 更新README

* 新增IP黑名单列表配置,通过环境变量IP_BLACKLIST配置

* 增加上次匹配剧标题和本次弹幕获取据标题的匹配,防止两者不对应

* 新增弹幕时间偏移配置

* 补充forward插件相关配置

* 增加打印日志

* 修复findIndexById方法没有引用的问题

* 优化lastSelectMap,支持存储不同季

* 优化extractSeasonNumberFromAnimeTitle中尾部阿拉伯数字(如"某某 2" 或 "某某2",但不超过2位)

* 再次优化尾部阿拉伯数字问题
2026-03-15 12:57:32 +08:00
Elegy233 9c637a84d6 弹弹源tmdb原名搜索的结果不再经过标题过滤工具 (#228)
* dandan.js:tmdb原名搜索的结果不再经过标题过滤工具

* merge-util.js:微调评分数值
2026-03-12 23:37:03 +08:00
huangxd- 512b7f36ce 推送弹幕标签页和弹幕测试标签页中新增跳转到指定集数的功能 (#229)
* 推送弹幕标签页和弹幕测试标签页中新增跳转到指定集数的功能,解决比如像名侦探柯南这种集数很多的剧,要滑动很久才能定位到集的问题

* 修复两边都渲染后冲突的问题
2026-03-12 23:36:31 +08:00
Elegy233 0304dd8b8b 标题宽松匹配增加季信息过滤,智能返回用户需要的季应对过滤失准 (#224)
* common-util.js:增加提取季度过滤,应对相似度匹配的失准

并增加严格标题匹配时的例外“年番”、“合集”

* animeko.js:引用common-util工具,删除重合逻辑

* dandan.js:引用common-util工具进行结果过滤,并支持多季场景下的降级搜索

多季场景下的降级搜索:实现搜索“超自然武装当哒当 第二季”能够搜索到“胆大党 第二季”

* merge-util.js:修复偏移时间轴提取错误,优先从p字段提取

* Update merge-util.js
2026-03-11 23:41:15 +08:00
huangxd- 77879719cb 修复DANMU_OUTPUT_FORMAT默认设置为xml的场景下弹幕测试页获取弹幕提示json解析错误的问题 (#227) 2026-03-11 23:40:51 +08:00
lilixu3 8b2e708ebc 新增弹幕测试功能 (#223)
* 新增弹幕测试功能

接口调试页面新增「弹幕测试」标签页,包含:
- 自动匹配测试:输入文件名自动匹配并获取弹幕,模拟播放器自动加载流程
- 手动匹配测试:搜索动漫 → 选择番剧 → 选择剧集 → 获取弹幕
- 弹幕统计:弹幕数、时长、高能时刻、平均密度、匹配时长、类型分布
- 弹幕热力图:按时间段可视化弹幕密度分布
- 弹幕列表:支持全部/滚动/顶部/底部过滤,显示颜色和类型标签,懒加载每次100条
- 导出功能:支持导出JSON和XML格式弹幕文件
- 异常时间处理:使用P99分位数剔除异常时间点
- 视图导航优化:搜索结果/剧集详情/弹幕详情逐级切换,带返回按钮和加载动画

* 优化弹幕测试工具栏样式

- 返回按钮文字缩短,避免挤压导出按钮换行
- 导出按钮改蓝底白字,统一风格
- 导出按钮自适应布局
2026-03-10 22:58:05 +08:00
huangxd- 80953cea3c 修改版本号 2026-03-10 22:57:39 +08:00
Elegy233 a656308fc2 增加弹弹第三方弹幕源实时拉取功能,用于覆盖掉弹弹服务器内缓存的旧弹幕 (#220)
* dandan.js:增加related接口,实现拉取绑定的第三方数据源

同时传出related接口的偏移值和绑定链接给合并工具的跨源时间轴对齐使用

* dandan-api.js:挂载dandan源传出的相关参数,同时更新源标签的标记方式

* merge-util.js:接收来自dandan源准确的偏移值和链接信息,替换掉低精度计算

* danmu-util.js:基于准确的源标签做更加完美的相关处理

* envs.js:增加弹弹第三方数据源实时拉取开关,默认开启

* systemsettings.js:增加一个默认值为true的变量保持开启状态

* .env.example:增加弹弹第三方数据源实时拉取开关说明

* Add REAL_TIME_PULL_DANDAN option to README

* .env.example:统一弹弹第三方数据源实时拉取说明

* .env.example:将第三方数据源统称为第三方弹幕源

* envs.js:将第三方数据源统称为第三方弹幕源

* README.md:将第三方数据源统称为第三方弹幕源

* merge-util.js:去除已经没有使用的旧函数

* systemsettings.js:REAL_TIME_PULL_DANDAN不再保持true

* dandan.js:related接口根据开关动态请求

只在REAL_TIME_PULL_DANDAN实时拉取开启状态或者启用了MERGE_SOURCE_PAIRS合并功能才请求

* envs.js:实时拉取默认设置为关闭

* .env.example:实时拉取默认设置为关闭

* README.md:实时拉取默认设置为关闭
2026-03-04 22:40:15 +08:00
huangxd- 0616a03d86 优化hanjutv源代码 (#222) 2026-03-04 22:39:46 +08:00
huangxd- 124e72a436 hanjutv源增加极速版接口作为兜底 (#219)
* 优化弹幕点赞数显示,修复镂空爱心前数字样式异常;redis包修改成配置后动态引入

* hanjutv源增加tv端接口作为兜底
2026-03-03 23:40:32 +08:00
Elegy233 c01df2f483 动画源细节优化 (#216)
* animeko.js:提高搜索接口结果数量,并支持翻页

* bahamut.js:支持解析正确的类型
2026-03-02 23:50:07 +08:00
huangxd- 0c2d44408a 优化弹幕点赞数显示,修复镂空爱心前数字样式异常;redis包修改成配置后动态引入 (#217) 2026-03-02 23:49:49 +08:00
huangxd- 5aedb8a15d 修复fw插件构建问题 2026-03-01 15:59:29 +08:00
huangxd- b76ccc3de3 修改弹幕点赞显示样式 2026-03-01 14:45:08 +08:00
huangxd- 667c860e96 修改弹幕点赞显示格式 2026-03-01 14:41:32 +08:00
huangxd- b89da2b4f4 调整点赞图标🔥与弹幕文本的距离 2026-03-01 14:10:22 +08:00
huangxd- 8b7a86ce3f 修改点赞图标与弹幕文本的距离 2026-03-01 14:03:03 +08:00
Elegy233 ec52b54bd7 合并增加基于dandan的跨源时间轴对齐功能,使在dandan平台调整过的弹幕源延迟合并拉取时同步生效 (#210)
* merge-util.js:增加基于dandan的跨源时间轴对齐功能,解决在dandan平台调整过的弹幕延迟合并拉取时没有生效的问题

* dandan-api.js:增加跨源时间轴对齐步骤

* dandan-api.js:去除时间轴对齐迭代产生的非必要函数
2026-03-01 13:47:24 +08:00
Wo254992 02f677eba8 修复hanjutv分页游标异常导致循环卡住并优化弹幕累加性能 (#209)
* 修复韩剧TV分页游标不前进导致的循环卡住

变更内容:在 getEpisodeDanmu 分页循环中增加 nextAxis <= fromAxis 时的退出条件,防止上游异常游标导致请求无限循环。

* 优化韩剧TV弹幕累加降低内存抖动

变更内容:将 getEpisodeDanmu 中 allDanmus.concat(...) 改为 push(... ) 原地追加,减少分页循环中的数组复制开销。
2026-03-01 13:46:54 +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
huangxd- e22f81b5f3 修复fw中没有atob和btoa函数的问题 2026-02-27 23:41:16 +08:00
lilixu3 afcf4b872e 修复韩剧TV搜索降级触发缺口 (#201)
变更内容:1. 新增 s5 搜索结果命中计数与候选合并逻辑;2. 当 s5 返回非空但标题零命中时触发 legacy 补偿检索;3. 统一按命中优先去重并补充命中统计日志,避免误判无结果。
2026-02-27 22:54:44 +08:00
Elegy233 8274de32ab 弹弹源引入tmdb原名搜索并支持解析相关作品,解决25个结果上限搜不到和不同季不同译名搜不到的问题 (#200)
* dandan.js:支持从相关作品解析更多作品,解决25个结果上限搜不到和不同季度不同译名搜不到的问题

* dandan.js:增加search/episodes接口并引入tmdb原名搜索

解决动画译名不同导致的无结果,弹弹有别名和模糊搜索的,但是太草台班子了,分词问题有点多
2026-02-27 22:54:16 +08:00
huangxd- e402f1f77c 新增腾讯源/爱奇艺源/优酷源/芒果源/b站源/咪咕源/搜狐源弹幕点赞数显示 (#204)
* 修改搜索接口的titleMatches里的相似度阈值从原先>=80%改为>80%

* 打印hanjutv搜索结果

* 增加 s5 解密后 打印

* 删除hanjutv打印

* 搜狐源增加弹幕点赞数显示

* 芒果源增加弹幕点赞数显示

* 腾讯源/爱奇艺源/优酷源/芒果源/b站源/咪咕源/搜狐源增加弹幕点赞数显示

* 恢复多余的修改
2026-02-27 22:53:05 +08:00
lilixu3 aac6e6d8bc 适配韩剧TV s5解密并完善搜索降级 (#198)
变更内容:新增韩剧TV s5请求头生成与加密响应解密流程。搜索链路只保留s5优先,解密失败或无结果自动降级旧接口,避免返回加密数据。完善详情与分集多接口兜底并补齐分集规范化逻辑,修复上游版本详情与最后弹幕全链路。将韩剧TV AES实现改为纯JavaScript,移除crypto.subtle依赖。
2026-02-24 23:30:42 +08:00
huangxd- 13fc3a11ab 修改hanjutv点赞显示,先去重再拼接点赞标记,点赞数缩写显示(1200 -> 1.2k),例如 ❤️ 2.9k。增加“超高赞高亮样式”规则(hanjutv 中 >=100 用 🔥,普通点赞仍用 ❤️),≥5 才显示,避免低赞干扰 (#199) 2026-02-24 23:30:20 +08:00
huangxd- 0153ebc929 增加埋堆堆源并增加ai匹配 (#197)
* 增加埋堆堆源

* match自动匹配接口系只能ai匹配功能,需根据自身使用模型配置AI_BASE_URL/AI_MODEL/AI_API_KEY/AI_MATCH_PROMPT四个环境变量

* 增加ai连通性测试按钮

* 优化ai match自动匹配

* hanjutv增加弹幕点赞数显示
2026-02-23 22:27:27 +08:00
huangxd- bb75600818 如果是非ADMIN_TOKEN访问,日志和请求记录中的ip将被隐藏,并修复清理缓存按钮不能清理请求记录的问题 (#192)
* 修复清理缓存按钮不能清理请求记录的问题

* 如果是非ADMIN_TOKEN访问,日志中的ip将被隐藏

* 如果是非ADMIN_TOKEN访问,请求记录中的ip将被隐藏
2026-02-15 21:18:11 +08:00
huangxd- 6b7588d18e 环境变量ENABLE_EPISODE_FILTER更名为ENABLE_ANIME_EPISODE_FILTER,同时修复ENABLE_EPISODE_FILTER开启的情况下搜索接口返回500的问题 (#191)
* 修复ENABLE_EPISODE_FILTER开启的情况下搜索接口返回500的问题

* 环境变量ENABLE_EPISODE_FILTER更名为ENABLE_ANIME_EPISODE_FILTER
2026-02-13 22:59:35 +08:00
Elegy233 4e63592595 重构合并工具缩短代码量,并支持传入别名对比和优化合集处理;为某神秘源的港澳台搜索支持影视内容搜索 (#188)
* merge-util.js:重构,并支持传入别名对比和优化合集处理

* animeko.js:传出别名

* dandan.js:传出别名

* http-util.js:删除显式取消流读取,修复低版本Node.js的ERR_INVALID_STATE报错

* bilibili.js:为港澳台搜索支持影视内容搜索

我是笨比,原来只要改类型值就行,不过也有可能是当时测试的解析服务器不支持其他类型导致一直没成功
2026-02-12 21:30:44 +08:00
huangxd- 6ea819744c 添加剧名过滤规则环境便来给你ANIME_TITLE_FILTER,用于按正则表达式对剧名进行过滤,适用于过滤一些不需要的剧集 (#190)
* 添加剧名过滤规则环境便来给你ANIME_TITLE_FILTER,用于按正则表达式对剧名进行过滤,适用于过滤一些不需要的剧集,需开启ENABLE_EPISODE_FILTER

* fw插件如果启用了搜索关键字繁转简,则进行转换
2026-02-12 21:30:01 +08:00
huangxd- a6a0babd22 增加环境变量ANIME_TITLE_SIMPLIFIED,在搜索时将繁体剧名标题自动转换为简体,适用于繁体标题搜索 (#187)
* 修复搜索到的标题中带有括号导致自动匹配季不正确的问题

* 增加环境变量ANIME_TITLE_SIMPLIFIED,在搜索时将繁体剧名标题自动转换为简体,适用于繁体标题搜索,默认值:false(不转换)

* 接口调试ui界面上的/api/v2/search/episodes接口增加episode,用于指定集
2026-02-09 23:22:24 +08:00
huangxd- 16d6c5ab4d 修复build-forward-widget.js的包导入问题 2026-02-08 23:31:17 +08:00
zcw199604 495665dd8d feat(server): 支持 DANMU_API_PORT 配置主端口 (#185) 2026-02-08 23:17:20 +08:00
Elegy233 cb0bf051e6 部分源细节优化 (#184)
* sohu.js:过滤仅预告片结果,提升类型提取准确性

* renren.js:使用准确的类型值

* animeko.js:规范集命名

* merge-util.js:健壮对比函数,修复bug
2026-02-08 23:16:51 +08:00
huangxd- 2ad2d5fa1a 支持咪咕源并增加请求记录标签页 (#186)
* 增加咪咕源

* 完善咪咕源,包括从豆瓣源获取咪咕弹幕

* 修改弹幕源简介

* EPISODE_TITLE_FILTER环境变量不再应用于剧标题过滤,只对集标题生效

* 增加处理简繁同源场景,比如吃->喫;注意->註意,实际不用转换

* 增加请求历史记录

* 增加请求记录ui界面

* 删除清空记录按钮

* 将请求记录的参数改为请求body体

* 对record.interface进行解码

* 请求参数为空的清空下不显示请求体

* 在没有请求体的情况下虚线也不显示

* 增加todayReqNum全局变量,用于记录今日请求数量

* 在UI界面显示今日请求总数

* 修改README

* 修复云部署的服务配置redis后请求记录还是0的问题
2026-02-08 23:16:26 +08:00
Elegy233 f1f5d285fb 动态更新renren源tv接口aliid参数避免风控;修复“我推的孩子”动画 dandan的多季划分无法与bahamut的合集正确关联合并 (#183)
* renren.js:将App接口更换至数据更多的TV接口

* renren.js:动态更新aliid参数避免风控、增强回退网页接口逻辑、补全缺失的日志输出

* merge-util.js:支持合集参与匹配:修复“我推的孩子”动画 dandan的多季划分无法与bahamut的合集正确关联

* Update globals.js 1.13.8
2026-02-05 19:00:50 +08:00
huangxd- 4e6a180ba2 Revert "renren.js:将App接口更换至数据更多的TV接口 (#179)" (#182)
This reverts commit 6c4d73f295.
2026-02-04 22:30:09 +08:00
Elegy233 1c1207ae14 合并功能支持填写单源表示合并后仍保留原结果,忽略来自hanjutv的年份因为不准确 (#181)
* envs.js:合并解析支持解析单个源

* merge-util.js:支持填写单源表示合并后仍保留原结果,忽略来自hanjutv的年份因为不准确

* .env.example:更新合并说明

* README.md:更新合并说明

* envs.js:更新合并说明

* common-util.js:引入简易的相似度匹配,解决动画翻译细微不同导致的被过滤

解决使用“相反的你和我”搜索B站获取不到“正相反的你与我”,动画还是事太多了()
2026-02-04 18:11:42 +08:00
Elegy233 6c4d73f295 renren.js:将App接口更换至数据更多的TV接口 (#179) 2026-02-04 18:11:22 +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- cc4358f1ad Update globals.js 2026-02-04 18:10:32 +08:00
huangxd- ced30a767f 修改forward插件中的剧集标题过滤规则示例 2026-02-01 23:02:41 +08:00
huangxd- 5ad8258d6d 优化西瓜视频源,去除douyin相关接口,国外部署生效 (#177) 2026-02-01 22:20:43 +08:00