Skip to content

starhui-dev/astrbot_plugin_strinova

Repository files navigation

卡拉彼丘助手

astrbot_plugin_strinova 是一个面向 AstrBot 的《卡拉彼丘 / Strinova》公开资料查询插件。MVP 提供 Wiki 搜索、词条/角色/武器/地图查询、随机角色、数据源状态和管理员手动刷新。

本插件是非官方社区项目,与《卡拉彼丘》及 Strinova 官方无隶属或合作关系。

功能

  • 从卡拉彼丘 BWIKI 搜索和读取公开词条;
  • 提取页面简介、少量信息框字段、修订 ID、更新时间和原文链接;
  • 从 Wiki 实际嵌入 模板:超弦体 的页面构建随机角色索引;
  • 可选试验性英文 Strinova Wiki,默认关闭且不保证当前网络可用;
  • 使用 AstrBot 插件数据目录中的原子 JSON 缓存,并在主源临时失败时回退到未严重过期的缓存;
  • 默认使用 AstrBot html_render() 生成分类专用资料卡:角色卡展示立绘、档案、技能、觉醒和时装,武器卡展示参数与距离伤害,地图卡展示地形、模式和实景,机制词条按规则分节;渲染失败时自动回退完整文字;
  • 可选在资料卡或文字之后追加页面主图,默认关闭,避免重复发送头像或地图图片。

本版不提供玩家战绩、排位、账号绑定、登录、赛事、公告聚合、客户端抓包或资源解包,也不使用大语言模型生成游戏事实。

环境要求

  • 插件版本 0.1.2
  • AstrBot >=4.16,<5;开发时已按 AstrBot 4.26.7、源码提交 1a038533125ad24a37fb1c1e5c7deae782af5c87 核对 API;
  • Python >=3.12
  • 网络可访问已启用 Wiki 的 HTTPS API。

安装

在 AstrBot WebUI 的插件管理页从插件市场安装,或上传包含本仓库文件的 ZIP。手动部署时,将目录以 astrbot_plugin_strinova 为名放入 AstrBot 插件目录,再在 WebUI 重载插件。

项目仓库:https://github.com/starhui-dev/astrbot_plugin_strinova

运行时依赖由 requirements.txt 声明:

beautifulsoup4>=4.12,<5
httpx>=0.28,<1
Pillow>=10,<13

命令

命令 作用
/卡丘 显示 AstrBot 生成的指令组帮助树
/卡丘 帮助 显示完整命令说明和示例
/卡丘 搜索 <关键词> 返回最多 3~5 个相关词条
/卡丘 词条 <名称> 查询任意公开词条
/卡丘 角色 <名称> 优先匹配角色词条
/卡丘 武器 <名称> 优先匹配武器词条
/卡丘 地图 <名称> 优先匹配地图词条
/卡丘 随机角色 从已确认的 Wiki 角色索引随机查询一名角色
/卡丘 状态 显示启用数据源状态、缓存条目和最近同步时间
/卡丘 更新 管理员刷新角色索引并清理过期缓存

主指令别名为 /strinova。管理员权限由 AstrBot 官方 PermissionType.ADMIN 过滤器判断,插件不维护管理员名单。

示例:

/卡丘 搜索 香奈美
/卡丘 角色 Kanami
/卡丘 武器 谢幕曲
/卡丘 词条 弦化
/卡丘 地图 88区

角色、武器和地图查询会优先使用已核验的 Wiki 页面分类。若精确词条明确属于其他类型,插件会提示正确的分类命令;分类缺失时仍保留通用词条降级行为。

配置

AstrBot 会根据 _conf_schema.json 在 WebUI 提供中文配置界面。配置更新后按 AstrBot 的插件配置机制重载生效。

配置项 默认值 说明
primary_source bwiki 首选源;只能选择内置源
enable_bwiki_source true 是否访问卡拉彼丘 BWIKI
enable_backup_source false 是否试验性访问英文 Strinova Wiki
request_timeout 12.0 总超时,代码限制为 3~30 秒
request_retries 2 可重试失败的重试次数,限制为 0~3
search_cache_ttl 1800 搜索缓存秒数
page_cache_ttl 43200 页面缓存秒数
index_cache_ttl 86400 角色、武器和地图分类索引缓存秒数
max_search_results 5 搜索结果数量,限制为 3~5
max_summary_length 650 摘要长度,限制为 200~1200
send_page_image false 在资料卡或文字结果后额外发送远程主图 URL
render_card true 优先生成卡拉彼丘风格资料卡;失败时回退完整文字

非法数值会被限制到安全范围并记录警告。配置不能指定任意域名,也不需要 API Key。

数据来源

默认主源是卡拉彼丘 BWIKI,使用其公开 MediaWiki API。插件结果始终保留来源名、来源 URL、页面标题、抓取时间,并在可获得时保留修订 ID 和页面更新时间。角色、主武器、副武器和地图候选分别使用已验证的 Wiki 分类成员索引辅助排序。

BWIKI 当前未提供 pageimages 查询模块;插件从页面信息框和对应资料章节选择主图、立绘、时装、地形图及实景。图片仅从内置 HTTPS 白名单下载,单图限制 3 MiB、2000 万像素,校验 MIME 后压缩为临时 WebP 数据交给渲染器,不把第三方图片写入磁盘。图片失败时使用无图布局;卡片整体渲染失败或超过 40 秒时回退完整文字。

Strinova Wiki 此前可访问时确认 MediaWiki API 位于 https://strinova.org/w/api.php,页面曾声明采用 CC BY-SA 4.0。2026-07-21 从当前部署环境访问正确 API、旧根路径和 robots.txt 均被 Cloudflare 以 HTTP 403(error 1005)拒绝,因此当前无法重新核验授权、robots 或内容维护状态。该源只保留为实验性备用接口,默认不构造、不访问,也不保证启用后可用。

BWIKI 页面授权和再分发范围未发现足够清晰的统一说明。本插件只按需查询、展示短摘要与远程链接,不批量镜像 Wiki,也不将第三方文字、图片或音频纳入仓库或插件许可证。数据准确性、可用性和授权政策均可能变化。

官网仅检查到网页应用请求和签名相关客户端代码,未确认无需鉴权、稳定且适合插件使用的公开公告 JSON API,因此 MVP 不实现公告查询。

缓存

缓存文件位于 AstrBot 官方数据目录:

data/plugin_data/astrbot_plugin_strinova/cache.json

搜索默认缓存 30 分钟、页面 12 小时、角色及资料分类索引 24 小时、失败结果 2 分钟、健康检查 5 分钟。页面过期后先查询修订 ID;修订未变化时刷新缓存有效期并复用已解析内容,变化后才重新获取正文。页面缓存键包含显式解析版本、摘要长度和图片模式;解析行为变更时维护者会递增版本,相关配置变化也会使用新缓存。

写入采用同目录临时文件、fsync 和原子替换,磁盘成功后才提交内存状态;损坏时记录警告并自动重建。普通查询遇到缓存写入失败时仍返回实时结果,管理员更新则明确提示失败。页面和分类索引最长允许回退到过期 7 天内的缓存,搜索最长 1 天。手动更新有异步锁,查询也有锁避免缓存击穿。

插件不持久下载 Wiki 图片。为避免重复请求,同一进程内最多临时保留 32 张、合计 16 MiB 的已校验图片,30 分钟后过期,插件卸载时清空;运行时缓存和发布包均不含第三方图片。仓库内的 assets/card_texture_strinova.webp 是不含角色、Logo 或官方素材的原创背景,以纸片平面向三维竞技场折叠的场景表现“弦化”主题,只用于卡片背景。

常见问题

为什么查不到某个名称? 先使用 /卡丘 搜索 查看 Wiki 的真实标题。角色中英文别名来自 BWIKI 分类:超弦体 页面及各角色信息框的 英文名 字段,每条记录都保留来源和核验日期;不会凭记忆补全。

为什么只返回候选列表? 插件会用角色、武器和地图分类索引辅助排序;多个同类结果仍然接近时不会擅自猜测,请使用候选项的完整标题再次查询。

为什么提示词条类型不匹配? BWIKI 已确认使用“超弦体”“主武器/副武器”和“地图”分类。精确词条明确属于其他类型时,请改用提示中的分类命令或 /卡丘 词条

为什么只显示文字,没有资料卡? 资料卡默认开启,但依赖 AstrBot 的 html_render() 服务。渲染服务不可用、超过 40 秒或返回异常时,插件会自动发送完整文字;查询本身不受影响。send_page_image 只是额外发送独立主图,默认关闭。

为什么英文备用源默认关闭? 当前部署环境会收到 Cloudflare 403,且无法重新核验授权和 robots。只有在部署者自行确认可访问性与最新政策后才应启用;/卡丘 状态 会显示实际错误摘要。

开发与测试

测试完全使用最小化、脱敏 fixture 和 httpx.MockTransport,不长期依赖真实站点:

uv run --with pytest --with pytest-asyncio --with pyyaml --with ruff \
  --with-requirements requirements.txt pytest -q
uv run --with ruff ruff check .
uv run --with ruff ruff format --check .
python -m compileall -q .

真实数据源只用于发布前低频人工验收。建议在 AstrBot WebUI 热重载后测试 /卡丘 帮助/卡丘 搜索 香奈美/卡丘 角色 香奈美/卡丘 状态 和管理员权限。

已知限制与计划

  • MediaWiki 页面模板可能变化,解析器会降级到正文或 Wiki 源码,但字段完整度不保证;
  • 角色索引依赖 BWIKI 当前使用的 模板:超弦体;模板更名后需调整;
  • 已验证 OneBot 私聊的文字、引用回复和原文链接;资料卡仍需在更多平台和不同客户端上检查显示效果;
  • 数据源可能限流;插件只做有限重试并依赖缓存,不绕过风控;
  • 英文备用源当前受 Cloudflare 访问限制,仅保留实验性接口,不作为可用性承诺;
  • 当前未提供 Logo,避免使用受版权保护的角色图片。发布维护者可后续添加原创、权利清晰的 logo.png

武器和地图页面当前没有稳定的英文名或别名字段,因此不会从标题或常识推断别名。后续优先事项是继续验证不同平台上的资料卡显示,并按真实 Wiki 数据扩充可靠别名。

免责声明与许可证

本插件按“现状”提供,不保证第三方数据完整、及时或准确。使用者和发布者应遵守数据源服务条款、robots 政策、署名要求及适用法律。

LICENSE 中的 MIT License 只覆盖本仓库自行编写的插件代码、模板和原创界面素材,不覆盖查询得到的 Wiki 文字、图片、音频、商标、游戏名称或其他第三方内容。第三方内容的权利归各自权利人所有。

参考

About

提供《卡拉彼丘 / Strinova》角色、武器、地图和游戏词条查询。

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors