diff --git a/src/onebot/config/config.ts b/src/onebot/config/config.ts new file mode 100644 index 00000000..ce2fe955 --- /dev/null +++ b/src/onebot/config/config.ts @@ -0,0 +1,113 @@ +export interface AdapterConfig { + name: string; + enabled: boolean; + [key: string]: any; +} + +const createDefaultAdapterConfig = (config: T): T => config; + +const httpServerDefaultConfigs = createDefaultAdapterConfig({ + name: 'http-server', + enabled: false, + port: '3000', + host: '0.0.0.0', + enableCors: true, + enableWebsocket: true, + messagePostFormat: 'array', + reportSelfMessage: false, + token: '', + debug: false, +}); +export type HttpServerConfig = typeof httpServerDefaultConfigs; + +const httpClientDefaultConfigs = createDefaultAdapterConfig({ + name: 'http-client', + enabled: false, + url: 'http://localhost:8080', + messagePostFormat: 'array', + reportSelfMessage: false, + token: '', + debug: false, +}); +export type HttpClientConfig = typeof httpClientDefaultConfigs; + +const websocketServerDefaultConfigs = createDefaultAdapterConfig({ + name: 'websocket-server', + enabled: false, + host: '0.0.0.0', + port: '3002', + messagePostFormat: 'array', + reportSelfMessage: false, + token: '', + enablePushEvent: true, + debug: false, + heartInterval: 0, +}); +export type WebsocketServerConfig = typeof websocketServerDefaultConfigs; + +const websocketClientDefaultConfigs = createDefaultAdapterConfig({ + name: 'websocket-client', + enabled: false, + url: 'ws://localhost:8082', + messagePostFormat: 'array', + reportSelfMessage: false, + token: '', + debug: false, + heartInterval: 0, +}); +export type WebsocketClientConfig = typeof websocketClientDefaultConfigs; + +export interface NetworkConfig { + httpServers: Array, + httpClients: Array, + websocketServers: Array, + websocketClients: Array, +}; + +export function mergeConfigs(defaultConfig: T, userConfig: Partial): T { + return { ...defaultConfig, ...userConfig }; +} + +export interface OnebotConfig { + network: NetworkConfig;//网络配置 + musicSignUrl: string;//音乐签名地址 +} + +const createDefaultConfig = (config: T): T => config; + +export const defaultOnebotConfig = createDefaultConfig({ + network: { + httpServers: [], + httpClients: [], + websocketServers: [], + websocketClients: [], + }, + musicSignUrl: "" +}) +export const mergeNetworkDefaultConfig = { + httpServers: httpServerDefaultConfigs, + httpClients: httpClientDefaultConfigs, + websocketServers: websocketServerDefaultConfigs, + websocketClients: websocketClientDefaultConfigs, +} as const; + +type NetworkConfigKeys = keyof typeof mergeNetworkDefaultConfig; + +export function mergeOnebotConfigs(defaultConfig: OnebotConfig, userConfig: Partial): OnebotConfig { + const mergedConfig = { ...defaultConfig }; + + if (userConfig.network) { + mergedConfig.network = { ...defaultConfig.network }; + for (const key in userConfig.network) { + const userNetworkConfig = userConfig.network[key as keyof NetworkConfig]; + const defaultNetworkConfig = mergeNetworkDefaultConfig[key as NetworkConfigKeys]; + if (Array.isArray(userNetworkConfig)) { + mergedConfig.network[key as keyof NetworkConfig] = userNetworkConfig.map(e => mergeConfigs(defaultNetworkConfig, e)); + } + } + } + if (userConfig.musicSignUrl !== undefined) { + mergedConfig.musicSignUrl = userConfig.musicSignUrl; + } + return mergedConfig; +} \ No newline at end of file diff --git a/src/onebot/nnetwork/config.ts b/src/onebot/nnetwork/config.ts deleted file mode 100644 index fe543ec2..00000000 --- a/src/onebot/nnetwork/config.ts +++ /dev/null @@ -1,56 +0,0 @@ -export interface AdapterConfig { - type: string; // websocket-client, websocket-server, http-server, http-client - enabled: boolean; - [key: string]: any; -} - -const createDefaultConfig = (config: T): T => config; - -export const httpServerDefaultConfig = createDefaultConfig({ - type: 'http-server', - enabled: false, - port: '3000', - host: '0.0.0.0', - enableCors: true, - enableWebsocket: true, - messagePostFormat: 'array', - reportSelfMessage: false, - token: '', -}); - -export const httpClientDefaultConfig = createDefaultConfig({ - type: 'http-client', - enabled: false, - url: 'http://localhost:8080', - messagePostFormat: 'array', - reportSelfMessage: false, - token: '', -}); - -export const websocketServerDefaultConfig = createDefaultConfig({ - type: 'websocket-server', - enabled: false, - host: '0.0.0.0', - port: '3001', - messagePostFormat: 'array', - reportSelfMessage: false, - token: '', -}); - -export const websocketClientDefaultConfig = createDefaultConfig({ - type: 'websocket-client', - enabled: false, - url: 'ws://localhost:8082', - messagePostFormat: 'array', - reportSelfMessage: false, - token: '', -}); - -export type HttpServerConfig = typeof httpServerDefaultConfig; -export type HttpClientConfig = typeof httpClientDefaultConfig; -export type WebsocketServerConfig = typeof websocketServerDefaultConfig; -export type WebsocketClientConfig = typeof websocketClientDefaultConfig; - -export function mergeConfigs(defaultConfig: T, userConfig: Partial): T { - return { ...defaultConfig, ...userConfig }; -} \ No newline at end of file