# karin-plugin-manage
**Repository Path**: HalcyonAlcedo/karin-plugin-manage
## Basic Information
- **Project Name**: karin-plugin-manage
- **Description**: No description available
- **Primary Language**: TypeScript
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-08-27
- **Last Updated**: 2024-09-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Karin Manage 插件
---
## 安装插件
karin根目录执行以下命令安装Karin Manage插件
> Github
> ```bash
> git clone https://github.com/HalcyonAlcedo/karin-plugin-manage.git ./plugins/karin-plugin-manage
> ```
> Gitee
> ```bash
> git clone https://gitee.com/HalcyonAlcedo/karin-plugin-manage.git ./plugins/karin-plugin-manage
> ```
>
安装依赖
```bash
pnpm install --filter=karin-plugin-manage
```
## 登陆面板
Karin Manage 插件只提供面板访问用的api,需要登陆官方或第三方面板对Karin进行配置
[公共管理面板](http://karin.alcedo.top)
### 连接服务器
#### 直接连接
初次访问管理面板后一般会提示服务器无响应,需要将服务器地址修改为你的Karin Manage 插件服务器地址,你可以通过向机器人发送 #访问面板 获取服务器地址
如果你需要更换其他服务器可以点击登陆页面下方提示内容中的 karin服务器 字样重新输入服务器地址
#### Wormhole代理
如果你的服务器没有公网ip你可能无法使用直接连接访问服务器,此时可以通过配置Wormhole代理连接服务器
在配置文件server.yaml中找到wormhole配置项
- enable改为true
- server改为Wormhole的连接地址
- clientId改为随意的数字+字母组合,此id需要唯一性,建议改为机器人qq号以避免和他人重复
此处提供一个公共Wormhole服务地址,你可以在server处填写 ws://wormhole.alcedo.top:3000/ws/
配置完成后重启karin,向机器人发送#访问面板将获取Wormhole代理的服务器连接
### 快速登陆
在 用户qq 处输入机器人的一个master级别qq号, 机器人qq 处输入一个机器人的qq号,点击快捷登陆后机器人将发送一个验证码给用户qq,将验证码输入在面板中即可登录
### 普通登陆
如果你有管理面板的账号和密码,你可以点击OR后输入用户名和密码登陆面板
## 配置
建议在配置好服务后直接登陆面板对插件进行配置
### server.yaml
- **服务端口** - `port`
- 面板服务运行的端口
- **wormhole代理** - `wormhole`
- wormhole的配置,详见wormhole代理说明
- **启动代理** - `enable`
- **代理服务器** - `server`
- **客户端id** - `clientId`
## 机器人命令
### 创建账号
对机器人发送 #创建面板管理账号 或 #创建面板管理账号 password,如果不设置密码将自动生成密码,账号为发送者qq号
### 修改密码
对机器人发送 #修改面板管理密码 password 将重新设置当前账号的密码
### 访问面板
对机器人发送 #访问面板 将发送面板信息
## 插件开发
Manage支持插件编写自定义的配置项视图、主页小组件、自定义api接口,根据下方文档在你的插件中加入对应文件即可自动载入这些配置。
### 配置项视图
面板默认情况下会读取config文件夹中的配置文件结构生成简易视图,如果需要自定义视图行为,可以编写配置项视图文件。
#### 创建配置视图文件
要创建一个新的配置视图,您需要在`config`文件夹下新建一个名为`PluginConfigView.yaml`的文件。这个文件将定义您的插件配置界面的布局和行为。
#### 配置视图文件结构
配置视图文件是一个YAML文件,它包含以下几个部分:
- `name`: 视图的名称。
- `file`: 关联的配置文件名。
- `view`: 视图的详细配置项列表。
每个配置项包括:
- `key`: 配置项的键名。
- `comment`: 配置项的描述。
- `path`: 在配置文件中的路径。
- `type`: 配置项的类型(例如:text, url, boolean, select, number, group)。
对于`select`和`group`类型的配置项,还需要提供额外的信息:
- 对于`select`类型,需要提供一个`item`列表,每个`item`包含`name`和`value`。
- 对于`group`类型,需要提供一个`part`列表,每个`part`包括子项的数据。
#### 远程视图
视图文件中可以加载远程视图实现动态视图功能,如果需要设置远程视图需要将`type`设置为`view`,并添加`api`参数,当api参数为链接时远程视图将从链接获取(get方法获取)视图数据,如果为字符串时则使用视图所应用的插件导出的api获取视图数据,视图数据要求返回yaml格式的字符串内容。
远程视图将被视为`group`加载到页面中,远程视图数据会被编码为`part`数据。
#### 示例:通用配置视图
```yaml
-
# 配置文件描述
name: 通用配置
# 配置文件名
file: config.yaml
# 视图信息
view:
-
# 配置项
key: 测试配置
# 配置描述
comment: 描述
# 配置路径
path: 'test'
# 配置类型
type: 'text'
-
key: 选项
comment: 视图中显示为name,返回配置结果为value
path: 'testSelect'
type: 'select'
# 是否可以多选
multiple: false
# 选项
item:
-
name: 选项1
value: 1
-
name: 选项2
value: 2
-
key: 群组
comment: 可以在同一个配置文件中对多个配置进行分组管理
path: 'testGroup'
type: 'group'
# 子项
part:
-
key: 群组中的子配置
comment: 代理服务器链接地址,例:ws://localhost:3000/ws/
# 路径需要包含群组路径,用.连接
path: 'testGroup.test'
type: 'url'
```
### 面板主页小组件
面板主页可加载插件的小组件,用于自定义显示信息,配合自定义api还可实现面板触发插件操作。
#### 文件命名和存放
- Vue组件文件应该是.vue扩展名的文件。
- 配置数据文件应该是.js扩展名的文件。
- 两个文件的文件名需要保持一致。
- 文件应该存放在manage/widgets文件夹中。
不同的文件名将生成多个不同的组件。
#### 开发流程
1. 在manage/widgets文件夹中创建一个新的.vue文件和一个同名的.js文件。
2. 在.vue文件中编写Vue组件代码。
3. 在.js文件中编写配置数据代码。
4. 确保两个文件的文件名一致。
5. 测试组件以确保其按预期工作。
#### 编写面板小组件
##### 组件结构
Vue组件使用Vue 3的Composition API来定义。组件接收三个props:
- `request`: 封装了axios的函数,支持get和post操作。
- `apiUrl`: 当前系统的API地址,用于调用系统API。
- `data`: 组件的自定义导入数据。
##### 示例代码
```vue
api数据 {{ apiData }} 导入数据 {{ props.data.msg }}
插件数量
```
#### 编写小组件数据
小组件支持自定义加载数据,这是可选的,要保证和小组件的文件名一致。
##### 数据结构
配置数据是一个JavaScript文件,默认导出一个异步函数,该函数返回一个对象。对象中包含col属性,用于设置Vue组件的列宽。
##### 示例代码
```javascript
export default async () => {
return { col: 4, msg: '导出数据' };
};
```
### 自定义API接口
自定义API接口允许您扩展面板的功能,通过Fastify路由处理不同的请求。
#### 创建自定义API接口文件
自定义API接口文件应该保存在`manage/server`文件夹中。每个接口文件都是一个`.js`文件,文件中默认导出一个函数。这个函数包含Fastify路由定义。
#### API接口文件结构
API接口文件包含以下几个部分:
- 默认导出的函数:这个函数接收两个参数,`fastify`和`options`。
- 路由定义:使用`fastify`对象定义路由,可以是`get`, `post`, `put`, `delete`等HTTP方法。
#### 示例代码
```javascript
export default async function (fastify, options) {
fastify.get('/test', async (request, reply) => {
// 处理GET请求
return reply.send({
status: 'success',
data: 'test'
});
});
// 可以添加更多路由...
}
```
#### 访问接口
生成的接口将在面板的/system/plugins/路径下,比如插件为test,创建的接口为get,请求路径为http://localhost:5333/system/plugins/test/get
#### 开发流程
1. 在manage/server文件夹中创建一个新的.js文件。
2. 编写默认导出的函数,定义所需的Fastify路由。
3. 测试API接口以确保其按预期工作。
#### 注意事项
- 确保您的API接口逻辑正确,能够处理各种可能的请求和错误情况。
- 使用合适的HTTP状态码和消息来响应请求。
- 保持代码的清晰和模块化,以便于维护和扩展。
- 以上就是自定义API接口开发的基本流程和指南。如果您有任何疑问或需要进一步的帮助,请随时联系我!
## 相关链接
[Karin](https://github.com/KarinJS/Karin)
[Wormhole](https://github.com/HalcyonAlcedo/wormhole)