This commit is contained in:
qsc
2026-08-04 02:08:49 +08:00
parent a4a01dc16d
commit 1de45c2940
87 changed files with 1207 additions and 2284 deletions
+27 -8
View File
@@ -412,14 +412,33 @@ flowchart LR
图片默认使用质量 `100`、完整页面截图和普通设备缩放级别。模板可通过 `icons.img``icons.sect``icons.serendipity` 访问通用、门派/心法和奇遇图标。
AstrBot 的渲染接口接收完整 HTML 字符串,因此插件不会依赖渲染端读取本地 CSS 文件。`core/template.py` 会异步读取并缓存公共布局、设计变量、基础样式组件样式页面专属样式页面片段,组装完成后把单个完整字符串交给渲染器。这样既满足渲染接口约束,也避免在 46 个页面中重复维护文档骨架和通用样式
AstrBot 的渲染接口接收完整 HTML 字符串,因此插件不会依赖渲染端读取本地 CSS 文件。`core/template.py` 会异步读取并缓存公共布局、设计变量、基础样式组件样式,再按需读取页面专属样式页面片段,组装完成后把单个完整字符串交给渲染器。共享资源只在首次请求时读取一次;标准页面没有同名 CSS 文件也可以正常组合
`styles/components.css` 是公共组件的唯一来源,内部使用 `@component` 标记划分表格、网格、能力卡片等组件块。页面通过顶部元数据声明需要的组件,加载器只把声明过的样式块注入最终 HTML,不会让只使用表格的页面同时携带技能卡片、器物卡片等无关 CSS:
```html
{# template-title: 角色榜单 #}
{# template-components: data-table #}
```
样式职责如下:
- `styles/tokens.css`:颜色、间距、圆角、字体和各页面内容宽度。
- `styles/base.css`:页面背景、外框基础排版和窄屏规则
- `styles/components.css`信息面板、表格、状态、进度条、标签等跨页面组件。
- `styles/pages/*.css`只保留列宽、网格、卡片结构等页面独有布局
- `styles/base.css`固定图片画布的页面背景、外框基础排版。
- `styles/components.css`统一维护数据表格、状态、排行、统计卡片、可配置列数网格、技能/奇穴卡片、奇遇卡片、器物详情、标签和空数据等跨页面组件。
- `styles/pages/*.css`可选,仅保留成本计算、成就、副本记录等无法合理复用的复杂页面布局。当前 46 个页面中只有 13 个需要专属 CSS
表格列数直接由模板中的 `<th>``<td>` 数量决定,不需要为四列、五列等情况分别创建样式。卡片网格通过 `--grid-columns` 配置列数,例如:
```html
<div class="card-grid" style="--grid-columns: 4">
...
</div>
```
数据页使用 `.data-table``.data-cell--rank``.data-cell--time``.data-cell--score` 等公共类;技能与奇穴使用 `.ability-card`,角色奇遇与区服状态使用 `.card-grid`,器物与家园装饰使用 `.object-card`。新增普通列表页面时应优先组合这些公共组件,不再创建内容重复的页面 CSS。
这些模板不是响应式网页:每次查询只生成一个固定版式的完整 HTML 字符串,注入本次业务数据后由 AstrBot 使用 `full_page=True` 截取整页图片。样式不包含移动端断点;内容宽度由 `--jx3-page-width` 固定,列数由模板结构或 `--grid-columns` 明确决定,不随渲染服务的默认视口发生重排。
### 6. 本地数据与缓存
@@ -475,8 +494,8 @@ astrbot_plugin_jx3/
│ ├── styles/
│ │ ├── tokens.css # 设计变量与页面宽度
│ │ ├── base.css # 全局背景、外框和排版
│ │ ├── components.css # 公共组件样式
│ │ └── pages/*.css # 页面独有布局
│ │ ├── components.css # 表格、网格、卡片、状态等公共组件
│ │ └── pages/*.css # 可选的复杂页面独有布局(当前 13 个)
│ ├── img/ # 通用图片资源
│ ├── sect/ # 门派与心法图标
│ └── serendipity/ # 奇遇图标
@@ -490,7 +509,7 @@ astrbot_plugin_jx3/
1. 根据数据来源选择 `JX3APIService``AIJX3Service``JX3BOXService`
2. 在业务服务中新增异步方法,复用 `APIClient`,完成请求、空数据检查、字段整理和标准返回对象构建。
3. 需要图片输出时新增或复用 `templates/pages/*.html`并按需添加同名的 `templates/styles/pages/*.css`;通用视觉规则应进入公共样式层,不要在业务层拼装最终图片消息。
3. 需要图片输出时新增或复用 `templates/pages/*.html`优先组合 `data-table``card-grid``ability-card``object-card` 等公共组件,并通过 `template-components` 元数据声明所需组件;只有无法复用的复杂布局才添加同名的 `templates/styles/pages/*.css`,不要在业务层拼装最终图片消息。
4.`MessageBuilder` 中增加薄包装方法,选择文本、HTML 图片、远程图片、消息链或会话处理器。
5.`main.py``command_map` 注册触发词。
6. 同步更新 `templates/pages/helps.html`、README 和 CHANGELOG,确保参数顺序以包装方法签名为准。
@@ -504,7 +523,7 @@ python -m compileall -q .
python -m unittest tests.test_template_system -v
```
模板测试会检查 46 个页面片段与同名样式是否一一对应、能否组合为完整文档、Jinja2 是否能够完成基础渲染,以及模板路径是否能阻止目录穿越。它和 `compileall` 仍不能替代带真实数据的 AstrBot 消息、HTML 渲染和外部接口联调。
模板测试会检查 46 个页面片段、13 个可选页面样式、公共组件按声明选择性注入、完整文档组合、Jinja2 基础渲染,以及模板路径能阻止目录穿越。它和 `compileall` 仍不能替代带真实数据的 AstrBot 消息、HTML 渲染和外部接口联调。
## 当前版本状态