Files
NeoBot/docs/plugin-development/status-plugin.md
K2cr2O1 d458413e4b feat: 添加状态监控插件和Redis原子操作支持
- 新增 `/status` 指令,展示机器人运行状态和系统指标
- 实现Redis Lua脚本支持原子化计数器操作
- 添加消息收发统计功能
- 完善文档,包括插件开发和性能优化指南
- 重构WebSocket连接池,增加健康检查机制
- 移除旧版编译脚本,优化项目结构
2026-01-23 15:54:45 +08:00

83 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 插件详解:`/status` 状态监控
`/status``NeoBot` 内置的一个强大插件,它能让你实时了解机器人的运行状态、性能指标和指令调用情况。这不仅是一个酷炫的功能,更是一个重要的运维工具。
## 功能概览
发送 `/status` 指令后,机器人会返回一张精心设计的状态图,包含以下核心信息:
1. **系统信息**:
* **CPU 使用率**: 当前服务器的 CPU 负载情况。
* **内存占用**: 机器人进程占用了多少物理内存。
* **磁盘空间**: 服务器磁盘的使用情况。
2. **机器人核心指标**:
* **启动时间**: 机器人本次运行了多久。
* **连接状态**: 与 OneBot 客户端的连接是否正常。
* **消息收发**: 接收和发送了多少条消息。
3. **指令调用统计**:
* **总调用次数**: 所有指令一共被调用了多少次。
* **热门指令**: 哪些指令被使用的频率最高。
4. **版本信息**:
* **框架版本**: `NeoBot` 的版本号。
* **客户端信息**: 连接的 OneBot 客户端名称和版本(如 NapCatQQ
## 实现技术
这个插件综合运用了 `NeoBot` 框架的多种核心能力:
- **系统监控 (`psutil`)**: 通过 `psutil` 库获取实时的系统性能数据。
- **原子化统计 (`Redis + Lua`)**: 指令调用次数通过 Redis 的 Lua 脚本进行原子化递增,保证高并发下的数据准确性。
- **异步任务**: 启动时间、消息计数等信息在后台通过异步任务持续更新。
- **动态 HTML 渲染 (`Jinja2`)**: 状态信息被注入到一个 HTML 模板中。
- **网页截图 (`Playwright`)**: 渲染好的 HTML 页面通过 Playwright 的页面池进行截图,生成最终的状态图片。
## 如何使用
直接在与机器人聊天的任何地方(私聊或群聊)发送:
```
/status
```
机器人会处理几秒钟(主要是截图耗时),然后将状态图片发送给你。
## 自定义与扩展
想在状态图中添加你自己的信息?很简单!
1. **找到插件文件**: `plugins/bot_status.py`
2. **修改 `get_bot_status` 函数**: 这个函数负责收集所有需要展示的数据。你可以在这里添加新的数据源。
```python
# plugins/bot_status.py
async def get_bot_status() -> Dict[str, Any]:
# ... 已有的代码 ...
# 添加你自己的数据
my_plugin_data = {
"custom_metric": await get_my_metric(),
"plugin_version": "1.2.3"
}
status_data.update(my_plugin_data)
return status_data
```
3. **修改 HTML 模板**: `templates/status.html`。
在这个文件中,你可以用 Jinja2 的语法把你刚刚添加的数据展示出来。
```html
<!-- templates/status.html -->
<!-- ... 已有的代码 ... -->
<div class="card">
<h2>我的插件状态</h2>
<p>自定义指标: {{ custom_metric }}</p>
<p>插件版本: {{ plugin_version }}</p>
</div>
```
通过这种方式,你可以轻松地将 `/status` 打造成一个专属于你的、功能更加丰富的机器人仪表盘。