import { updateConfig as storeUpdateConfig } from '@/store/modules/config'; import { deepClone } from '@/utils/object'; import QQManager from '@/controllers/qq_manager'; import { useAppDispatch, useAppSelector } from './use-store'; const useConfig = () => { const config = useAppSelector((state) => state.config.value); const dispatch = useAppDispatch(); const createNetworkConfig = async ( key: T, value: OneBotConfig['network'][T][0] ) => { const allNetworkNames = Object.keys(config.network).reduce((acc, key) => { const _key = key as keyof OneBotConfig['network']; return acc.concat(config.network[_key].map((item) => item.name)); }, [] as string[]); if (value.name && allNetworkNames.includes(value.name)) { throw new Error('已经存在相同的配置项名'); } const newConfig = deepClone(config) ;(newConfig.network[key] as (typeof value)[]).push(value); await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const updateNetworkConfig = async ( key: T, value: OneBotConfig['network'][T][0] ) => { const newConfig = deepClone(config); const name = value.name; const index = newConfig.network[key].findIndex((item) => item.name === name); if (index === -1) { throw new Error('找不到对应的配置项'); } newConfig.network[key][index] = value; await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const deleteNetworkConfig = async ( key: T, name: string ) => { const newConfig = deepClone(config); const index = newConfig.network[key].findIndex((item) => item.name === name); if (index === -1) { throw new Error('找不到对应的配置项'); } newConfig.network[key].splice(index, 1); await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const enableNetworkConfig = async ( key: T, name: string ) => { const newConfig = deepClone(config); const index = newConfig.network[key].findIndex((item) => item.name === name); if (index === -1) { throw new Error('找不到对应的配置项'); } newConfig.network[key][index].enable = !newConfig.network[key][index].enable; await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const enableDebugNetworkConfig = async < T extends keyof OneBotConfig['network'] >( key: T, name: string ) => { const newConfig = deepClone(config); const index = newConfig.network[key].findIndex((item) => item.name === name); if (index === -1) { throw new Error('找不到对应的配置项'); } newConfig.network[key][index].debug = !newConfig.network[key][index].debug; await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const updateSingleConfig = async ( key: T, value: OneBotConfig[T] ) => { const newConfig = deepClone(config); newConfig[key] = value; await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const updateConfig = async (newConfig: OneBotConfig) => { await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const refreshConfig = async () => { const newConfig = await QQManager.getOB11Config(); if (JSON.stringify(newConfig) === JSON.stringify(config)) { return config; } dispatch(storeUpdateConfig(newConfig)); return newConfig; }; const mergeConfig = async (newConfig: OneBotConfig) => { const mergedConfig = deepClone(config); Object.assign(mergedConfig, newConfig); await QQManager.setOB11Config(mergedConfig); dispatch(storeUpdateConfig(mergedConfig)); return mergedConfig; }; const saveConfigWithoutNetwork = async (newConfig: OneBotConfig) => { newConfig.network = config.network; await QQManager.setOB11Config(newConfig); dispatch(storeUpdateConfig(newConfig)); return newConfig; }; return { config, createNetworkConfig, refreshConfig, updateConfig, updateSingleConfig, updateNetworkConfig, deleteNetworkConfig, enableNetworkConfig, enableDebugNetworkConfig, mergeConfig, saveConfigWithoutNetwork, }; }; export default useConfig;