Skip to content
目录

配置模式

在很多时候,我们会面临一些实用的需求:

  • 验证某个配置项是否合法
  • 为可缺省的配置项提供默认值
  • 在网页控制台中通过表单让用户进行在线配置

为了解决这些需求,我们开发了 schemastery 这个库,并将它集成到了 Koishi 中。这一章将介绍如何使用这个库为你的插件声明配置。

基本示例

让我们看一个简单的示例。下面的插件将注册一个指令,输出当前插件的配置项。

ts
import { Context, Schema } from 'koishi'

export const name = 'example'

export interface Config {
  foo: string
  bar?: number
}

export const Config: Schema<Config> = Schema.object({
  foo: Schema.string().required(),
  bar: Schema.number().default(1),
})

export function apply(ctx: Context, config: Config) {
  ctx.command('config').action(() => {
    // 输出当前的配置
    return `foo: ${config.foo}\nbar: ${config.bar}`
  })
}

需要注意的是,Config 应当是导出的插件的一个属性。因此,如果你使用默认导出,推荐你使用 namespace 来声明插件的配置:

ts
class Example {
  constructor(ctx: Context, config: Example.Config) {
    // 这里是插件实现
  }
}

namespace Example {
  export interface Config {}

  export const Config: Schema<Config> = Schema.object({
    // 这里是配置声明
  })
}

export default Foo

更多配置类型

有关于更多配置类型,你可以阅读 schemastery 文档 以了解更多。