Files
danmu_api/config
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
..