26 包 monorepo(TS 全源码): - snowcat-core: NT 内核 API 封装 + listener(含 9.9.37 六回调适配)+ Packet 发包 - snowcat-onebot: OneBot v11 全动作 + MCP Streamable HTTP 适配器 + 稳定线 - snowcat-webui-frontend/backend: 雪猫控制台(React+HeroUI) - snowcat-shell: 单文件 bundle 出口(vite inlineDynamicImports) - snowcat-native: napi2native / MoeHoo / ffmpeg / pty 运行时 - 56 项 SnowLuma 独门动作移植(qzone 全家桶/群相册/装扮/闪照/收藏) - 工具件: 解包器/启动器/便携制作器/doctor GitHub 关联已全量指向 DandanLLab/SnowCatQQ
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { ConfigBase } from '@/snowcat-core/helper/config-base';
|
|
import { SnowCatCore } from '@/snowcat-core/index';
|
|
import { Type, Static, TSchema } from '@sinclair/typebox';
|
|
|
|
import { Value } from '@sinclair/typebox/value';
|
|
|
|
import path from 'node:path';
|
|
import fs from 'node:fs';
|
|
import json5 from 'json5';
|
|
|
|
export const BypassOptionsSchema = Type.Object({
|
|
hook: Type.Boolean({ default: true }),
|
|
window: Type.Boolean({ default: true }),
|
|
module: Type.Boolean({ default: true }),
|
|
process: Type.Boolean({ default: true }),
|
|
container: Type.Boolean({ default: true }),
|
|
js: Type.Boolean({ default: true }),
|
|
});
|
|
|
|
export const SnowCatConfigSchema = Type.Object({
|
|
fileLog: Type.Boolean({ default: false }),
|
|
consoleLog: Type.Boolean({ default: true }),
|
|
fileLogLevel: Type.String({ default: 'debug' }),
|
|
consoleLogLevel: Type.String({ default: 'info' }),
|
|
packetBackend: Type.String({ default: 'auto' }),
|
|
packetServer: Type.String({ default: '' }),
|
|
o3HookMode: Type.Number({ default: 0 }),
|
|
autoTimeSync: Type.Boolean({ default: true }),
|
|
bypass: Type.Optional(BypassOptionsSchema),
|
|
});
|
|
|
|
export type SnowCatConfigFile = Static<typeof SnowCatConfigSchema>;
|
|
|
|
/**
|
|
* 从指定配置目录读取 napcat.json,按 SnowCatConfigSchema 校验并填充默认值
|
|
* 用于登录前(无 SnowCatCore 实例时)的早期配置读取
|
|
*/
|
|
export function loadSnowCatConfig (configPath: string): SnowCatConfigFile {
|
|
let data: Record<string, unknown> = {};
|
|
try {
|
|
const configFile = path.join(configPath, 'napcat.json');
|
|
if (fs.existsSync(configFile)) {
|
|
data = json5.parse(fs.readFileSync(configFile, 'utf-8'));
|
|
}
|
|
} catch {
|
|
// 读取失败时使用 schema 默认值
|
|
}
|
|
data = Value.Parse(SnowCatConfigSchema, data) as Record<string, unknown>;
|
|
return data as SnowCatConfigFile;
|
|
}
|
|
|
|
export class SnowCatConfigLoader extends ConfigBase<SnowCatConfigFile> {
|
|
constructor (core: SnowCatCore, configPath: string, schema: TSchema) {
|
|
super('napcat', core, configPath, schema);
|
|
}
|
|
}
|