跳到主要内容

3分钟快速编写插件

插件页界面介绍

懒人百宝箱的插件是使用 javascript 编写的,插件的主要功能是处理用户的消息,然后返回一个回复。

我们可以在设置页面的 “插件设置” 里面的 “自定义” 中编写我们的插件。首先是插件的基础信息,我们可以设置插件的名称,描述,以及插件的图标。

然后是插件的编辑区,我们可以在这里编写我们的插件代码。记得写完后点击保存。或者 Ctrl + S 保存。如果觉得插件写的不对,可以点击重置按钮,重置插件。

最后是 测试插件

我们可以在这里测试我们的插件,看看插件的执行结果。也可以自己添加一些模拟数据,以便测试插件的效果。

最后,别忘了点击底部的新增按钮,将插件添加到应用中。

点击返回列表,我们可以看到我们刚刚添加的插件。

然后我们点击启用插件,就可以在应用中使用我们的插件了。

插件的结构

const cc = require('config_srv');
const rp = require('reply_srv');

/**
* 插件主函数
* @param {AppContext} ctx - 上下文信息
* @param {Message[]} messages - 消息数组
* @returns {Reply} 插件执行结果
*/
async function main(ctx, messages) {
const cfg = await cc.get(ctx);
return await rp.getReply(cfg, ctx, messages);
}

我们这里来简单的介绍下各个参数的含义:

  • AppContext:上下文信息,包含了当前用户的信息,当前插件的信息等
  • Message[]:消息数组,包含了用户发送的消息

我们可以通过这两个参数来处理用户的消息,然后返回一个回复。

消息数组

这个消息的结构是一个数组,数组中的每个元素都是一个消息对象,消息对象的结构如下:

export type RoleType = 'SELF' | 'OTHER' | 'SYSTEM';
export type MessageType = 'TEXT' | 'IMAGE' | 'VIDEO' | 'FILE';

export interface Message {
sender: string; // 发送者的用户名,注意有些平台可能没有这个信息
content: string; // 消息内容
role: RoleType; // 发送者的角色
type: MessageType; // 消息类型
}

一般我们只需处理 OTHER 类型的消息即可,因为这是用户发送的消息。SELF 类型的消息是自己发送的消息,SYSTEM 类型的消息是系统消息,一般不需要处理。

例如我们只需要处理文本消息,可以通过 messages.filter(m => m.type === 'TEXT') 来获取。

例如:

async function main(ctx, messages) {
lastMessage = messages.filter(m => m.type === 'TEXT').pop();

// ...
}

回复消息

上面介绍了插件的输入,下面我们来介绍插件的输出,即回复消息。

export interface ReplyDTO {
content: string;
type: MessageType;
}

回复时只需要返回这个对象即可,例如:

async function main(ctx, messages) {
return {
content: '你好',
type: 'TEXT',
};
}

那么这个插件就会回复用户 你好 这个消息。当然你可以按你的需求来做更复杂的需求,例如我们改造一下标准的插件:

const cc = require('config_srv');
const rp = require('reply_srv');

async function main(ctx, messages) {
const cfg = await cc.get(ctx);
const reply = await rp.getReply(cfg, ctx, messages);

// 我们替换一下 reply 的 '你好' 为 '您好'
reply.content = reply.content.replace('你好', '您好');
return reply;
}

调试插件

好了,我们已经介绍了插件的编写,下面我们来介绍一下如何调试插件。

alt text

首先我们进入到这个设置页面,然后打开 “启用自定义插件” 这个开关,然后我们可以在这个页面看到一个编辑器,再在上面输入我们的插件代码,然后点击保存即可。

async function main(ctx, messages) {
return {
content: '你好这是一个测试插件',
type: 'TEXT',
};
}

再点击 “测试插件” 按钮,我们就可以看到插件的执行结果了。

可以看到上面已经展示了插件的执行结果,这样我们就可以很方便的调试插件了。

打印日志

有时候我们需要打印一些日志来调试插件,这时候我们可以使用 console.log 来打印日志,这些日志会在控制台中显示。

async function main(ctx, messages) {
console.log('插件开始执行');
return {
content: '你好这是一个测试插件',
type: 'TEXT',
};
}

即可在控制台中看到这个日志。