Metadata-Version: 2.4
Name: nonebot-plugin-komari-status
Version: 0.1.3
Summary: Render Komari probe dashboard and send 1080p screenshots to group chats.
Author-email: apasike <apasike@qq.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/Apasike/nonebot-plugin-komari-status
Project-URL: Repository, https://github.com/Apasike/nonebot-plugin-komari-status
Keywords: nonebot,nonebot2,komari,probe,screenshot,onebot
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: nonebot2>=2.3.0
Requires-Dist: nonebot-adapter-onebot>=2.4.0
Requires-Dist: playwright>=1.44.0
Requires-Dist: pydantic>=2.0
Provides-Extra: test
Requires-Dist: pytest>=8.0.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
Dynamic: license-file

# nonebot-plugin-komari-status

一个 NoneBot2 插件：在群聊中发送 `/ks` 或 `/komari-status`，用无头浏览器打开 Komari 探针面板，按 1920×1080 渲染截图，并以 base64 图片消息发回群聊。

## 功能

- 支持 `/ks`、`/komari-status` 两个命令。
- 使用 Playwright 无头 Chromium 渲染动态页面。
- 等待服务器节点卡片渲染完成后截图（默认等待 `.km-node-card` 出现），不硬等。
- 截图通过 base64 直接发送，不写入临时文件。
- 支持群白名单与命令冷却。

## 安装

使用 NB-CLI 安装：

```bash
nb plugin install nonebot-plugin-komari-status
```

插件依赖 Playwright 浏览器内核，安装后执行：

```bash
playwright install chromium
```

## 配置

在 `.env` 或环境变量中配置以下项：

| 配置项 | 说明 | 默认值 |
| --- | --- | --- |
| `KOMARI_URL` | Komari 面板地址 | `http://127.0.0.1:25774` |
| `KOMARI_USERNAME` | 面板用户名（可选，自动登录） | 空 |
| `KOMARI_PASSWORD` | 面板密码（可选，自动登录） | 空 |
| `KOMARI_STORAGE_STATE_PATH` | Playwright 登录态文件路径 | 空 |
| `KOMARI_SCREENSHOT_WIDTH` | 截图宽度 | `1920` |
| `KOMARI_SCREENSHOT_HEIGHT` | 截图高度 | `1080` |
| `KOMARI_DEVICE_SCALE_FACTOR` | 设备缩放因子，保持 `1` 输出 1080p | `1` |
| `KOMARI_SCREENSHOT_TYPE` | `jpeg` 或 `png` | `jpeg` |
| `KOMARI_SCREENSHOT_QUALITY` | JPEG 质量 | `85` |
| `KOMARI_WAIT_SELECTOR` | 页面加载完成等待的元素 | `body` |
| `KOMARI_WAIT_TIMEOUT` | 加载等待上限（毫秒） | `10000` |
| `KOMARI_WAIT_NETWORKIDLE` | 是否等待网络空闲 | `false` |
| `KOMARI_NETWORKIDLE_TIMEOUT` | 网络空闲等待上限（毫秒） | `3000` |
| `KOMARI_READY_SELECTOR` | 判定探针已渲染的节点卡片选择器 | `.km-node-card` |
| `KOMARI_READY_MIN_COUNT` | 至少出现多少个节点卡片才判定就绪 | `1` |
| `KOMARI_BACKGROUND_URL` | 背景图床 URL，设置后要求其已加载 | 空 |
| `KOMARI_LOADING_TEXT` | 页面包含该文本时继续等待（附加条件） | `加载中` |
| `KOMARI_RENDER_DELAY_MS` | 判定加载完成后的额外等待（毫秒） | `1000` |
| `KOMARI_GROUP_ALLOWLIST` | 允许使用的群号，空表示不限制 | `[]` |
| `KOMARI_COOLDOWN_SECONDS` | 单群命令冷却时间（秒） | `30` |

示例：

```env
KOMARI_URL=http://127.0.0.1:25774
KOMARI_GROUP_ALLOWLIST=[123456789]
```

## 使用

将机器人拉入群聊，发送：

```text
/ks
```

或：

```text
/komari-status
```

机器人会渲染 Komari 探针页面并返回 1920×1080 的截图。

## 说明

- 如果面板需要登录，建议先用 Playwright 保存 `storage_state`，再通过 `KOMARI_STORAGE_STATE_PATH` 加载，避免每次截图都重新登录。
- 就绪判定为“节点卡片出现”且背景图片已加载、加载文字已消失（设置了才检查），
  任一条件超时后仍会按 `KOMARI_WAIT_TIMEOUT` 上限截图，不会无限等待。
- 如果你的 Komari 节点较多，可以把 `KOMARI_READY_MIN_COUNT` 设成节点总数，
  确保所有卡片都渲染出来再截图。
