huangxd-
|
afc8b8119f
|
chore: 更新 README 项目结构说明并调整 forward 测试用例参数以同步文档与测试数据
在 README 项目结构中补充 .pr_agent.toml、pr_agent.yml 和 icons.js 的说明;将 forward 测试的 sourceOrder 从 hongguo 改为 douban,并更新测试标题为“早春晴朗”,使文档记录与新增配置/资源一致,测试样例保持最新。
|
2026-10-03 07:12:39 +08:00 |
|
 Wo254992andhuangxd-
|
7f44d1a67f
|
fix(cache): 隔离缓存后端并优先恢复 Local Redis 查询数据 (#492)
* fix(cache): 隔离缓存后端并优先恢复 Local Redis 查询数据
* fix(cache): 透传剧集 ID 写入失败并补充清理失败提示
- addAnime 的 ID 溢出/映射错误保留在请求级 detailStore,逐层合并后写入搜索响应 errorMessage,不再只留服务端日志
- 清缓存保存失败时提示未保存的后端仍保留清理前数据、重启后会重新加载
- 补充搜索透传与清理失败提示的回归用例
* fix(cache): 收敛剧集 ID 写入失败的提示范围并隔离诊断日志
- 诊断用的 animes 序列化移出主 try 并自带容错:历史快照里残留
links 为 null 的条目时,序列化不再把已成功的写入判成失败,也不再把
内部报错透给调用方。
- errorMessage 只在"没有结果"时承载写入失败原因,恢复与 dandanplay
既有约定一致(其余响应点均与 success:false 配对);链接解析与合并
分支恒有合成条目,不承载该提示。
- /api/v2/match 与 /api/v2/search/episodes 在无结果时透出同一原因,
补齐上一提交只覆盖搜索接口的缺口。
- 逐源隔离存储的错误合并抽为 mergeAddAnimeError,去掉重复实现。
- 测试:溢出用例拆成"无结果"与"部分成功"两个方向,新增 links 为 null
的历史快照不再拖垮后续写入用例。
* fix(cache): 限制本地 Redis 命令响应等待时间
- 初始化读取使用 5 秒响应期限,普通 GET/SET/SETEX 使用 30 秒期限
- 超时关闭对应连接并冷却 30 秒,释放在途请求;失败不更新保存 hash
- 复用现有 TCP 故障测试,覆盖读取回退、并发等待、写入失败及冷却后重连
- 影响范围仅限 Local Redis 工具与测试,不新增配置或依赖
- 验证:159 项测试通过,原始故障脚本复测通过,语法检查及 Node/neutral 打包通过
* fix(cache): 收敛编号恢复并限制缓存清理等待
- 编号兜底统一在初始化结束时判断,健康计数器或 ID 不受损坏副本影响
- 剧集链接分配失败时回滚本次追加的 ID 和计数器,保留既有详情与映射
- 各后端并发清理,Redis 清理使用包含 Local Redis 建连时间的 5 秒预算
- 保留持久化失败状态与失败后端提示,普通业务沿用原超时设置
- 复用持久化和 TCP 故障用例补充回归,说明编号兜底及备份语义
* fix(cache): 修复 Upstash 收藏热切换与读取失败假成功
* fix(cache): 补齐剧集编号引用并按详情批次校正上界
* perf(cache): 复用 Local Redis 批量保存的序列化结果
* fix(cache): 阻止热切换前的收藏请求修改新库
* test(cache): 将缓存回归测试合并到主测试文件
* test(cache): 扩大 Redis 超时测试的预算压缩范围,5 个场景耗时从 ~27s 降至 ~8s
- 业务命令 30s、握手 5s、批量/清理 5s 与 Upstash 5s 一并钳制到 1200ms,并新增 AbortSignal.timeout 钳制
- clear-write 假服务器慢握手停顿 3000ms 降至 600ms,保持仍慢于压缩后的命令预算
- 断言下限 4500ms 调整为 1000ms,上界收紧至 4000ms
- 新增断言验证清理路径剩余预算扣除已耗连接时间(budgets 记录原始值)
---------
Co-authored-by: huangxd- <649924757@qq.com>
|
2026-10-02 23:11:33 +08:00 |
|
Elegy233
|
d91079ebc1
|
feat(dandan): 弹弹302关联链接仅分发给已在 SOURCE_ORDER 开启的源 (#489)
关联链接的对应平台只要已接入采集源就会实时拉取,与 SOURCE_ORDER 表达的可选源范围无关。现要求该源已在 SOURCE_ORDER 中开启才分发,未开启的源与已独立选择的合并源一样跳过并记录日志。README、config/.env.example 与 envs.js 中 DANDANPLAY_ACCOUNT 的说明同步为「并把同一请求下发的弹弹关联链接分发给对应平台源实时拉取(需开启对应源)」。
worker.test.js 新增用例:仅开启 bilibili 时只拉取 bilibili、仅开启 tencent 时分发目标随之切换、两个关联源均未开启时不拉取、已开启但被独立选择的合并源覆盖时同样跳过。
|
2026-10-02 21:35:44 +08:00 |
|
 Elegy233andhuangxd-
|
c42877ccf0
|
feat(dandan): 弹弹play弹幕替代机制改用 NipaPlay 中转弹弹play服务端获取弹幕与弹弹302关联链接(需登录) (#487)
* feat: 弹弹play弹幕替代机制改用 NipaPlay 中转弹弹play服务端获取弹幕与弹弹302关联链接
dandan 源原经弹幕代理获取弹弹缓存弹幕,仅在弹幕为空时借弹弹302关联链接拉取跨平台弹幕。现改为:配置弹弹play账号后,dandan 源经 NipaPlay 中转弹弹play服务端获取弹幕,并把同一请求下发的弹弹302关联链接分发给已接入的对应平台源实时拉取,两部分沿用既有多源去重合并。
- 源配置新增 DANDANPLAY_ACCOUNT 与 DANDANPLAY_PASSWORD,账号与密码同时填写后自动开启,移除 NIPAPLAY_REPLACE_DANDAN 开关
- 密码配置页提供连通性测试,新增 POST /api/nipaplay/verify
- NipaPlay 中转弹弹play服务端以香港线路为主、国内线路为备,主线路连续失败达到阈值后临时切换备用线路
- 原生弹幕地址请求失败时保留已解析的弹弹302关联链接,仍交由自采源拉取
- 以内嵌应用密钥与签名换取关联链接的做法改为账号令牌登录,令牌临近过期自动续期
- 凭据类变量与文本类变量同样绕过 dotenv 注释截断,含 # 时无需转义即可完整读取,写入 .env 后即时生效
- AI API Key 与 B站 Cookie 各自独立的编辑器样式合并为通用凭证编辑器样式,供 AI API Key、弹弹play密码与 B站 Cookie 共用
- nipaplay-util.js 日志标签按源与服务模块标注为 [dandan] [nipaplay]
- README 与 .env.example 新增两个账号变量的配置项与说明,配置预览新增「NipaPlay 中转弹弹play服务端」分组
* fix: httpRequestMethod 统一支持 allow_redirects 并修正失真 JSDoc
httpGet/httpPost 已实现 allow_redirects,httpRequestMethod(PATCH/PUT/DELETE 委托)此前未实现,其 JSDoc 标注「暂未实现」失真。现于 httpRequestMethod 统一实现:默认跟随重定向,false 时禁止以截获 3xx Location,与 GET/POST 行为一致;同步修正 JSDoc,并移除与 JSDoc 语义重复的那行注释。
* fix: 管理接口凭据写入日志脱敏,以按 encrypt 登记的变量为判据
- setEnv 日志对凭据类变量以 *** 脱敏,避免令牌/密码/Cookie/带令牌 URL 明文进入运行日志;判据为 Envs.sensitiveKeys(由 Envs.get 在 encrypt 为真时登记),非凭据变量保留明文以便排障
- 保存接口对掩码值 *** 跳过写入,避免凭据编辑框未改动直接保存时用星号覆盖服务端已存的真实值
- 补全 Envs.get 缺失的 encrypt 参数说明
* fix: applyShiftToDanmu 复用通用偏移工具处理关联链接偏移
原手写实现直接对 p 首字段与 t 做加减,缺少通用偏移工具的非负钳制,负偏移且绝对值大于弹幕时间时会产出负时间戳。
现改为调用 offset-util 的 applyOffset,与手动 @偏移、DANMU_OFFSET 等其余偏移路径行为一致,并保留 isRealTimePulled 标记供 dandan 源 formatComments 跳过专属转换。
worker.test.js 补充负偏移钳制用例。
* test: 补充重定向一致性与 dandan 实时拉取标记的回归用例
worker.test.js 补充两处行为的回归用例:httpRequestMethod(经 httpPatch)的 allow_redirects 是否与 GET/POST 一致,以及 dandan 源 formatComments 是否按 isRealTimePulled 区分原生弹幕与实时拉取弹幕。两者均为可稳定回归的纯逻辑,纳入项目测试以免后续回归。
* refactor: dandan.js 模块级定义下移以与其它源的结构保持一致
将 DandanUserAgent、SOURCE_TO_PLATFORM、getRelatedDanmuViaNipaplay、fetchDandanComments 下移到导出类之后,使「获取弹弹play弹幕」分节注释与其它源一致地紧随导入与源实例之后。
上述标识符均在函数体或方法体内使用,不在模块加载期求值,故下移不影响运行;已验证导出类方法仍可正常调用下移后的函数。
* fix: 弹弹play 与 AI 连通性检测改为随请求提交配置值
B站 Cookie 检测以请求体中的值向 B 站实时校验,弹弹play 与 AI 的检测则只能取到服务端运行期配置:弹弹play 的账号、AI 的地址与模型都不随检测请求提交。云部署(vercel 等)保存变量需重新部署才会刷新运行期配置,因此这两处检测在重新部署前一直失败。
现改为账号、密码、密钥、地址、模型一律随检测请求提交,取值自设置页已加载的配置;掩码值(当前访问无权限读取明文)视为未知,交由服务端回退到已保存配置。
worker.test.js 补充设置页请求体字段与弹弹play/AI 验证接口以请求体为准的用例。
* chore: bump version to 1.21.3
---------
Co-authored-by: huangxd- <649924757@qq.com>
|
2026-09-26 16:21:34 +08:00 |
|
Elegy233
|
ea88a15a7a
|
refactor(ui): 配置界面优化与图标补全,修正 TITLE_NOISE_FILTER 默认值 (#478)
* feat(ui): 配置页统一最近数据入口与操作按钮,修正合并模式已选源状态
- 新增 chevron-left 图标,返回按钮以图标替换手写左箭头符号
- 「查看最近数据」按钮与面板抽为 renderRecentDataButton / renderRecentDataPanel 供各配置页共用
- 标题过滤类配置(ANIME_TITLE_FILTER、EPISODE_TITLE_FILTER、TITLE_NOISE_FILTER)增加「查看最近数据」入口
- 「查看最近数据」统一右对齐,尺寸与同行操作按钮保持一致
- 修正 PLATFORM_ORDER 开启合并模式后已选源不可再选的问题,与 MERGE_SOURCE_PAIRS 行为一致
* fix: 修正 TITLE_NOISE_FILTER 默认值文档并补齐全角方括号
- README 与 config/.env.example 中 TITLE_NOISE_FILTER 默认值多写了一个反斜杠,字符类被
提前闭合导致 new RegExp 抛 Unmatched ')',用户照抄该默认值会得到非法正则
- 默认规则补齐全角方括号 [],描述按段落换行,并改用 String.raw 使源码文本与正则内容一致
- MERGE_SOURCE_PAIRS 示例在描述、README 与 JSDoc 中统一为 dandan&bahamut&animeko,renren&hanjutv,renren
- worker.test.js 增加默认规则用例:默认值可直接编译并清理剧名杂音(含全角方括号),且
README 与 config/.env.example 中的默认值必须与代码默认值一致
* feat(ui): 配置页操作按钮增加间距与图标
映射表、偏移规则、合并规则页的左右操作按钮在窄屏下无间距而贴边,
为按钮行增加间距;并为添加与解析类操作按钮增加线性图标,与查看最近
数据按钮的图标风格对齐。
- 左右操作按钮行增加间距
- 新增加号图标,用于添加映射项、添加规则按钮
- 解析并更新列表按钮使用刷新图标
* fix(ui): 修复添加规则切换按钮图标丢失
添加规则与收起规则切换按钮按状态写入图标:收起态使用向上箭头图标,
添加态使用加号图标。
* refactor(ui): 请求记录时间戳时钟 emoji 替换为线性图标
时间戳前的时钟 emoji 由 CSS 伪元素注入,改为在标记中渲染时钟
线性图标。
* refactor(ui): 日志查看与请求记录页头部间距与对齐调整
日志查看与请求记录页标题与操作按钮行之间增加间距;请求记录页
今日请求总数改用 flex 与刷新按钮居中对齐。
* fix(ui): 修复请求记录页在旧内核浏览器下的卡顿
最新版本徽标的呼吸动画叠加 backdrop-filter 模糊,缩放时持续重新
采样整页内容,旧内核浏览器软件合成下触发持续重绘,记录较多时卡顿。
去掉该徽标的 backdrop-filter,并为页头持续动画补充合成提示。
* fix(ui): 统一最新版本徽标暗色模式背景并清理无意义毛玻璃
最新版本徽标在暗色模式下沿用实底主题色覆盖,与浅色模式的半透明
背景不一致,删除该覆盖;并移除当前版本徽标上无意义的 backdrop-filter。
|
2026-09-13 13:10:36 +08:00 |
|
huangxd-
|
0f02cdc036
|
feat(local-danmu): 优化本地弹幕 (#479)
* fix(ui): 让原生 select 下拉菜单跟随明暗主题配色
- 移除 html 上强制的 `color-scheme: light !important`,改为根据 body 的 data-color-scheme 对 select 单独设置明暗 color-scheme
- 为 select 的 option/optgroup 弹出菜单指定主题容器背景色与文字色,修复暗色模式下下拉弹窗仍为白底的问题
- 调整导航按钮顺序,将“本地弹幕”移至“请求记录”之前
* feat(local-danmu): 新增标题搜索过滤并默认折叠分组卡片
- 在本地弹幕列表上方新增搜索输入框,支持按标题关键词即时过滤已上传资源
- 缓存完整分组数据(localDanmuGroups),搜索时无需重新请求接口,并保留原有展开状态
- 渲染函数支持自定义空列表提示,搜索无结果显示“未找到匹配标题”,其余场景仍显示“暂无资源”
- 分组卡片默认改为折叠状态,避免资源较多时列表过长影响浏览
- 更新 worker 测试以适配渲染函数新的空文案参数及搜索相关交互
* feat(ui): 本地弹幕管理支持标题搜索、重新上传与整组删除
- 管理列表新增按标题关键词搜索,便于快速定位已上传的剧集
- 每集新增“重新上传”按钮,可直接替换原有弹幕文件
- 剧集分组新增“删除整个剧集”按钮,支持一次性删除整组资源
- 新增 local-danmu-group-remove、local-danmu-episode-actions 等样式类
- 同步更新根目录与 UI 模块 README 中本地弹幕功能的使用说明
* feat(local-danmu): 新增 PATCH 接口支持编辑本地弹幕元数据
- 新增 PATCH /api/v2/local-danmu/:resourceKey 接口:scope=resource 可修改集数与显示文件名,scope=group 可修改当前季的标题、年份、类型与季数
- 抽取 buildLocalDanmuMatchKeys 函数,复用上传与编辑时的匹配键构建逻辑
- 新增 validateEditFields 校验编辑字段的标题、年份与类型合法性
- 编辑仅更新元数据,不重新解析弹幕内容;目标资源已存在时返回冲突错误,避免覆盖原文件
- 同步更新 README 中本地弹幕接口及管理列表编辑功能的说明
* feat(ui): 支持电视剧本地弹幕文件批量导入
管理页面新增电视剧弹幕批量导入功能,提升多集上传效率:
- 同一部电视剧可多选文件一次导入,共用标题、年份和季
- 按文件名自动识别集数(如 S01E02、EP02、第02集、02.xml),
支持逐个修改;未识别或重复的集数需先修正
- 页面逐个调用现有单文件上传接口,单个文件失败后继续处理
其余文件,并显示各文件结果及成功、失败统计
- 电影仍逐个导入;同步更新 README 文档与批量预览样式
|
2026-09-13 13:09:37 +08:00 |
|
huangxd-
|
1524494c45
|
feat(local-danmu): 新增本地弹幕上传、解析与管理功能 (#474)
- 新增 POST /api/v2/local-danmu/upload 接口,支持上传并解析本地弹幕文件(multipart/form-data,单文件最大 10 MB),电视剧可指定 season/episode
- 新增 GET /api/v2/local-danmu/list 获取按标题、年份、类型、季分组的资源列表;GET/DELETE /api/v2/local-danmu/:resourceKey 支持查询元数据与删除资源
- 接口需 TOKEN 或 ADMIN_TOKEN 鉴权,新增 LOCAL_DANMU_NOT_REQUIRE_ADMIN 环境变量控制上传/删除权限,默认仅管理员可操作,设为 true 时普通 TOKEN 用户也可执行
- Node/Docker 部署将资源保存至 .cache/local-danmu,云端部署使用 Redis 持久化
- SOURCE_ORDER 新增 local 源字段,可将本地弹幕搜索结果纳入排序(如 local,douban,360)
- 管理面板新增本地弹幕上传、列表管理与删除功能,并同步更新 README 接口与配置说明
|
2026-09-12 07:26:07 +08:00 |
|
 xlmcandxlmc
|
b5458edd73
|
feat: 增强弹幕屏蔽词解析与生效诊断日志 (#453)
* feat: 增强弹幕屏蔽词解析与生效诊断日志
- 重写 BLOCKED_WORDS 解析器:支持 /regex/flags 正则词条与纯文本词条混用,兼容中英文逗号(,/,)及逗号前后空格;正则词条内部的逗号不再被误切分
- 正则词条支持 i/m/s/u 等标志;自动剥离 g/y 标志避免 lastIndex 状态污染
- 非法正则自动降级为字面量匹配并输出警告,不再静默丢弃整条规则
- 新增生效诊断日志:规则解析结果、拦截总数/每条规则命中次数、拦截示例、无命中提示、配置无效警告,便于用户确认屏蔽词是否实际生效
- 更新 README 中 BLOCKED_WORDS 说明与示例
- 新增 test_blocked_words.mjs 覆盖 7 类解析场景(7/7 通过)
* fix: 移除未实现的 TITLE_MAPPING_TABLE_URL 配置说明,测试合并至 worker.test.js
- 删除 README 中 TITLE_MAPPING_TABLE_URL / TITLE_MAPPING_TABLE_URL_CACHE_MINUTES 两条配置说明(对应功能未包含在本 PR)
- test_blocked_words.mjs 的 7 类屏蔽词解析场景合并进 danmu_api/worker.test.js,删除独立测试文件(38/38 通过)
---------
Co-authored-by: xlmc <xlmc@users.noreply.github.com>
|
2026-08-22 12:07:48 +08:00 |
|
huangxd-
|
12d62ad97f
|
修复AI匹配中单集电影抢占SxxExx电视剧的问题及红果弹幕获取 (#454)
* feat: 添加收藏功能可用性检测,未配置Redis时禁用UI操作
- 在收藏列表接口中返回 `favoriteSupported` 字段,根据部署平台及 Redis 配置动态判断
- 前端根据 `favoriteSupported` 禁用“收藏”按钮,并显示配置 Redis 的提示信息
- 更新 README 说明 serverless 平台需配置 Upstash Redis 才能启用收藏功能
- 避免无持久化存储的实例在冷启动或实例切换后丢失收藏数据导致用户误操作
* chore: 升级版本号至 v1.20.8
* fix: 修复AI匹配中单集电影抢占SxxExx电视剧的问题
- 新增 isMovieMatchCandidate、getMatchEpisodeCount 和 isSingleEpisodeMatchCandidate 函数,用于准确识别电影及单集候选。
- 在 matchAniAndEpByAi 中,若 AI 选中单集候选而存在多集电视剧候选,则回退到常规季集匹配,避免同名电影错误命中 S01E01。
- 在常规匹配循环中,跳过单集候选参与有季集参数的匹配,并调整评分逻辑,对多集候选加分、单集候选减分,提升多集电视剧优先级。
- 优化 break 条件,避免单集候选提前终止搜索,确保多集候选能被充分比较。
* feat(hongguo): 添加Web端HTML解析作为搜索和剧集获取的备用方式
- 新增parseWebSearchResults和parseWebSeriesDetail函数,从HTML响应中提取JSON数据
- search方法优先请求Web端/search页面,解析搜索结果列表
- getEpisodes方法优先请求Web端/detail页面,解析剧集列表
- 当Web请求失败时回退至原有API方式,提升数据获取的稳定性
|
2026-08-22 12:05:38 +08:00 |
|
huangxd-
|
e21bd99677
|
docs: remove recommended label for Netlify deployment
移除 Netlify 部署方式的“【推荐】”标签,因为该平台存在封号风险,不再适合作为推荐选项
|
2026-08-15 08:10:28 +08:00 |
|
Elegy233
|
62fd0afddf
|
feat: 弹弹play源支持经 NipaPlay 302关联链接获取弹幕,并支持 NIPAPLAY_REPLACE_DANDAN 替代原生弹幕开关 (#439)
* feat: 弹弹play源支持经 NipaPlay 302关联链接获取弹幕,并支持 NIPAPLAY_REPLACE_DANDAN 替代原生弹幕开关
当 dandanplay 原生弹幕为空(新番上线缓存空窗期)时,dandan 源借助 NipaPlay 授权的
302关联接口,经 302 重定向获取用户在弹弹play客户端实际绑定的跨平台播放链接,实时拉取
bilibili/bahamut/iqiyi/youku/tencent/mango 的弹幕作为兜底。
新增 NIPAPLAY_REPLACE_DANDAN 开关(默认关闭,经 envs 暴露、前端可配置):开启后 dandan
源以 nipaplay 关联弹幕替代弹弹原生弹幕,跳过原本的弹弹 HTTP 弹幕接口请求(不做并行,避免请求量
放大);当关联链接为空时回退弹弹自身弹幕作为安全网(因采用项目链路获取弹幕,会丢失弹弹
自身平台弹幕,多平台中巴哈需确保可连通)。
实现要点:
- 关联接口凭证由 NipaPlay 授权下发,参数经运行时派生与重组还原,源码不出现可读明文(禁止滥用);
- 签名生成、302 关联链接的解析与请求抽取至 nipaplay-util.js,dandan.js 仅负责触发与分发;
- 复用各平台既有源实例拉取弹幕,对各源零侵入;
- 兜底弹幕按真实来源标注平台标识(如 bilibili1/qq/qiyi),与手动解析链接输出一致;
- 同平台多个链接串行、间隔 1 秒请求,避免短时间内同平台并发触发风控;
- 已独立选择的合并源按源名与平台标识双重比对跳过,避免重复获取;对跳过的合并源输出日志,使合并源冲突防范可见;
- 关联接口响应仅含重定向(无弹幕体,单次线上响应约数百字节),弹幕数据来自后续按平台
链接实时拉取,对既有请求路径无额外放大。
* test: 增加 nipaplay 弹蛋302关联工具函数单元测试(注释态)
覆盖 parseNipaplayRelatedLinks、resolveNipaplayLink、applyShiftToDanmu、generateNipaplaySignature;按仓库既有约定以注释形式提交,解除注释即可经 node --test 运行。
* fix: 移除 NIPAPLAY_REPLACE_DANDAN 配置说明反引号并改用换行
envs.js 与 .env.example 的 NIPAPLAY_REPLACE_DANDAN 说明原使用反引号包裹 false/true 与三条注意事项,前端当前无法渲染反引号。改为去掉反引号,并参照既有配置(如 USE_BANGUMI_DATA)使用换行分隔默认值、可选值与注意事项,提升前端展示可读性。
* docs: 调整 README 致谢中 NipaPlay-Reload 弹弹302关联链接描述
去掉致谢行中重复的 NipaPlay-Reload 字样,并将授权改为请求授权以准确描述链接授权性质。
* docs: README 致谢补充弹弹play开放平台链接
在 NipaPlay-Reload 提供的 302关联链接请求授权描述中,为弹弹play开放平台补充官方文档链接,与上方 danmaku-anywhere 行风格一致。
|
2026-08-15 07:57:46 +08:00 |
|
huangxd-
|
0d3f7ede7c
|
feat: 支持 IPv4/IPv6 双栈监听并优化服务器启动与清理逻辑 (#445)
- 新增 server-listen-util.js 工具,实现 IPv4/IPv6 双栈监听及 IPv4 自动回退
- server.js 改用 listenOnAllInterfaces 替代硬编码 0.0.0.0,提升网络兼容性
- 优化 cleanupWatcher 函数,增加 listening 检查及退出码参数,避免重复关闭
- README 补充 IPv6 访问格式、Docker 双栈说明及相关工具文件描述
- 版本号升级至 1.20.7
|
2026-08-15 07:56:27 +08:00 |
|
huangxd-
|
17b3f4d723
|
fix: 优化自动匹配映射表开放规则排序,同源季下按起始集数降序优先 (#435)
调整 `resolveAutoMatchMapping` 中开放规则的排序逻辑:当多个开放规则指向同一源标题和季数时,优先匹配起始集数更大的规则(即更具体的区间),仅在相同起始集数时保持声明顺序。这解决了同季多个映射段重叠时规则选择错误的问题,并更新 README 说明文档,新增对应单元测试覆盖该场景。
|
2026-08-11 00:19:02 +08:00 |
|
huangxd-
|
1b719f43d6
|
feat: 新增收藏管理权限控制环境变量 FAVORITE_REQUIRE_ADMIN (#434)
* feat: 新增收藏管理权限控制环境变量 FAVORITE_REQUIRE_ADMIN
支持通过环境变量控制收藏写入和管理接口是否必须使用 ADMIN_TOKEN,收藏列表仍保持公开只读。更新了配置示例、环境变量文档、UI 预览及版本号至 1.20.6。
* fix: 修复排序配置中源重复选择问题并优化合并模式逻辑
- 对 SOURCE_ORDER 和 PLATFORM_ORDER 的已选项按 `&` 拆分后判断源是否已存在,避免同一源重复添加
- MERGE_SOURCE_PAIRS 保留同一源参与不同合并组的能力,仅检查暂存区重复
- 将禁用状态检查提前至 addSelectedTag,防止无效添加
- 新增单元测试覆盖拆分逻辑和重复源防护
|
2026-08-11 00:18:37 +08:00 |
|
huangxd-
|
b811f8fd17
|
feat(match): 支持自动匹配映射表规则 (#430)
* feat(favorite): 重构收藏匹配逻辑,为搜索场景独立实现解析函数
- 将原 `resolveFavoriteForKeyword` 重命名为 `resolveFavoriteForSearchKeyword`,专门用于搜索场景的收藏命中判断
- 新增 `resolveFavoriteForSearchKeyword` 实现精确标题匹配,避免短关键词误复用更长标题的收藏结果
- 更新所有调用点(缓存有效性、搜索接口、匹配接口)使用新函数
- 版本号升级至 v1.20.5
此变更解决了因关键词长度差异导致收藏缓存错误命中其他剧集的问题,确保搜索缓存和收藏优先级判断更准确。
* feat(ui): 将弹幕测试设为接口调试页面的默认标签页
交换了顶部标签按钮的顺序,并将对应的内容区域设为激活状态,使页面加载时默认显示弹幕测试功能,提升测试场景的使用便捷性。
* feat(match): 支持自动匹配映射表规则,可跨季映射并指定平台/结果优先级
- 新增 `AUTO_MATCH_MAPPING_TABLE` 环境变量,支持开放映射(源季递增)和有限范围映射(等长范围),并支持目标结果优选(含年份/类型/平台)
- 更新 README 和 `.env.example` 中的配置说明,明确映射优先级为:当前源季手动偏好 > 本映射表 > `TITLE_MAPPING_TABLE` > 普通匹配
- 优化 `REMEMBER_LAST_SELECT` 描述,澄清仅记录明确手动选择,自动匹配后直接返回不会写入偏好
* feat: 预览数组值显示为逗号分隔字符串
在预览界面中,当数据字段为数组类型时,原先会进入对象处理逻辑导致显示不友好。
现增加对数组类型的单独处理,将其转换为逗号分隔的字符串,提升预览可读性。
* fix: 修复标签拖拽触摸支持并清理历史脏数据
- 为表单控件添加 touch-action 样式,改善移动端交互体验
- 关闭模态框时主动取消触摸拖拽状态,防止事件残留
- 选中值渲染时对逗号分隔项进行去重,清理历史重复脏数据
- 重构标签元素获取逻辑,统一排除拖拽幽灵元素
- 为待选标签添加 touchcancel 事件处理,完善触摸拖拽生命周期
- 实现基于坐标的选中标签拖拽目标检测,提升拖拽定位准确性
- 拖拽结束后清空内部引用,避免内存泄漏
|
2026-08-09 12:23:03 +08:00 |
|
huangxd-
|
838b5685ac
|
feat: 添加永久收藏搜索结果缓存功能 (#426)
* feat: 添加永久收藏缓存功能,支持手动收藏/刷新/删除
- 新增 `/api/v2/favorite/add`、`/list`、`/refresh`、`/remove` 接口,用于管理永久收藏的搜索关键词及整组搜索结果
- 搜索时若命中收藏缓存(含包含关系匹配)则直接返回,不再请求外部弹幕源,提升重复搜索效率
- 收藏缓存无 TTL 和数量上限,Node/Docker 部署可持久化至 `.cache/favoritesCache`,serverless 仅内存保留
- 更新 README 文档,补充收藏功能说明、API 用法及 UI 操作指引
- 扩展搜索函数支持 `forceRefresh` 参数,刷新时绕过所有缓存重新查询
- 同步调整普通搜索缓存逻辑,确保收藏优先且不受常规缓存过期清理影响
* feat: 完善 Redis 持久化支持,收藏和查询信息可跨实例恢复
- 更新文档,明确 Redis 仅持久化原有查询信息和收藏缓存,搜索结果与弹幕缓存仍仅存于内存
- 收藏操作后同步写入 Redis,避免 serverless 冷启动丢失收藏
- 修复 `favoriteCache` 在 Redis 中的序列化问题,支持 Map 类型正确转换
- 优化 Redis 缓存更新逻辑,确保收藏与查询信息一致持久化
* feat: 添加收藏定时刷新功能
新增 `/api/v2/favorite/schedule` 接口,支持为收藏设置每日或每周定时刷新(需指定时间和星期),关闭时传入 `schedule: null`。仅 Node/Docker 部署生效,serverless 平台返回 501。定时刷新计划持久化保存,失败后 10 分钟重试一次,服务重启后补执行一次。同步更新 README 文档、收藏列表返回 `scheduledRefreshSupported` 标志,并导出 `persistFavorites` 供调度模块调用。
* feat(redis): 新增收藏缓存实时刷新机制以解决多实例缓存不一致
在 serverless 多实例部署场景下,新增 getFavoriteCachesFromRedis 函数,在收藏相关请求时直接从 Redis 重新读取收藏数据并更新内存缓存,避免预热实例因首次加载空快照而错过其他实例新增的收藏内容。
* feat(favorite): 收藏刷新增加确认弹窗并明确缓存范围
- 收藏刷新操作前增加确认对话框,避免误操作
- 完善UI说明,明确只缓存剧集搜索结果,不缓存弹幕
- 为定时收藏按钮添加禁用态样式,提升交互一致性
* feat: 收藏增加最近刷新时间字段并支持按刷新时间排序
- 在收藏条目中新增 `lastRefreshAt` 字段,记录最近一次刷新时间;新增收藏时初始化为当前时间,刷新时更新为该次刷新时间。
- UI 中展示最近刷新时间,并调整收藏列表排序依据从收藏时间改为最近刷新时间。
- 更新 README 及 UI 说明文档,同步接口返回字段和界面显示描述。
- 兼容旧缓存,若无 `lastRefreshAt` 则回退为 `timestamp` 值。
* feat(ui): 将管理界面默认主题从 shinyo 改为 lavender
- 调整 UI_THEME 环境变量默认值为 lavender
- 将 lavender 置于主题列表首位,其余主题顺序保持不变
- 更新 resolveUiTheme 回退默认值及环境变量配置中的默认值
- README 文档同步更新默认主题说明
此变更使经典默认主题在首次访问时优先展示,提升用户体验一致性。
|
2026-08-08 22:16:56 +08:00 |
|
Elegy233
|
8ff78add1e
|
feat(ui): 管理界面视觉重构,采用 Bangumi-syncer 柔和圆角设计风格 (#423)
* feat(ui): 管理界面视觉重构,采用 Bangumi-syncer 柔和圆角设计风格
整体参照 Bangumi-syncer 的前端设计系统,对 danmu_api 管理面板进行全量 UI 重构。
核心改动:
- 主题系统:8种强调色(shinyo新叶/sakura哔哩/tianyi天依/hatsune初音/sakuragi樱木/violet罗兰/amber LCL/lavender经典) + 独立明暗切换(data-color-scheme)
- 视觉语言:大圆角(16~24px)、多层浅阴影、胶囊形输入框(999px)、渐变按钮、cubic-bezier缓动
- Header 氛围:header弹幕彩色透明文字(词库~80条) + 背景弹幕全屏滚动 + 微光扫过(GPU加速)
- Header 玻璃模糊:nav-btn/badge 等低透明度元素叠加 backdrop-filter,弹幕穿过时可见模糊
- 明暗切换:右上角折角视觉 + 角标按钮,独立持久化
- 全 section 错峰 fade-up 入场,modal 毛玻璃遮罩(backdrop-filter) + enter/exit 动画
- prefers-reduced-motion 全量关闭动画
- 响应式:1200/992/768/480px 四断点,移动端 nav-btn 3 列 + content 14px 圆角容器
- 预览页:总览按钮常驻,点击顶级 Tab 返回总览,子分类选中态悬浮卡片效果
- 弹窗:scrollbar-gutter 稳定布局,弹窗内列表 bullet 与文字对齐
- slider:胶囊形轨道(::-webkit-slider-runnable-track) + 圆形 thumb
- 版本标识:最新版本可点击跳转 Telegram 更新通知频道
- 弹幕系统:DANMAKU_DICT 共享词库约80条(18位 GitHub 贡献者 @ID + 热门梗 + 公益提示),0.5~1.5s 发射(共享 DANMAKU_INTERVAL_MS),animationend 自动释放 DOM
- 底栏:项目声明 + 链接栏(GitHub/讨论组/频道/RSS/Forward 插件)
- README:特别感谢 Bangumi-syncer 提供的 UI 灵感
- 主题键 shinyo(新叶绿) 原为 sanae,已全量同步至前后端
性能:
- 所有动效使用 transform/opacity(GPU 加速),无 left/top 触发布局
- 弹幕元素生命周期:创建→动画结束/超时→remove,自动回收
已知问题:
- 暗浅色折角(.corner-fold)无法应用 backdrop-filter 模糊,受限于浏览器渲染管线(clip-path 在合成阶段未完全裁剪 backdrop-filter 采样区域)
- 界面主题(theme-settings)在 section 切换时无法触发通用入场动画,因该元素初始 hidden 使 CSS animation 错过触发时机
* fix(ui): 批量颜色输入框 textarea 使用直角圆角替代胶囊形
* fix(ui): 弹窗全局模糊右侧白条与内部滚动条刺破圆角
- html 添加 scrollbar-gutter:stable + background,弹窗隐藏滚轨时保留占位
并填充遮罩同色 background,消除右侧白条
- html.modal-open 设置 overflow-y:hidden + 深色 background,隐藏滚轨
- ::-webkit-scrollbar 全局主题色渐变(10px),弹窗内单独覆盖为 6px 薄滚动条
配合 margin:24px 0 避免刺破 20px border-radius
- 背景弹幕挂载点从 documentElement 移至 body,避免被 html overflow:hidden 裁剪
* fix(ui): 弹窗 gutter 背景色按暗浅色模式适配
浅色: rgba(0,0,0,0.58) 暗色: rgba(0,0,0,0.95)
通过 :has(body[data-color-scheme]) 跟随主题切换
* feat(ui): Dark Reader 防御适配与系统深浅色跟随
- 模板注入 darkreader-lock meta 阻断第三方暗色扩展注入
- :root 声明 color-scheme: light dark 告知浏览器原生双模式支持
- 首次无存储偏好时读取 prefers-color-scheme 跟随系统主题
- matchMedia change 事件监听系统主题实时变更(仅在用户未手动选择时生效)
* fix(ui): 合并规则关系按钮对齐与映射详情可读性
- 修复 merge-action select 与左右输入框底部对齐(hint 移入 label 内)
- 映射详情容器 padding-left 46→12px,行字号 12→13px
- 映射行新增斑马条纹与圆角
- .btn:hover 统一添加 translateY(-1px) 抬起效果
* fix(ui): 标签选项、暂存标签、合并模式切换、颜色池色块新增 hover 抬起效果
* fix(ui): 合并确认按钮 hover 闪烁 — Chrome 过渡合成循环
.confirm-merge-btn 28px 圆形按钮 margin-left:auto 在 flex 容器内
hover 时 transition:all 触发 background-color/box-shadow/transform
无限循环过渡。窄化为 box-shadow/filter/transform 三项显式声明
并加 !important 阻断 Chrome 自动注入合成属性。
* fix(ui): 审计修复 — 滚动条架构、gutter 色差、滑块统一、代码风格
- 删除 base.css.js 全局 ::-webkit-scrollbar(10px),保留 themes.css.js(8px)
- html 添加 color-scheme:light !important 修复 :root 声明导致 gutter 画布色偏差
- gutter rgba 0.58→0.59 微调匹配 blurred 背景色
- COLOR_POOL 亮度滑轨复用 .number-range 胶囊样式
- DANMAKU_INTERVAL_MS var→const 风格统一
|
2026-08-08 21:34:07 +08:00 |
|
Elegy233
|
c0788c43f8
|
fix(envs): resolveEpisodeTitleFilter吐槽添加反向否定,避免误杀正常剧集标题 (#422)
吐槽添加负向断言防止匹配以下正常标题:
- 本喵比起装傻更适合吐槽(前接能力/比较词)
- 吐槽艺人/吐槽役/吐槽大会/吐槽担当(后接角色/事件词)
同步更新.env.example和README.md中的对应正则。
|
2026-08-08 21:33:42 +08:00 |
|
Elegy233
|
463c14708a
|
chore: 动画源dandan/bahamut/animeko排序置后,引导合理合并配置 (#418)
ALLOWED_PLATFORMS/ALLOWED_SOURCES/MERGE_ALLOWED_SOURCES
中将dandan/bahamut/animeko移至custom之前,同步更新
README.md和.env.example的对应排序。
|
2026-08-08 21:32:01 +08:00 |
|
huangxd-
|
5f17c51110
|
feat: 新增弹幕缓存最少条数配置,低于该值自动刷新 (#425)
* feat(cache): 新增弹幕缓存最少条数配置,低于该值自动刷新
- 增加 COMMENT_CACHE_MIN_COUNT 环境变量,默认100条,设为0可关闭
- 更新 README、.env.example 和 envs.js 配置定义
- 在缓存校验逻辑中,若缓存弹幕数低于阈值则忽略缓存时间重新获取
- 同步更新 UI 预览面板中的缓存相关配置项
* chore: bump version to 1.20.4
- 更新全局版本号从 1.20.3 至 1.20.4,以标记新迭代版本。
* refactor(ui): 重构环境变量编辑模态框的只读字段与状态管理
- 新增 `.readonly-field` 样式,用于在编辑模式下以虚线边框和灰色背景展示只读配置值
- 引入 `editingKeyName` 和 `editingType` 变量替代直接 DOM 读取,统一编辑状态管理
- 抽取 `getEnvTypeLabel` 工具函数,消除多处重复的类型标签逻辑
- 编辑时禁用分类、键名、类型等字段,避免误操作,同时保留文本可选择复制
- 关闭模态框时重置编辑状态,确保下次打开使用正确上下文
- 修改 `renderValueInput` 和 `updateTagStates` 等函数,使其依赖内存变量而非 DOM 元素,提升可维护性和可靠性
|
2026-08-08 21:31:12 +08:00 |
|
huangxd-
|
d0ce3b92d5
|
feat: 支持反向代理HTTPS协议配置,生成正确的对外链接 (#416)
- 新增环境变量 `DANMU_API_PUBLIC_PROTO` 用于指定对外协议
- 请求处理时优先读取 `X-Forwarded-Proto` 头,无则回退至配置变量
- 修复反向代理环境下弹幕链接协议错误的问题
|
2026-08-02 08:54:55 +08:00 |
|
huangxd-
|
13e88bec25
|
优化移动端系统配置操作按钮布局,红果源支持提取并显示短剧年份信息 (#411)
* feat(forward): 优化缓存管理,支持版本控制和分段缓存
- 引入缓存schema版本管理,避免旧版本缓存数据污染
- 添加分段缓存前缀、TTL及空重试最小间隔,提升缓存灵活性
- 使用内存缓存(Map)减少重复存储读取
- 重构getCaches逻辑,增加加载状态标识避免重复初始化
- 抽取parseForwardCacheValue统一解析校验,增强健壮性
- 缓存版本变更时自动清理旧数据,确保数据一致性
* style: 更新lavender主题配色并调整UI主题选项顺序
更新lavender主题样式,采用渐变背景和全新配色方案(蓝紫到粉紫渐变),使界面更鲜明;同时调整UI_THEME环境变量及内部主题列表中lavender的顺序,确保各配置保持一致。
* fix(ui): 优化移动端系统配置操作按钮布局
* feat(hongguo): 支持提取并显示短剧年份信息
- 新增 extractYearFromTimestamp 工具函数,从多种时间戳字段中解析年份
- 在搜索结果和剧集详情中集成年份提取,填充 anime 对象的 year 字段
- 修改 animeTitle 格式,在短剧名称后追加 (年份) 以提升识别度
- 补充 album_info 等备用数据源,增强解析健壮性
- 修复多视频详情接口响应结构兼容性问题,避免数据丢失
|
2026-08-01 12:55:06 +08:00 |
|
Elegy233
|
825ddc25bb
|
fix: 修复严格匹配下记住手动选择结果功能失效及匹配遍历过早终止 (#401)
* fix: matchAniAndEp 移除对非优先条目的独占过滤,保留评分优先
原代码通过 preferAnimeId 直接 continue 跳过所有不匹配的优先条目,
其意图是确保优先条目被命中。但该过滤存在两个问题:
1. 与 isPreferredAnime 的 +9999 评分加成功能重复——评分已提供
压倒性优先权,独占过滤属于冗余保护。
2. 独占过滤阻止了优先源缺失目标集时的自然回退:其他源被
跳过导致无匹配,需要额外走 fallbackMatchAniAndEp 兜底。
移除独占过滤后,isPreferredAnime 的 +9999 评分加成和匹配后的
break 仍然确保优先条目在正常匹配中绝对优先,同时允许优先源
无目标集时自然回退到其他可用源。
* fix: TITLE_NOISE_FILTER 默认规则增加方括号杂音词支持
默认 TITLE_NOISE_FILTER 仅匹配圆括号内的杂音词(如(日配)、(国配)),
遗漏方括号形式的变种(如[日语版]、[国语版]、[中字])。
tencent 源的标题格式"假面骑士ZZZ[日语版](2025)"中[日语版]未被清理,
导致 titleMatches 在严格匹配下的标题清理不完整。
修复:默认规则扩展为单字符类同时匹配圆括号(中英文)和方括号,
在原有词表基础上新增方括号特供词:日语版、国语版、英语版、中字。
圆括号兼容保持不变。
* fix: 偏好记录流程的titleMatches强制使用非严格匹配,不因STRICT_TITLE_MATCH受影响
titleMatches 在全局 STRICT_TITLE_MATCH 开启时统一走 strictTitleMatch,
但偏好记录(setPreferByAnimeId)场景应始终使用非严格匹配。原因:
1. 用户手动选择某个源的弹幕即表示"我认可这是正确匹配",
不应因标题含[日语版]等形式差异而被拒。
2. strictTitleMatch 限制 suffix 只能为 seasonPattern 中的模式,
而(2025)、[日语版]等源补充标识均不符合,导致有意义的用户选择被丢弃。
3. "记住手动选择结果"强调自由选择权,严格匹配的搜索过滤逻辑不适用于此。
修复:titleMatches 增加 forceNonStrict 参数(默认false,完全向后兼容),
偏好记录流程传入 true,跳过 strictTitleMatch 直接走包含匹配(includes)。
* fix: matchAniAndEp 无平台偏好时 break 应感知 preferAnimeId,防止跳过优先条目
第1435行 if(!platform || isPreferredAnime) break 在 platform 为空时
无条件跳出循环,导致即使 preferAnimeId 指向靠后的条目,
循环也会在第一个匹配条目后终止,优先条目从未被评估。
修复:break 仅在两种场景触发:
1. isPreferredAnime=true — 已命中优先条目,无需继续
2. !platform && !preferAnimeId — 无平台偏好且无优先条目,首个匹配即可
当 preferAnimeId 存在但尚未命中时,继续循环评估后续条目。
|
2026-07-29 22:37:17 +08:00 |
|
huangxd-
|
84d22da9a9
|
docs: 更新项目结构文档,新增若干文件及目录
|
2026-07-27 08:03:05 +08:00 |
|
Rinne
|
57e693f3d5
|
feat: 支持更多类型的弹幕输出 (#382)
* feat: 添加基于 @dan-uni/dan-any 的多弹幕格式输出支持,并优化弹幕数据格式化响应
* feat: 更新 README 关于支持多种弹幕格式输出的内容,并添加环境变量配置选项
|
2026-07-26 20:59:36 +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-
|
1bb163e77d
|
feat: 添加环境变量配置导入导出功能以及管理界面主题配置UI_THEME (#393)
* feat: 添加环境变量配置导入导出功能
- 新增 exportSystemConfig 函数,支持将当前环境变量配置导出为 JSON 文件
- 新增 import 相关函数,支持选择并导入配置文件,自动校验键名格式与值类型
- 导入时按优先级排序(TOKEN、ADMIN_TOKEN 等),避免权限提前失效
- 处理脱敏值(全星号)跳过导入并给出明确提示
* feat: 添加管理界面主题配置UI_THEME
增加UI_THEME环境变量,支持ocean、forest、graphite、berry、monochrome、sunset、aurora、lavender、mist、terminal共10种主题,默认值为ocean。在系统API中解析并应用该配置,使管理界面可根据用户偏好切换视觉风格,提升使用体验。
* 更换导入导出配置的图标
* chore: bump version to 1.20.0
* feat(ui): 支持浏览器本地保存主题偏好,优化主题切换错误处理
- 新增 localStorage 存储用户主题选择,优先于环境变量 UI_THEME 与部署默认值
- 主题切换时同时保存本地偏好,云端保存失败时降级为本地生效并给出友好提示
- 更新 README 中 UI_THEME 说明,明确浏览器本地主题优先于环境变量
- 重构主题相关函数,提升可维护性
|
2026-07-26 20:56:09 +08:00 |
|
Elegy233
|
50e84818e3
|
feat: 链接解析支持空格分隔多链接合并弹幕、时间偏移、Bahamut/Animeko 链接解析 (#373)
* feat: 链接解析支持空格多链接合并弹幕、时间偏移、Bahamut/Animeko 链接解析
多链接合并: 空格分隔 → MERGE_DELIMITER → fetchMergedComments
时间偏移: 尾缀 @-50/@100(秒数) @%30/@%-11(百分比)
B站短链: 合并与单链接均 resolve b23.tv
b23.tv: 搜索平台识别补充
Bahamut: ani.gamer.com.tw/animeVideo.php?sn=49943
Animeko: bgm.tv/ep/1701422,复用健康度节点路由
多链接标题: 逐链接获取后以全角 & 拼接
* feat: Animeko 链接解析支持 Bangumi 全域名及反代
bgm.tv / bangumi.tv / chii.in / bangumi.lol 四域名
域名检测用单行 .test(),ID 提取用单捕获组内联正则
|
2026-07-17 07:27:19 +08:00 |
|
Elegy233
|
3345ed190a
|
feat: 增加剧名杂音清理规则配置项,清理搜索与匹配阶段的剧名杂音词 (#368)
* feat: 增加剧名杂音清理规则配置项,清理搜索与匹配阶段的剧名杂音词
括号内画质/配音/版本等杂音词(如臻彩、高清、国配)阻塞
搜索和标题匹配。清洗分两层:
1. 搜索输入阶段:searchAnime 获取用户关键词后即清理再提交源站
2. 标题匹配阶段:titleMatches 对源标题和查询词双端清理后再比较
新增 TITLE_NOISE_FILTER 环境变量,值为正则表达式。
默认规则使用字符类 [((]...[))] 同时匹配中英文括号。
不设置时使用默认规则,设为空可禁用。
* fix: 限制剧集匹配中直播一词正则,避免误伤正常标题
EPISODE_TITLE_FILTER 中直播(陪看|回顾)? 匹配裸"直播"
导致"昭演女高 直播欺师"被误过滤。去掉了 ? 和裸直播
匹配分支,仅保留直播陪看、直播回顾等明确杂音后缀。
同时更新 .env.example 与 README 默认值。
* fix: matchAnime 标题未做杂音清理,导致含杂音词文件名匹配失败
matchAnime 提取标题后未清理画质/配音等杂音词,直接传入
matchAniAndEp 和 matchSeason 做 includes 匹配。
杂音词经 normalizeSpaces 去括号后内容残留,阻塞匹配。
在 TITLE_MAPPING_TABLE 和繁转简之后插入噪音清理,
所有下游函数自动受益。searchAnime 保持独立的搜索词清理。
|
2026-07-14 22:29:15 +08:00 |
|
huangxd-
|
869ac36948
|
非admin token下,请求记录从「只脱敏 IP」扩展到「同时脱敏接口查询值和请求体值」
|
2026-06-28 08:12:29 +08:00 |
|
Elegy233
|
ad303b1b8e
|
feat(animeko): 详情接口迁移至 Animeko V2 API 并新增 animeko@ 代理反代支持 (#330)
- animeko.js:
1. 详情与关联接口全面迁移至 Animeko V2 API (/v2/subjects),并新增 animeko API 隔离逻辑(API请求不走代理,符合预期)。
2. 为 Bangumi API 搜索接口新增 animeko@ 代理/反代支持。
3. 完整集成 4 个 Animeko 备用域名,根据部署时区(UTC+8/其他)动态反转分配节点的轮询优先级。
4. 新增模块级短效缓存 (3分钟 / 100条限制),消除在“关系检测”与“剧集获取”跨方法调用时产生的重复接口请求。
5. 修复 _extractRelations 方法中因原始接口 ID 数组与 Name 数组长度不对齐导致的潜在数据错位问题,改为纯 ID 校验提取。
6. 为 API 降级轮询机制显式注入 3000ms 超时控制,加速不可用节点的故障跳过。
- globals.js:
新增 animeko@ 代理/反代规则的解析与支持,配合 animeko.js 实现按需代理。
- http-util.js:
使 httpGet 与 httpGetWithStreamCheck 支持接收 options.timeout 参数,提供单次请求维度的自定义超时配置能力。
- README.md & config/.env.example:
添加 Animeko 代理及反代的配置说明与使用文档。
|
2026-05-31 12:54:27 +08:00 |
|
huangxd-
|
ca05231b51
|
SOURCE_ORDER 默认源排序修改为douban,360,renren,hanjutv
|
2026-05-31 12:51:36 +08:00 |
|
Elegy233
|
e6c292c463
|
feat(ui): 新增 /api/cache/animes API 接口获取最近的 animes 缓存,应用到CUSTOM_MERGE_RULES与DANMU_OFFSET配置面板中辅助填写 (#318)
* feat(api): 新增处理获取最近animes缓存列表请求函数
* feat(api): 新增 `/api/cache/animes API` 接口
* feat(model): 新增 `mergedChildren` 与 `isHiddenChild` 参数
* feat(utils): 记录合并层级
* feat(ui): 新增最近数据与`animes`缓存面板样式
* feat(ui): 新增最近数据与`animes`缓存面板功能
* feat(md): 新增GET `/api/cache/animes`说明
* fix(ui): 修复合并结果由于长英文字符串导致前端网格布被撑破的 UI 错位问题
远古问题
* fix(ui): 调整换行逻辑提升可读性
* feat(ui): 给MERGE_SOURCE_PAIRS也添加最新数据面板,供合并参考
Add button to fetch and display recent data in the UI.
|
2026-05-25 10:05:32 +08:00 |
|
Elegy233
|
d894ccdd3d
|
perf(match): 为 match 接口支持跨季集数顺延匹配,提高匹配成功率;新增 CUSTOM_MERGE_RULES 环境变量,用于自定义源合并行为 (#310)
* perf(api): 将数据源处理逻辑提取为公共函数,加入'跨季集数顺延映射'功能提高 match 接口匹配成功率
* feat(utils): 等价重组合并工具,使用12层清晰分层并补全所有函数必要注释,降低维护难度
我是超级重构大师()这一次真的好起来了结构清晰多了()
* perf(envs): 新增合并映射表('CUSTOM_MERGE_RULES')变量与解析函数
* feat(utils): 使合并工具支持合并映射表
* feat(ui): 新增CUSTOM_MERGE_RULES 合并映射表 专用编辑界面
* feat(env): 新增合并映射表配置说明
* feat(md): 新增合并映射表配置说明
|
2026-05-18 23:02:08 +08:00 |
|
huangxd-
|
e851d7495d
|
修复最近bangumi-data继承导致fw插件不可用的问题 (#297)
* fw插件删除bangumi-data-util.js的代码导入
* fw中删除bangumi-data-util引用语句
* GitHub默认需配置ENABLE_HF_SYNC为true才开启sync_hf.yml
* 修改readme
|
2026-05-02 10:50:10 +08:00 |
|
huangxd-
|
0ab244b1c4
|
readme中增加 danmu_api 图文教程 链接
|
2026-04-30 23:08:09 +08:00 |
|
huangxd-
|
7581b929bb
|
claw下线,删除相关内容
|
2026-04-30 22:58:39 +08:00 |
|
 
|
049e412748
|
Hugging配备ui管理 (#288)
* Create sync.yml
* Update README.md
* Add Hugging Face Spaces deployment support
* Update sync.yml
* Update README.md
* Update Dockerfile
* Update README.md
* Update README.md
* Update Dockerfile
* Rename sync.yml to sync_hf.yml
* Update README.md
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: huangxd- <649924757@qq.com>
|
2026-04-30 22:51:36 +08:00 |
|
Elegy233
|
01fd9e15aa
|
集成 bangumi-data 项目,开启后提升动画源的检索与匹配速度并解锁隐藏/区域番剧 (#283)
* envs.js:新增 Bangumi Data 加速匹配开关 与 Bangumi Data 缓存有效期 配置
* 新增 Bangumi Data 管理工具,用于下载与管理Bangumi Data数据
感谢 https://github.com/bangumi-data/bangumi-data
* worker.js:参加Bangumi Data 辅助函数用于判断数据更新
* server.js:配合清理 Bangumi Data 关闭时占用的内存
* tmdb-util.js:Bangumi Data 开启时调用它大幅提升获取日语原名速度
实现获取动画日语原名零请求
* animeko.js:Bangumi Data 开启时调用它,节省一次搜索请求
已知问题:缺失imageUrl,问题不大
* bahamut.js:Bangumi Data 开启时调用它,补全别名与类型
Bangumi Data 给的是acg_sn,预期需要是video_sn,因此无法直接应用
https://github.com/bangumi-data/bangumi-data/issues/336
* bilibili.js:Bangumi Data 开启时调用它,补全缺失的隐藏结果与区域结果
实现港澳台番剧与隐藏番剧自由,例如《笨拙之极的上野》
* dandan.js:Bangumi Data 开启时调用它,节省一次搜索请求
弹弹其实当务之急是怎么节省详情接口的请求… 多结果风控错误概率大
* common-util.js:为标题匹配的相似度策略加入一定阻断
防止纯英文搜索时因相似度打乱字符匹配大量结果被放行
* .env.example:更新 Bangumi Data 相关变量
* README.md:更新 Bangumi Data 相关说明
* Enhance comments for USE_BANGUMI_DATA in .env.example
Updated comments to clarify the functionality of USE_BANGUMI_DATA.
* Enhance USE_BANGUMI_DATA description
Updated the description for USE_BANGUMI_DATA to include unlocking hidden/region-specific anime.
* README.md:补全目录
* bangumi-data-util.js:纯内存加载时使用原生 fetch ,并声明压缩头
* bangumi-data-util.js:增加云部署纯内存运行提示
* bangumi-data-util.js:更新配音版本正则
* merge-util.js:标准化正则
* tmdb-util.js:标准化正则
* animeko.js:标准化正则
* README.md:补充文件目录
* bangumi-data-util.js:修复CF部署下载请求被切断导致堵塞
Added download lock mechanism to prevent deadlocks in serverless environments and implemented a timeout for download operations.
* worker.js:透传ctx
* bangumi-data-util.js:调用 ctx.waitUntil 延长 Serverless 生命周期
* bilibili.js:补全md号解析链路
Add handling for media IDs starting with 'md' to fetch episodes.
* server.js:异步初始化 Bangumi Data 缓存,消除首个真实请求遭遇冷启动的等待延迟
* bangumi-data-util.js:双节点同时竞速下载数据,提升下载可用性与速度
|
2026-04-26 15:26:02 +08:00 |
|
huangxd-
|
5ce27183f1
|
修改readme
|
2026-04-11 14:09:08 +08:00 |
|
huangxd-
|
91cff0da83
|
修改reademe
|
2026-04-11 14:03:55 +08:00 |
|
 Elegy233andhuangxd-
|
fe4a96f50b
|
因 related 接口废弃将合并工具的跨源时间轴对齐功能改回本地算法 (#275)
* merge-util.js:因 related 接口废弃将跨源时间轴对齐功能改回本地算法
天塌了(
* README.md:更新平台列表添加特别感谢栏
* merge-util.js:更新跨源时间轴对齐算法
* dandan-api.js:重写跨源时间轴对齐调用函数
* merge-util.js:精简跨源时间轴对齐算法
* merge-util.js:为弹弹豁免匹配率同时修复缺集导致的集映射错误
修复弹弹因为从零开始的异世界生活第四季因为集刮削错误缺2~4集导致的集映射错误
---------
Co-authored-by: huangxd- <649924757@qq.com>
|
2026-04-11 14:01:38 +08:00 |
|
dyphire
|
77ecdcf233
|
跟随弹弹上游 API 变动废弃 related 相关接口功能 (#274)
|
2026-04-11 13:56:01 +08:00 |
|
huangxd-
|
3495835e7c
|
新增弹幕时间偏移功能以及环境变量DOUBAN_COOKIE (#276)
* 弹幕偏移支持百分比模式
* 修复偏移配置保存之后不显示源选择的问题
* 增加豆瓣cookie环境变量
|
2026-04-11 13:55:39 +08:00 |
|
Elegy233
|
59533acfc9
|
使 match 接口匹配时检查源传入的别名,并优化别名替换相关逻辑 (#271)
* dandan-api.js:使 match 接口匹配时检查别名
* dandan.js:彻底删除内部api别名替换逻辑,因为别名已经传给需要的工具
* tmdb-util.js:全面优化tmdb智能标题替换逻辑
优先选择与用户传入的关键词相同的别名(https://github.com/huangxd-/danmu_api/pull/270 的拓展)
* envs.js:更新集过滤正则与aliases ai提示
* .env.example:更新集过滤正则
* Update README.md
|
2026-04-03 22:00:20 +08:00 |
|
dyphire
|
9fe76afc85
|
正确兼容弹弹的 url 弹幕获取接口 (#267)
|
2026-04-02 22:49:41 +08:00 |
|
huangxd-
|
9bc48f2360
|
修改小版本号
|
2026-03-31 22:23:44 +08:00 |
|
huangxd-
|
f7fc36f384
|
更新小版本号
|
2026-03-30 22:23:12 +08:00 |
|
huangxd-
|
ae4f20c9c9
|
增加爱壹帆源 (#262)
* 增加爱壹帆源
* 修复爱壹帆源自动匹配
|
2026-03-29 23:53:14 +08:00 |
|
huangxd-
|
e74749b3f9
|
更新小版本
|
2026-03-25 22:19:37 +08:00 |
|