Skip to content
大纲

开发技巧

逐步完善中, 可先参考 KiviPlugin API

发送复杂消息 (图片、艾特、QQ 表情、语音、短视频等)

你可以使用 segment 进行复杂消息的构造。

js
const { segment } = require('@kivibot/core')

// 艾特消息
const at = segment.at(114514)

// 图片消息
const img = segment.image('https://b.viki.moe/dimo.png')

// QQ 表情消息, 如果不知道表情 id, 可以在 kivi.json 里配置 message_mode 为 detail
// 重开框架后,把表情发给 Bot, 就可以在 log 里看到表情 id
const face = segment.face(66)

// 语音消息
const record = segment.record('https://xxx.xxx/xxx.mp3')

请参考 oicq 文档的 segment API 查看所有消息类型和参数。

请求接口数据

可以使用框架内置的 axios 或者简单封装过的 http 发起网络请求。

js
const { KiviPlugin, http } = require('@kivibot/core')

const plugin = new KiviPlugin('一言', '1.0.0')

plugin.onMounted((bot, admins) => {
  plugin.onMessage(async event => {
    const { raw_message } = event

    if (raw_message === '一言') {
      const { data } = await http.get('https://v1.hitokoto.cn')

      plugin.log(data)

      event.reply(data.hitokoto)
    }
  })
})

module.exports = { plugin }

定时任务

你可以使用 plugin.cron() 处理定时任务, 内部使用 node-cron 实现。

js
plugin.onMounted((bot, admins) => {
  // 每 3 秒钟触发
  const task = plugin.cron('*/3 * * * * *', () => {
    bot.pickFriend(plugin.mainAdmin).sendMsg('cron trigger!')
  })

  // task.stop()
})

随机数或随机项

可以使用框架内置的 randomIntrandomItem 减少重复代码。

你可以参考 Utils API 了解更多。

js
const { KiviPlugin, segment, randomItem, randomInt } = require('@kivibot/core')

const plugin = new KiviPlugin('骰子', '1.0.0')

const nums = [1, 2, 3, 4, 5, 6]

plugin.onMounted((bot, admins) => {
  plugin.onMessage(event => {
    const { raw_message } = event

    if (raw_message === '扔骰子') {
      // 或使用 const n = randomInt(1, 6)
      const n = randomItem(nums)

      const msg = segment.dice(n)

      event.reply(msg)
    }
  })
})

module.exports = { plugin }

支持并处理频道消息

你可以使用 oicq-guild 插件,bind Client 得到频道实例后,进行后续事件监听、消息处理,详情请参考 oicq-guild 说明。

首先安装 oicq-guild

shell
npm i oicq-guild --save

然后在插件层面引入并 bind,根据需求监听处理相关事件。

js
const { KiviPlugin } = require('@kivibot/core')
const { GuildApp } = require('oicq-guild')

plugin.onMounted((bot, admins) => {
  // 插件 mount 后,绑定 oicq Client 获取频道实例
  const app = GuildApp.bind(bot)

  // 通过频道实例监听并处理相关事件,详情参考 oicq-guild 说明

  // 频道实例初始化完成
  app.on('ready', function () {
    plugin.log('My guild list:')
    plugin.log(this.guilds)
  })

  // 监听处理频道消息
  app.on('message', e => {
    plugin.log(e)

    if (e.raw_message === 'hello') {
      e.reply(`Hello, ${e.sender.nickname}!`)
    }
  })
})

module.exports = { plugin }