贝拉QQ机器人(koishi-v4框架)插件开发——接入一个Api

3/30/2023 botQQ机器人

# 贝拉QQ机器人插件开发——接入一个Api

# 前期准备

# 初始化一个插件

koishi根文件夹
yarn

yarn setup plugin-name  # plugin-name为插件名称
1

npm

npm run setup plugin-name  # plugin-name为插件名称
1

此时,在plugins文件夹内会新增一个plugin-name/(定义的插件名称)文件夹
在src目录内有一个index.ts文件夹,先tsconfig.json文件内"include"项加入"tsx"表示支持tsx

"include": [
    "src",
    "tsx"
  ]
1
2
3
4

后面我们就可以将index.ts改名为index.tsx了,当然不改也行-=-我习惯tsx

# 实例

初始化做完了,那么接下来就实战吧
在index.tsx内写入我们的插件脚本

注意:这里的request与rate-limit需要自己安装依赖

import { Context, Schema } from 'koishi'
import { Time } from 'koishi'
import { checkTimer } from '@koishijs/plugin-rate-limit'
const request = require('request');

export const name = 'bechat'        //这里是插件名称

export interface Config {}

export const Config: Schema<Config> = Schema.object({})

export function apply(ctx: Context) {
  // 拿一个指令举例吧
  ctx.command('bechat <messege: text>','跟贝拉发起Chatgpt聊天',{ minInterval: Time.minute })
  .usage('bechat <聊天内容>')
  .example('bechat 你好啊!')
  .action(async ({ session }, messege) => {
    if(messege && messege !== " ") {
      session.send(<>请耐心等待……(冷却时间1min)</>);              // 发送前的提示信息
      var enUrl = encodeURI(messege);                           // 将发送的内容进行url编码,以便js访问
      var url = `https://api.example.com/?msg=${enUrl}`;        // 比如这是一个自建的chatgpt的api,它返回json
      const data = await makeRequest(url);                      // 进行get请求
      session.send(<>{(data.data).toString()}</>);              // 将请求结果发送出来
    }
    else session.send(<>使用bechat #聊天内容# 向贝拉发起chatgpt聊天(PS:冷却一分钟)</>);
  })
}

// 将get请求包装成Promise返回
async function makeRequest(url) {
  const options = {url: url};
  return new Promise((resolve, reject) => {
    request.get(options, (error, response, body) => {
      if (error) {
        reject(error);
      } else {
        resolve(body);
      }
    });
  });
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

写好以后我们编译插件

yarn build plugin-name
1

或者

npm run build plugin-name
1

# 启用插件

在koishi.yml的plugins中加入一行

plugin-name: {}
1

如果有热重载那就ok了,没有的话得重启机器人

最近更新: 11/24/2024, 10:03:25 AM