内容大纲

约 535 字大约 2 分钟

2023-12-07

开始前先看我

一个拥有完整文件的插件都规定存在这么几个

文件名用处必选
.gitignore用于部分不能直接公开的 config.jsonc×
commands.jsonc用于定义插件拥有哪些命令×
config.default.jsonc用于部分不能直接公开的 config.jsonc×
config.json会被用于自动加载当做插件的配置文件×
index.ts整个插件的入口文件
manifest.json用于配置插件的信息详细看我

加载方式

一共有三种种加载插件的方式, 支持使用 await 来控制异步操作

比如一些插件依赖于某些插件, 就可以让那部分先加载

详见

index.ts 文件示例

需要一个默认暴露一个匿名函数, 在加载插件时会执行这个函数

注意

新版本全部改为了静态导入, 需要手动 import

import { loadConfig } from '@/libs/loadConfig.ts'

export default () => {
  // 加载配置文件
  loadConfig('admin.jsonc', true)
  // 注册事件
  event()
}

import { eventReg } from '@/libs/eventReg.ts'

function event() {
  // 一共有三种消息类型, 会返回的类型如下
  RegEvent('notice', async context => {
    await notice(context)
  })
  RegEvent('request', async context => {
    await request(context)
  })
  RegEvent('message', async (event, context, tags) => {
    // 事件触发内部会自动检查是否是命令
    if (context.command) {
      if (context.command.name === '入群') {
        await invite(context, context.command.params, 'invite')
      } else if (context.command.name === '加群') {
        await invite(context, context.command.params, 'add')
      } else if (context.command.name === '好友') {
        await friend(context, context.command.params)
      }
    }
  })
}

// 其余处理程序

manifest.json

完整的 manifest.json 存在以下几个字段

{
  // 插件名
  "name": "bot",
  // 插件简介
  "description": "初始化机器人",
  // 插件作者
  "author": [{ "name": "huan_kong", "link": "https://github.com/huankong233" }],
  // 插件版本
  "version": "0.0.1",
  // 插件对应框架支持插件的版本号
  "plguinVersion": "3.0",
  // 插件需要用到哪些npm包
  "dependPackages": { "knex": "^2.4.2", "mysql2": "^3.4.1" },
  // 这个插件依赖了哪些插件
  "dependPlugins": { "knex": "0.0.1" },
  // 自动加载的配置文件名(默认就是config,可不指定)
  "configName": "config",
  // 取消自动加载配置文件
  "disableAutoLoadConfig": true,
  // 不在 loadPluginDir 方法中被加载
  "disableLoadInDir": true,
  // 用于判断是否已经安装了需要用到的npm包
  "installed": true
}