第一个 Fraq 机器人
我们从一个 Echo 机器人开始。它的功能很简单:在任何一个包含它的会话(私聊或群聊)中,只要发送
echo <任意文本>机器人就会相应地发送一条
You said: <任意文本>的消息。下面我们开始编写这个机器人。
创建项目
Fraq 提供了一个模板仓库方便你快速创建一个新的 Fraq 项目。你可以点击 "Use this template" 按钮来创建一个新的仓库,然后克隆到本地。
模板仓库使用 pnpm 作为包管理器,因此你需要先安装 pnpm。如果你还没有安装,可以参考 pnpm 官方文档来安装。确保 pnpm 可用之后,在项目根目录下运行以下命令来安装依赖:
pnpm install强烈建议使用 TypeScript 来编写 Fraq 代码。
编写代码
首先,启动你的 Milky 协议端,并确认它监听 127.0.0.1 地址的 30001 端口。然后,打开你的项目的 src/index.ts 文件,你会看到以下的代码:
import { createColoredLogHandler } from '@fraqjs/color-log';
import { Context, param } from '@fraqjs/fraq';
const ctx = Context.fromUrl('http://127.0.0.1:30001/', {
logHandler: createColoredLogHandler({
minLevel: 'debug',
}),
});
ctx.router
.command('echo')
.arg('content', param.str())
.execute((session, { content }) => {
session.reply(`You said: ${content}`);
});
ctx.start();用以下命令启动你的 Fraq 项目:
pnpm start你可以在任何一个包含机器人的会话中发送 echo Hello 来测试它是否正常工作。
到底做了些什么?
我们来逐行解释一下上面的代码:
const ctx = Context.fromUrl('http://localhost:30001/', {
// logHandler 的配置
});Context 是 Fraq 的核心类,代表了一个机器人实例,它包含了机器人的配置、状态、路由等信息。我们通过 Context.fromUrl 方法来创建一个新的 Context 实例,并传入 Milky 协议端的地址。
ctx.router
.command('echo')
.arg('content', param.str())
.execute((session, { content }) => {
session.reply(`You said: ${content}`);
});router 是 Context 实例的一个属性,我们用它来定义机器人将会响应哪些指令,并且这些指令的规则分别是什么样的。ctx.router.command('echo') 会开始定义一个名为 echo 的指令;随后可以继续调用 .arg(...) 添加参数,最后通过 .execute(...) 注册处理函数。
.command('echo')指定了指令名称,表示当用户发送的消息以echo开头时,这个指令就会被触发。.arg('content', param.str())定义了这个指令的参数规则。这里的content是一个字符串类型的参数,表示用户在echo后面输入的文本内容。.execute(...)用于注册处理函数。当指令被触发时,这个函数会被调用。它接受两个参数:session和一个包含指令参数的对象。session代表了当前的会话,可以用它来发送回复消息等操作。我们在回调函数中使用session.reply方法来回复一条消息。- 第二个参数是一个对象,包含了指令的参数,这里我们通过解构赋值的方式直接获取了
content参数。得益于 TypeScript 的类型推断,编译器知道content是一个字符串类型的参数,因此我们不需要再重复声明它的类型。
ctx.start();最后,我们调用 ctx.start 方法来启动机器人,使它开始连接 Milky 协议端并监听消息。你可以随时使用 Ctrl+C 来停止机器人。
下一步
如果一切正常,恭喜你,你已经成功创建了一个简单的 Fraq 机器人。下一节将会介绍如何构建更多类型的消息段。祝你玩得开心!