Skip to content

config 模块

字数
2006 字
阅读时间
10 分钟

温馨提示

本文由AI辅助生成,可能存在不准确性。

config模块提供了配置文件的初始化、读取和缓存功能,用于管理框架和插件的配置。

导入方式

所有配置相关的功能均通过config命名空间导出,使用时需要先导入:

typescript
import { config } from 'node-karin'

// 使用config的子模块
const groupConfig = config.getYaml('groups', 'user')
const packageInfo = config.pkg()
const formatData = config.formatObject({ numbers: [1, 2, 3] })

配置工具函数

formatArray

将数组中的所有元素转换为字符串类型。

typescript
import { config } from 'node-karin'

/**
 * 将数组中所有元素转换为字符串
 * @param data - 源数组,类型为 any[]
 * @returns 元素都为字符串的数组,类型为 string[]
 */
const numbers = [1, 2, 3]
const strings = config.formatArray(numbers) // ['1', '2', '3']

formatObject

递归处理对象,将嵌套的数组中所有元素转换为字符串类型。

typescript
import { config } from 'node-karin'

/**
 * 将对象中嵌套数组的所有元素转换为字符串
 * @param data - 源对象,类型为 Record<string, any>
 * @returns 处理后的对象,数组元素都为字符串
 */
const obj = {
  ids: [1, 2, 3],
  nested: {
    values: [4, 5, 6]
  }
}

const formatted = config.formatObject(obj)
// 结果:
// {
//   ids: ['1', '2', '3'],
//   nested: {
//     values: ['4', '5', '6']
//   }
// }

mergeDegAndCfg

合并默认配置和用户配置,专用于处理privates和groups配置。

typescript
import { config } from 'node-karin'

/**
 * 合并配置对象
 * @param def - 默认配置,类型为 Record<string, any>
 * @param cfg - 用户配置,类型为 Record<string, any>
 * @returns 合并后的配置,类型为 Record<string, any>
 */
const defaultConfig = {
  maxConnections: 10,
  timeout: 30000,
  allowedTypes: ['image', 'video']
}

const userConfig = {
  timeout: 60000,
  allowedTypes: ['image', 'audio']
}

const merged = config.mergeDegAndCfg(defaultConfig, userConfig)
// 结果:
// {
//   maxConnections: 10,
//   timeout: 60000,
//   allowedTypes: ['image', 'audio']
// }

管理员配置 (admin)

处理框架层面的管理员配置操作。

getYaml

获取指定配置文件的内容。

typescript
import { config } from 'node-karin'

/**
 * 获取配置YAML
 * @param name - 文件名称,如'groups'、'privates'等
 * @param type - 文件类型,'user'表示用户配置,'default'表示默认配置
 * @param isRefresh - 是否刷新缓存,默认false
 * @returns 配置对象
 * @throws 如果文件不存在,抛出TypeError
 */
const groups = config.getYaml('groups', 'user')
const defaultGroups = config.getYaml('groups', 'default')
const freshGroups = config.getYaml('groups', 'user', true) // 强制刷新缓存

setYaml / setConfig

修改框架配置文件。

typescript
import { config } from 'node-karin'

/**
 * 修改框架配置
 * @param name - 文件名称,如'groups'、'privates'等
 * @param data - 配置数据,必须是一个对象
 * @returns 是否修改成功,布尔值
 */
// 两个函数功能相同
const success = config.setYaml('groups', { 
  // 配置内容
  default: {
    cd: 0,
    userCD: 0,
    mode: 0,
    alias: [],
    enable: ['plugin1', 'plugin2'],
    disable: [],
    member_enable: [],
    member_disable: []
  }
})

const success2 = config.setConfig('privates', { 
  // 配置内容
  default: {
    cd: 0,
    mode: 0,
    alias: [],
    enable: ['plugin1', 'plugin2'],
    disable: []
  }
})

clearFiles

清空指定目录下的所有文件,但不删除目录本身。

typescript
import { config } from 'node-karin'

/**
 * 清空指定目录下的全部文件
 * @param dir - 目录路径,字符串
 * @returns void
 */
config.clearFiles('/path/to/directory')

updateLevel

更新日志等级。

typescript
import { config } from 'node-karin'

/**
 * 更新日志等级
 * @param level - 日志等级,可选值为'debug'|'info'|'warn'|'error'|'fatal',如不提供则从环境变量读取
 * @returns 更新后的日志等级,字符串
 */
// 指定新的日志等级
const newLevel = config.updateLevel('debug')

// 从环境变量中读取日志等级
const currentLevel = config.updateLevel()

包信息配置 (pkg)

提供node-karin包的相关信息。

pkg

获取node-karin的package.json信息。

typescript
import { config } from 'node-karin'

/**
 * 获取node-karin的package.json
 * @returns package.json内容对象,包含version、name、dependencies等信息
 */
const packageInfo = config.pkg()
console.log(`当前版本: ${packageInfo.version}`)
console.log(`包名称: ${packageInfo.name}`)
console.log(`依赖列表: ${JSON.stringify(packageInfo.dependencies)}`)

配置文件操作子模块(file)

file子模块用于管理和操作各类配置文件,支持热更新、缓存、迁移等高级特性。所有API均可通过config.file命名空间访问。

1. adapter.json 适配器配置

typescript
import { config } from 'node-karin'

/**
 * 获取适配器配置(adapter.json)
 * @returns 适配器配置对象,包含adapters数组等信息
 */
const adapterConfig = config.adapter()

/**
 * 获取OneBot ws_server超时时间
 * @returns 超时时间(秒),数字类型
 */
const timeoutSeconds = config.timeout()

/**
 * 获取wsServer鉴权token
 * @returns token字符串
 */
const token = config.webSocketServerToken()

2. config.json 全局配置

typescript
import { config } from 'node-karin'

/**
 * 获取全局配置(config.json)
 * @returns 配置对象,包含master、admin、user、friend、group等配置项
 */
const globalConfig = config.config()

/**
 * 获取Bot主人列表
 * @returns 主人ID数组,字符串数组
 */
const masterList = config.master()

/**
 * 获取Bot管理员列表
 * @returns 管理员ID数组,字符串数组
 */
const adminList = config.admin()

4. groups.json 群聊/频道配置

typescript
import { config } from 'node-karin'

/**
 * 获取所有群聊/频道配置
 * @returns 配置对象,包含所有群聊和频道的配置信息
 */
const allGroupsConfig = config.groups()

/**
 * 获取指定群聊配置
 * @param groupId - 群号,字符串
 * @param selfId - 机器人ID,字符串
 * @returns 群聊配置对象,包含cd、userCD、mode、alias、enable、disable等信息
 */
const groupConfig = config.getGroupCfg('123456', '10001')

/**
 * 获取指定频道配置
 * @param guildId - 频道ID,字符串
 * @param channelId - 子频道ID,字符串
 * @param selfId - 机器人ID,字符串
 * @returns 频道配置对象,包含cd、userCD、mode、alias、enable、disable等信息
 */
const guildConfig = config.getGuildCfg('guild123', 'channel456', '10001')

5. privates.json 私聊/私信配置

typescript
import { config } from 'node-karin'

/**
 * 获取所有私聊配置
 * @returns 配置对象,包含所有私聊配置信息
 */
const allPrivatesConfig = config.privates()

/**
 * 获取指定好友配置
 * @param userId - 用户ID,字符串
 * @param selfId - 机器人ID,字符串
 * @returns 好友配置对象,包含cd、mode、alias、enable、disable等信息
 */
const friendConfig = config.getFriendCfg('user123', '10001')

/**
 * 获取指定频道私信配置
 * @param userId - 用户ID,字符串
 * @param selfId - 机器人ID,字符串
 * @returns 私信配置对象,包含cd、mode、alias、enable、disable等信息
 */
const directConfig = config.getDirectCfg('user123', '10001')

6. render.json 渲染配置

typescript
import { config } from 'node-karin'

/**
 * 获取渲染配置
 * @returns 渲染配置对象,包含渲染相关设置
 */
const renderConfig = config.getRenderCfg()

7. pm2.json 进程管理配置

typescript
import { config } from 'node-karin'

/**
 * 获取pm2配置
 * @returns pm2配置对象,包含apps数组、lines等配置
 */
const pm2Config = config.pm2()

8. redis.json Redis配置

typescript
import { config } from 'node-karin'

/**
 * 获取redis配置
 * @returns redis配置对象,包含url、username、password、database等信息
 */
const redisConfig = config.redis()

路径帮助函数

配置模块还提供了一系列路径获取函数:

typescript
import { config } from 'node-karin'

/**
 * 获取HTTP服务端口
 * @returns 端口号,数字类型,默认7777
 */
const httpPort = config.port()

/**
 * 获取HTTP服务主机
 * @returns 主机地址,字符串,默认127.0.0.1
 */
const httpHost = config.host()

/**
 * 获取鉴权密钥
 * @returns 鉴权密钥字符串,如果为默认值会生成随机密钥
 */
const authKeyValue = config.authKey()

/**
 * 获取FFmpeg相关路径
 * @returns 对应程序的路径字符串
 */
const ffmpeg = config.ffmpegPath()
const ffprobe = config.ffprobePath()
const ffplay = config.ffplayPath()
typescript
import { 
  config
} from 'node-karin'
import { karinPathConfig } from 'node-karin/root'

// 初始化配置
await config.initConfig(karinPathConfig)

// 读取现有配置
const groupConfig = config.getYaml('groups', 'user')
const globalConfig = config.file.config()

// 创建配置缓存系统
const configCache = {}
const accessCount = config.createCount()

// 获取用户配置
function getUserConfig(userId) {
  return config.getCacheCfg(
    configCache, 
    accessCount, 
    [`user.${userId}`, 'default.user']
  )
}

// 设置用户配置
function setUserConfig(userId, configData) {
  configCache[`user.${userId}`] = config.formatObject(configData)
  
  // 如果需要持久化
  if (configData.shouldPersist) {
    config.setConfig('users', {
      ...config.getYaml('users', 'user'),
      [userId]: configData
    })
  }
}

// 定期清理缓存
config.clearCache(accessCount, configCache)

所有配置API均支持热更新和缓存,推荐通过命名空间config访问所有配置功能。详细类型定义请参考源码或类型声明文件。