Skip to content

feat: 角色名支持别名,直接复用 XWUID 的别名表 - #40

Closed
Xbaiyz12 wants to merge 1 commit into
MimoKit:mainfrom
Xbaiyz12:feat/role-alias
Closed

Xbaiyz12 wants to merge 1 commit into
MimoKit:mainfrom
Xbaiyz12:feat/role-alias

Conversation

@Xbaiyz12

@Xbaiyz12 Xbaiyz12 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

问题

用户经常按别名/简称称呼角色(小西王、dj、心月狐…),但插件此前只做精确名匹配,别名一律匹配不到:指定角色会提示「未找到名为 XX 的角色」,台词查找也会落空。

改动

新增 TodayWaifu/aliases.py:直接复用 XutheringWavesUID 的别名表,不另建一份数据。

  • 内置表:data/XutheringWavesUID/resource/map/alias/char_alias.json
  • 用户自定义表:data/XutheringWavesUID/alias/char_alias.json

按 XWUID 的语义把两份表合并(同一角色的别名取并集),因此用户在 XWUID 里加过的别名在这里同样生效。XWUID 未安装或文件缺失时降级为空表、名字原样返回,不影响插件运行。

_normalize_role_name 在间隔号归一之后接一层别名解析,所以指定角色、老婆列表、抢老婆、送礼等所有走该函数的入口一起生效。索引按文件 mtime 缓存,别名表更新后无需重启即可生效。

只做精确匹配,不用子串模糊匹配——单字角色名(如「心」)用子串匹配会误命中「鉴心」,这正是之前串台问题的成因之一。

验证

  • python -m pytest tests/ -q → 369 passed
  • 插件自带 ruff.toml:ruff check → All checks passed
  • 本机实测:别名索引 643 条,两份表都读到
小西王 → 丹瑾      dj → 丹瑾        丹谨 → 丹瑾
大枪枪 → 丽贝卡     心月狐 → 心
心 → 心    鉴心 → 鉴心    锁暝 → 锁暝    渊武 → 渊武
不存在的角色 → 原样返回
  • 新增 tests/test_role_alias.py(8 项行为级测试):别名解析、标准名不被别名顶掉、两份表合并、未知名字原样返回、首尾空白、缺文件时降级、别名表更新后热生效,以及 _normalize_role_name 的集成

备注

测试用临时目录造出两份别名表,因此不依赖 XWUID 是否安装,CI 上同样能覆盖这些逻辑。

@github-actions github-actions Bot added the tests 测试相关变更 label Oct 3, 2026
@Xbaiyz12
Xbaiyz12 force-pushed the feat/role-alias branch 3 times, most recently from e6b2d63 to b537ca7 Compare October 3, 2026 16:47
用户常按别名/简称称呼角色(小西王、dj、心月狐…),插件此前只做精确名匹配,
别名一律匹配不到,指定角色与台词查找都会落空。

新增 TodayWaifu/aliases.py,并加配置项 DailyWifeAliasSource(默认 off):
- off:关闭别名解析(默认)
- xwuid:使用 XWUID 的别名表,把它的内置表
  data/XutheringWavesUID/resource/map/alias/char_alias.json 与用户自定义表
  alias/char_alias.json 按 XWUID 语义合并(同一角色别名取并集);该插件未安装时
  自动改用插件自带的别名表
- local:始终使用插件自带的别名表

配置描述里已写明适用人群:别名用于「指定老婆」这类需要匹配角色名的场景,而指定
角色仅限机器人主人或指定老婆白名单用户使用。

插件根随包分发 role_aliases.json,保证没装 XWUID 的用户也有别名可用;配置值异常时
一律关闭别名,不擅自挑一份表。

匹配只做精确匹配,不用子串模糊匹配:单字角色名(如「心」)用子串匹配会误命中
「鉴心」,这也是之前串台问题的成因之一。

_normalize_role_name 在间隔号归一之后接一层别名解析,因此指定角色、老婆列表、
抢老婆、送礼等所有走该函数的入口一起生效。索引按来源与文件 mtime 缓存,别名表更新
后无需重启即可生效。

同步更新 tests/compatibility_manifest.json,并新增 tests/test_role_alias.py(13 项行为
测试):默认关闭、xwuid 优先、未装 XWUID 回退本地、配置 local 时忽略 XWUID、异常配置
值关闭别名、标准名不被顶掉、未知名原样返回、缺文件降级、坏 JSON 跳过、别名表更新后
热生效,以及 _normalize_role_name 的集成。

验证:pytest tests/ -q -> 374 passed;ruff check -> All checks passed。
@Xbaiyz12 Xbaiyz12 closed this Oct 5, 2026
@Xbaiyz12
Xbaiyz12 deleted the feat/role-alias branch October 5, 2026 10:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tests 测试相关变更

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant