mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: mergeOnebotConfigs
This commit is contained in:
parent
621e41cc96
commit
a0a50755d3
113
src/onebot/config/config.ts
Normal file
113
src/onebot/config/config.ts
Normal file
@ -0,0 +1,113 @@
|
||||
export interface AdapterConfig {
|
||||
name: string;
|
||||
enabled: boolean;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
const createDefaultAdapterConfig = <T extends AdapterConfig>(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<HttpServerConfig>,
|
||||
httpClients: Array<HttpClientConfig>,
|
||||
websocketServers: Array<WebsocketServerConfig>,
|
||||
websocketClients: Array<WebsocketClientConfig>,
|
||||
};
|
||||
|
||||
export function mergeConfigs<T extends AdapterConfig>(defaultConfig: T, userConfig: Partial<T>): T {
|
||||
return { ...defaultConfig, ...userConfig };
|
||||
}
|
||||
|
||||
export interface OnebotConfig {
|
||||
network: NetworkConfig;//网络配置
|
||||
musicSignUrl: string;//音乐签名地址
|
||||
}
|
||||
|
||||
const createDefaultConfig = <T>(config: T): T => config;
|
||||
|
||||
export const defaultOnebotConfig = createDefaultConfig<OnebotConfig>({
|
||||
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>): 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<any>(e => mergeConfigs(defaultNetworkConfig, e));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (userConfig.musicSignUrl !== undefined) {
|
||||
mergedConfig.musicSignUrl = userConfig.musicSignUrl;
|
||||
}
|
||||
return mergedConfig;
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
export interface AdapterConfig {
|
||||
type: string; // websocket-client, websocket-server, http-server, http-client
|
||||
enabled: boolean;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
const createDefaultConfig = <T extends AdapterConfig>(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<T extends AdapterConfig>(defaultConfig: T, userConfig: Partial<T>): T {
|
||||
return { ...defaultConfig, ...userConfig };
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user