feat: 添加状态监控插件和Redis原子操作支持
- 新增 `/status` 指令,展示机器人运行状态和系统指标 - 实现Redis Lua脚本支持原子化计数器操作 - 添加消息收发统计功能 - 完善文档,包括插件开发和性能优化指南 - 重构WebSocket连接池,增加健康检查机制 - 移除旧版编译脚本,优化项目结构
This commit is contained in:
@@ -72,3 +72,9 @@ Bot 应该会回复你:“你好,[你的昵称]!”
|
||||
* `args: str`: 如果命令有参数(比如 `/echo hello world`),`args` 就是 `hello world` 这部分字符串。
|
||||
|
||||
就这么简单,一个最基础的插件就写完了。
|
||||
|
||||
## 进阶阅读
|
||||
|
||||
- [指令处理](./command-handling.md): 了解如何处理参数、获取用户输入。
|
||||
- [最佳实践](./best-practices.md): 学习如何编写更健壮、更高效的插件。
|
||||
- [插件详解:/status 状态监控](./status-plugin.md): 深入了解内置的状态监控插件是如何实现的。
|
||||
|
||||
82
docs/plugin-development/status-plugin.md
Normal file
82
docs/plugin-development/status-plugin.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 插件详解:`/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` 打造成一个专属于你的、功能更加丰富的机器人仪表盘。
|
||||
Reference in New Issue
Block a user