feat: add migrateOneBotConfigsV2

This commit is contained in:
pk5ls20 2024-11-16 06:52:18 +08:00
parent 609e83a824
commit 4271acc6ab
No known key found for this signature in database
GPG Key ID: 6370ED7A169F493A
4 changed files with 98 additions and 12 deletions

View File

@ -48,7 +48,6 @@ import {
WebsocketServerConfig,
NetworkConfig,
OneBotConfig,
defaultOneBotConfigs,
mergeOneBotConfigs,
} from '../../../src/onebot/config/config';
import { QQLoginManager } from '@/backend/shell';
@ -89,6 +88,7 @@ interface ClientPanel {
type ComponentKey = keyof typeof componentMap;
// TODO: store these state in global store (aka pinia)
const activeTab = ref<number>(0);
const isDialogVisible = ref(false);
const newTab = ref<{ name: string; type: ComponentKey }>({ name: '', type: 'httpServers' });
@ -151,7 +151,7 @@ const loadConfig = async () => {
try {
const userConfig = await getOB11Config();
if (!userConfig) return;
const mergedConfig = mergeOneBotConfigs(defaultOneBotConfigs, userConfig);
const mergedConfig = mergeOneBotConfigs(userConfig);
addConfigDataToPanel(mergedConfig.network);
} catch (error) {
console.error('Error loading config:', error);

View File

@ -7,7 +7,7 @@
"build:framework": "npm run build:webui && vite build --mode framework",
"build:shell": "npm run build:webui && vite build --mode shell",
"build:webui": "cd napcat.webui && vite build",
"lint": "eslint --fix src/**/*.{js,ts}",
"lint": "eslint --fix src/**/*.{js,ts,vue}",
"depend": "cd dist && npm install --omit=dev"
},
"devDependencies": {

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,
@ -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),