配置文件

所有配置从 application.yaml 与依赖中的 plugin-conf/**/*.yaml 合并而来。

系统配置

bot:
  system:
    nickname: "小花落"
    administrator: ["123456789"]
    zoneOffset: "+8"
    adapterPackage: []
    pluginPackage: ["com.example.bot.plugins"]
    greeting:
      goodMorning: "0 0 7 * * ?"
      goodNight: "0 0 1 * * ?"
    web:
      port: 8041
      auth: "CHANGE_ME"
是否必需用途
nickname自身昵称与部分推送文案
administrator跨平台超级管理员 ID 列表
zoneOffsetCron 时区,默认 +8
pluginPackage自有插件需要插件扫描包列表
greeting.*早晚安事件与闲时窗口
web.port / web.authKtor 监听端口与 Basic Auth 密码

读取 API

val nickname = systemConfigProperty("nickname")
val admins = systemConfigListProperty("administrator") { emptyList() }
val useHttp = adapterConfigProperty("nc.useHttp") { "false" }.toBoolean()
val prompt = pluginConfigProperty("systemPrompt")
val blocked = pluginConfigListProperty("blockWords") { emptyList() }

通用方法还有 configPropertyconfigListPropertyconfigconfigList*Property 读取字符串;*ListProperty 读取字符串列表;config 返回 JacksonYAMLValue,可用 getConfiggetListConfiggetStringOrNulltoMap() 处理结构化配置。

插件前缀如何确定

pluginConfigProperty("x") 会按当前插件类推导 bot.plugin.<插件包名>.x。例如 com.example.bot.plugins.weather.Weather 对应 bot.plugin.weather

合并规则

  • 标量以先读取到的非空值为准,因此应用配置可覆盖依赖默认值。
  • 列表会合并并去重,所以多个模块可共同添加 pluginPackageadapterPackage
  • 结构化配置的 Map 在合并后读取。
当前 WebServer 的 Basic Auth 校验只比较密码,且用户名不参与判断。不要直接暴露到公网;请在反向代理层补充 TLS、来源限制和更完整的鉴权。