Skip to content

feat: 增强弹幕屏蔽词解析与生效诊断日志 - #453

Merged
huangxd- merged 2 commits into
huangxd-:mainfrom
xlmc:feat/blocked-words-enhancement
Aug 22, 2026
Merged

feat: 增强弹幕屏蔽词解析与生效诊断日志#453
huangxd- merged 2 commits into
huangxd-:mainfrom
xlmc:feat/blocked-words-enhancement

Conversation

@xlmc

@xlmc xlmc commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

动机

当前 BLOCKED_WORDS 屏蔽词功能存在两个痛点:

  1. 解析规则过于苛刻:旧实现使用 split(/(?<=\/),(?=\/)/) 切分,要求所有规则必须严格写成 /a/,/b/ 格式。用户写纯文本词(如 签到,打卡)时,整串会被当作一个无效正则静默丢弃,屏蔽词完全不生效且无任何提示;正则内部含逗号(如 /a{1,2},b/)也会被误切分。
  2. 无法确认是否生效:日志只打印规则列表,用户配置后不知道到底拦截了哪些弹幕、哪条规则命中了多少次,排查"屏蔽词不生效"问题非常困难。

改动内容

解析器重写(danmu_api/utils/danmu-util.js

  • 新增 splitBlockedWords():状态机式切分器
    • /pattern/flags 词条整体识别(词条内部的逗号、转义斜杠 \/ 不作为分隔符)
    • 兼容中文全角逗号(,)与英文逗号(,),忽略逗号前后空格
    • 字符类中的裸 / 等无法构成合法正则的片段按普通文本处理
  • 新增 parseBlockedWord():单条规则转换
    • /pattern//pattern/i,m,s,u 按正则解析(自动剥离 g/y 标志,避免 lastIndex 状态污染 test 结果)
    • 纯文本词按字面量匹配(escapeRegExp 转义)
    • 非法正则降级为字面量匹配并输出警告,不再静默丢弃

生效诊断日志

  • 解析阶段:成功时输出规则数量与完整列表;已配置但解析结果为空时输出 ❌ 警告(含原始配置);未配置时输出跳过提示
  • 过滤阶段:输出 ✅ 拦截总数/弹幕总数、每条规则的命中次数明细(如 /打卡/ ×511, /签到/ ×49)、最多 3 条拦截示例(弹幕内容 ← 命中规则)
  • 无命中时输出 ⚠️ 提示,明确区分"规则没加载"与"规则加载了但本集没有命中"

文档与测试

  • 更新 README 中 BLOCKED_WORDS 参数说明与示例格式
  • danmu_api/worker.test.js 中新增 BLOCKED_WORDS 测试:覆盖纯文本词、中英文逗号混用、正则+文本混合、正则内逗号、flags 剥离、非法正则降级等 7 类场景

测试

  • node danmu_api/worker.test.js → 38/38 通过(含新增屏蔽词测试,无回归)
  • 实际运行验证:某剧集 54527 条原始弹幕,拦截 579 条,日志正确输出每条规则命中明细与拦截示例

- 重写 BLOCKED_WORDS 解析器:支持 /regex/flags 正则词条与纯文本词条混用,兼容中英文逗号(,/,)及逗号前后空格;正则词条内部的逗号不再被误切分
- 正则词条支持 i/m/s/u 等标志;自动剥离 g/y 标志避免 lastIndex 状态污染
- 非法正则自动降级为字面量匹配并输出警告,不再静默丢弃整条规则
- 新增生效诊断日志:规则解析结果、拦截总数/每条规则命中次数、拦截示例、无命中提示、配置无效警告,便于用户确认屏蔽词是否实际生效
- 更新 README 中 BLOCKED_WORDS 说明与示例
- 新增 test_blocked_words.mjs 覆盖 7 类解析场景(7/7 通过)
@vercel

vercel Bot commented Aug 21, 2026

Copy link
Copy Markdown

@xlmc is attempting to deploy a commit to the huangxd's projects Team on Vercel.

A member of the Team first needs to authorize it.

@huangxd-

Copy link
Copy Markdown
Owner

佬,TITLE_MAPPING_TABLE_URL_CACHE_MINUTES和TITLE_MAPPING_TABLE_URL的逻辑实现了吗?我好像没找到?

@xlmc

xlmc commented Aug 21, 2026 via email

Copy link
Copy Markdown
Contributor Author

@huangxd-

Copy link
Copy Markdown
Owner

这个我是本地加诊断日志的分类。没有传😂只修了弹幕关键字屏蔽。要撤回重发么在 2026年8月22日,00:28,huangxd- @.> 写道:huangxd- left a comment (huangxd-/danmu_api#453) 佬,TITLE_MAPPING_TABLE_URL_CACHE_MINUTES和TITLE_MAPPING_TABLE_URL的逻辑实现了吗?我好像没找到? —Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today! You are receiving this because you were mentioned.Message ID: @.>

是的,把多余的删了吧
还有test_blocked_words.mjs的统一挪到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 通过)
@huangxd-
huangxd- merged commit b5458ed into huangxd-:main Aug 22, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants