开发入门
前言
KiviBot 插件基于 TypeScript 开发。
因此,本教程假设您已经具有一定的TypeScript 基础,并对 Node.js 有一定的了解。
所需工具
1.KiviBot 框架
通过 开始 中的 快速上手 安装框架。
2.代码编辑器
您需要一个文本编辑器来编写代码。 我们推荐使用 Visual Studio Code (VS Code),因为它是免费和强大的,且支持终端的运行。VS Code 官网
创建第一个插件 - demo1
- 在
框架目录/plugins
下新建文件夹(文件夹名称即插件名) - 文件夹下新建 index.ts(插件主文件)
- 将下列代码粘贴到 index.ts 文件中并保存
你可以新建一个 demo1 文件夹(文件夹名字要和下面 name 一样)
typescript
import { definePlugin } from "kivibot";
export default definePlugin({
name: "demo1",
version: "1.0.0",
async setup(ctx) {
//改为自己的qq号
ctx.bot.sendPrivateMsg(114514, "插件被启用了!");
},
});
- 接着向机器人发送
#插件 启用 demo1
- 再发送
#插件 禁用 demo1
可以看到的是,在启用插件时机器人会向指定 QQ 发送"插件被启用了!"
至此,你成功创建了第一个插件并启用。
接下来,对插件内容进行简要的讲解:
必要部分 为每个插件都应有的代码:
typescript
import { definePlugin } from "kivibot";
//第一行代码,引入了框架核心kivibot里面的definePlugin函数
export default definePlugin({
name: "demo1", // 插件名
version: "1.0.0", // 插件版本
async setup(ctx) {
// 插件启用时的逻辑
},
});
主体部分 实现插件的功能:
typescript
import { definePlugin } from "kivibot";
export default definePlugin({
name: "demo1",
version: "1.0.0",
async setup(ctx) {
// ctx是插件上下文对象,包含bot等属性和handle等方法
ctx.bot.sendPrivateMsg(1706328818, "插件被启用了!");
// 调用bot对象的发送私聊消息方法
},
});
注意,虽然 demo1 演示了 插件启用后 发送消息,但实际插件开发中我们不推荐你这样做。
小结:插件分为必要部分和本体部分,其中在必要部分定义插件的基本信息,在本体部分实现插件功能。通过 demo1,你应该了解到了如何创建一个基础插件,以及如何使用 ctx.bot 发送消息。
实现监听消息并回复 - demo2
在 KiviBot 中,我们使用 ctx.handle()方法来监听和处理消息事件。参考下面的示例:
typescript
import { definePlugin } from "kivibot";
export default definePlugin({
name: "demo2",
version: "1.0.0",
async setup(ctx) {
ctx.handle("message", async (e) => {
// 监听所有消息事件
if (e.message_type === "private") {
// 判断是否为私聊消息
e.reply(e.sender.nickname + "给我发了消息:" + e.raw_message);
// 使用reply方法直接回复消息
}
});
},
});
下面简要介绍下事件对象 e。 e 为接收到的消息事件对象,包含消息的各种信息和回复等方法。 例如一个群消息事件对象的结构如下:
提示
这是不完全的,可以自己 console.log 相应内容查看结构
typescript
{
post_type: 'message',
message_id: 'xxx',
user_id: 1234567,
time: 1672304636,
message: [
{ type: 'text', text: '这是文字' },
{ type: 'at', qq: 1234567, text: '@用户' },
{
type: 'image',
file: 'xxx.jpg',
url: 'https://xxx.com/xxx.jpg'
}
],
raw_message: '这是文字@用户 [图片]',
message_type: 'group',
sender: {
user_id: 1234567,
nickname: '用户名',
// ...其他发送者信息
},
group_id: 12345,
// ...其他群消息相关信息
}
指定词回复 - demo-2.5
再来一个示例,巩固一下 demo-2 的知识:
typescript
import { definePlugin } from "kivibot";
export default definePlugin({
name: "demo-2.5",
version: "1.0.0",
async setup(ctx) {
ctx.handle("message", (e) => {
if (e.raw_message === "你好") {
// raw_message是消息的文本内容
e.reply("世界!", true);
// reply方法第二个参数为是否引用回复,默认false
}
});
},
});
发送图片,语音等消息 - demo-3
在 KiviBot 中,我们使用 segment 工具来构造特殊消息:
typescript
import { definePlugin, segment } from "kivibot";
export default definePlugin({
name: "demo-3",
version: "1.0.0",
async setup(ctx) {
ctx.handle("message", (e) => {
if (e.raw_message === "发图片") {
const str = "这是个图片:";
const img = "https://example.com/image.png";
e.reply([str, segment.image(img)]);
// 使用segment.image()构造图片消息
// 复杂消息需要用数组形式发送
}
});
},
});
支持的 segment 方法包括:
- segment.at() - @某人
- segment.image() - 图片
- segment.record() - 语音
- segment.video() - 视频 等等
更多请看 Bot API 中的 segment
提升自己
入门教程暂时到这里,接下来可以:
- 学习进阶开发技巧
- 阅读 API 文档深入学习