feat: add migrateOneBotConfigsV2

This commit is contained in:
pk5ls20
2024-11-16 06:52:18 +08:00
parent 609e83a824
commit 4271acc6ab
4 changed files with 98 additions and 12 deletions

View File

@@ -1,3 +1,31 @@
interface v1Config {
http: {
enable: boolean;
host: string;
port: number;
secret: string;
enableHeart: boolean;
enablePost: boolean;
postUrls: string[];
};
ws: {
enable: boolean;
host: string;
port: number;
};
reverseWs: {
enable: boolean;
urls: string[];
};
debug: boolean;
heartInterval: number;
messagePostFormat: string;
enableLocalFile2Url: boolean;
musicSignUrl: string;
reportSelfMessage: boolean;
token: string;
}
export interface AdapterConfig {
name: string;
enable: boolean;
@@ -8,7 +36,7 @@ const createDefaultAdapterConfig = <T extends AdapterConfig>(config: T): T => co
export const httpServerDefaultConfigs = createDefaultAdapterConfig({
name: 'http-server',
enable: false,
enable: false as boolean,
port: 3000,
host: '0.0.0.0',
enableCors: true,
@@ -22,7 +50,7 @@ export type HttpServerConfig = typeof httpServerDefaultConfigs;
export const httpClientDefaultConfigs = createDefaultAdapterConfig({
name: 'http-client',
enable: false,
enable: false as boolean,
url: 'http://localhost:8080',
messagePostFormat: 'array',
reportSelfMessage: false,
@@ -33,7 +61,7 @@ export type HttpClientConfig = typeof httpClientDefaultConfigs;
export const websocketServerDefaultConfigs = createDefaultAdapterConfig({
name: 'websocket-server',
enable: false,
enable: false as boolean,
host: '0.0.0.0',
port: 3002,
messagePostFormat: 'array',
@@ -47,7 +75,7 @@ export type WebsocketServerConfig = typeof websocketServerDefaultConfigs;
export const websocketClientDefaultConfigs = createDefaultAdapterConfig({
name: 'websocket-client',
enable: false,
enable: false as boolean,
url: 'ws://localhost:8082',
messagePostFormat: 'array',
reportSelfMessage: false,
@@ -69,8 +97,8 @@ export function mergeConfigs<T extends AdapterConfig>(defaultConfig: T, userConf
}
export interface OneBotConfig {
network: NetworkConfig; //网络配置
musicSignUrl: string; //音乐签名地址
network: NetworkConfig; // 网络配置
musicSignUrl: string; // 音乐签名地址
enableLocalFile2Url: boolean;
}
@@ -97,7 +125,10 @@ export const mergeNetworkDefaultConfig = {
type NetworkConfigKeys = keyof typeof mergeNetworkDefaultConfig;
// TODO: wrong type hint in userConfig (aka old userConfig)
export function mergeOneBotConfigs(defaultConfig: OneBotConfig, userConfig: Partial<OneBotConfig>): OneBotConfig {
export function mergeOneBotConfigs(
userConfig: Partial<OneBotConfig>,
defaultConfig: OneBotConfig = defaultOneBotConfigs
): OneBotConfig {
const mergedConfig = { ...defaultConfig };
if (userConfig.network) {
@@ -117,3 +148,58 @@ export function mergeOneBotConfigs(defaultConfig: OneBotConfig, userConfig: Part
}
return mergedConfig;
}
export function migrateOneBotConfigsV1(
v1Config: Partial<v1Config>,
defaultConfig: OneBotConfig = defaultOneBotConfigs
): OneBotConfig {
const mergedConfig = { ...defaultConfig };
if (v1Config.http) {
mergedConfig.network.httpServers = [
mergeConfigs(httpServerDefaultConfigs, {
enable: v1Config.http.enable,
port: v1Config.http.port,
host: v1Config.http.host,
token: v1Config.http.secret,
debug: v1Config.debug,
messagePostFormat: v1Config.messagePostFormat,
reportSelfMessage: v1Config.reportSelfMessage,
}),
];
}
if (v1Config.ws) {
mergedConfig.network.websocketServers = [
mergeConfigs(websocketServerDefaultConfigs, {
enable: v1Config.ws.enable,
port: v1Config.ws.port,
host: v1Config.ws.host,
token: v1Config.token,
debug: v1Config.debug,
messagePostFormat: v1Config.messagePostFormat,
reportSelfMessage: v1Config.reportSelfMessage,
}),
];
}
if (v1Config.reverseWs) {
mergedConfig.network.websocketClients = v1Config.reverseWs.urls.map((url) =>
mergeConfigs(websocketClientDefaultConfigs, {
enable: v1Config.reverseWs?.enable,
url: url,
token: v1Config.token,
debug: v1Config.debug,
messagePostFormat: v1Config.messagePostFormat,
reportSelfMessage: v1Config.reportSelfMessage,
})
);
}
if (v1Config.heartInterval) {
mergedConfig.network.websocketServers[0].heartInterval = v1Config.heartInterval;
}
if (v1Config.musicSignUrl) {
mergedConfig.musicSignUrl = v1Config.musicSignUrl;
}
if (v1Config.enableLocalFile2Url) {
mergedConfig.enableLocalFile2Url = v1Config.enableLocalFile2Url;
}
return mergedConfig;
}

View File

@@ -45,7 +45,7 @@ import { OB11GroupRecallNoticeEvent } from '@/onebot/event/notice/OB11GroupRecal
import { LRUCache } from '@/common/lru-cache';
import { NodeIKernelRecentContactListener } from '@/core/listeners/NodeIKernelRecentContactListener';
import { BotOfflineEvent } from './event/notice/BotOfflineEvent';
import { defaultOneBotConfigs, mergeOneBotConfigs, OneBotConfig } from './config/config';
import { mergeOneBotConfigs, migrateOneBotConfigsV1, OneBotConfig } from './config/config';
import { OB11Message } from './types';
//OneBot实现类
@@ -64,7 +64,7 @@ export class NapCatOneBot11Adapter {
this.core = core;
this.context = context;
this.configLoader = new OB11ConfigLoader(core, pathWrapper.configPath);
this.configLoader.save(mergeOneBotConfigs(defaultOneBotConfigs, this.configLoader.configData));
this.configLoader.save(mergeOneBotConfigs(migrateOneBotConfigsV1(this.configLoader.configData)));
this.apis = {
GroupApi: new OneBotGroupApi(this, core),
UserApi: new OneBotUserApi(this, core),