名称: 插件 描述: “插件管理、安装和生命周期控制” emoji: “🧩”
插件 - 完整API参考
安装、管理和配置插件以扩展Clodds功能。
聊天命令
列出插件
/plugins 列出已安装插件
/plugins available 浏览可用插件
/plugins search <查询> 搜索插件注册表
安装/移除
/plugins install <名称> 从注册表安装
/plugins install <URL> 从URL安装
/plugins uninstall <ID> 移除插件
/plugins update <ID> 更新插件
/plugins update-all 更新所有插件
启用/禁用
/plugins enable <ID> 启用插件
/plugins disable <ID> 禁用插件
/plugins restart <ID> 重启插件
配置
/plugins config <ID> 查看插件设置
/plugins set <ID> <键> <值> 更新设置
/plugins reset <ID> 重置为默认值
TypeScript API参考
创建插件管理器
import { createPluginManager } from 'clodds/plugins';
const plugins = createPluginManager({
// 插件目录
pluginDir: './plugins',
// 注册表URL
registry: 'https://plugins.clodds.ai',
// 自动更新
autoUpdate: true,
updateCheckIntervalMs: 86400000, // 每日
});
列出插件
// 获取已安装插件
const installed = plugins.list();
for (const plugin of installed) {
console.log(`${plugin.id}: ${plugin.name} v${plugin.version}`);
console.log(` 状态: ${plugin.status}`); // 'enabled' | 'disabled' | 'error'
console.log(` 描述: ${plugin.description}`);
}
安装插件
// 从注册表安装
await plugins.install('advanced-charts');
// 从URL安装
await plugins.install('https://github.com/user/plugin/releases/latest/plugin.zip');
// 从本地路径安装
await plugins.install('/path/to/plugin');
启用/禁用
// 启用插件
await plugins.enable('advanced-charts');
// 禁用插件
await plugins.disable('advanced-charts');
// 检查状态
const status = plugins.getStatus('advanced-charts');
console.log(`已启用: ${status.enabled}`);
配置插件
// 获取插件设置
const settings = plugins.getSettings('advanced-charts');
console.log(settings);
// 更新设置
await plugins.setSettings('advanced-charts', {
theme: 'dark',
refreshInterval: 5000,
});
// 重置为默认值
await plugins.resetSettings('advanced-charts');
卸载插件
await plugins.uninstall('advanced-charts');
创建自定义插件
// plugins/my-plugin/index.ts
import { Plugin, PluginContext } from 'clodds/plugins';
export default class MyPlugin implements Plugin {
id = 'my-plugin';
name = '我的自定义插件';
version = '1.0.0';
description = '添加自定义功能';
// 默认设置
defaultSettings = {
enabled: true,
threshold: 0.5,
};
async onLoad(ctx: PluginContext) {
console.log('插件已加载!');
// 注册命令
ctx.registerCommand({
name: 'my-command',
description: '做一些酷的事情',
handler: async (args) => {
return `结果: ${args.join(' ')}`;
},
});
// 注册工具
ctx.registerTool({
name: 'my-tool',
description: '一个自定义工具',
execute: async (params) => {
return { result: 'success' };
},
});
// 订阅事件
ctx.on('message', async (msg) => {
if (msg.content.includes('hello')) {
await ctx.reply('Hello back!');
}
});
}
async onUnload(ctx: PluginContext) {
console.log('插件已卸载!');
}
async onSettingsChange(settings: any, ctx: PluginContext) {
console.log('设置已更新:', settings);
}
}
插件生命周期
// 事件
plugins.on('installed', (plugin) => {
console.log(`已安装: ${plugin.name}`);
});
plugins.on('enabled', (plugin) => {
console.log(`已启用: ${plugin.name}`);
});
plugins.on('disabled', (plugin) => {
console.log(`已禁用: ${plugin.name}`);
});
plugins.on('error', (plugin, error) => {
console.error(`插件错误: ${plugin.name}`, error);
});
插件结构
my-plugin/
├── index.ts # 主插件文件
├── package.json # 插件元数据
├── settings.json # 默认设置
├── commands/ # 命令处理程序
├── tools/ # 工具定义
└── assets/ # 静态资源
package.json
{
"name": "my-plugin",
"version": "1.0.0",
"description": "我的自定义插件",
"main": "index.ts",
"clodds": {
"minVersion": "0.1.0",
"permissions": ["network", "storage"],
"commands": ["my-command"],
"tools": ["my-tool"]
}
}
插件权限
| 权限 | 访问 |
|---|---|
network |
HTTP/WebSocket请求 |
storage |
本地文件存储 |
exec |
Shell命令执行 |
trading |
交易API |
memory |
用户内存访问 |
最佳实践
- 最小权限 — 只请求所需权限
- 处理错误 — 避免插件错误导致崩溃
- 干净卸载 — 卸载时释放资源
- 版本兼容性 — 检查minVersion
- 文档设置 — 解释配置选项