mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-04 06:31:13 +00:00
Introduces an 'imageDownloadProxy' config option to OneBot, allowing image downloads via a specified HTTP proxy. Updates the file download logic in napcat-common to use the undici library for proxy support, and propagates the new config through backend, frontend, and type definitions. Also adds undici as a dependency.
136 lines
3.9 KiB
TypeScript
136 lines
3.9 KiB
TypeScript
import { Input } from '@heroui/input';
|
|
import { useEffect, useState } from 'react';
|
|
import { Controller, useForm } from 'react-hook-form';
|
|
import toast from 'react-hot-toast';
|
|
|
|
import SaveButtons from '@/components/button/save_buttons';
|
|
import PageLoading from '@/components/page_loading';
|
|
import SwitchCard from '@/components/switch_card';
|
|
|
|
import useConfig from '@/hooks/use-config';
|
|
|
|
const OneBotConfigCard = () => {
|
|
const { config, saveConfigWithoutNetwork, refreshConfig } = useConfig();
|
|
const [loading, setLoading] = useState(false);
|
|
const {
|
|
control,
|
|
handleSubmit: handleOnebotSubmit,
|
|
formState: { isSubmitting },
|
|
setValue: setOnebotValue,
|
|
} = useForm<IConfig['onebot']>({
|
|
defaultValues: {
|
|
musicSignUrl: '',
|
|
enableLocalFile2Url: false,
|
|
parseMultMsg: false,
|
|
imageDownloadProxy: '',
|
|
},
|
|
});
|
|
const reset = () => {
|
|
setOnebotValue('musicSignUrl', config.musicSignUrl);
|
|
setOnebotValue('enableLocalFile2Url', config.enableLocalFile2Url);
|
|
setOnebotValue('parseMultMsg', config.parseMultMsg);
|
|
setOnebotValue('imageDownloadProxy', config.imageDownloadProxy);
|
|
};
|
|
|
|
const onSubmit = handleOnebotSubmit(async (data) => {
|
|
try {
|
|
await saveConfigWithoutNetwork(data);
|
|
toast.success('保存成功');
|
|
} catch (error) {
|
|
const msg = (error as Error).message;
|
|
toast.error(`保存失败: ${msg}`);
|
|
}
|
|
});
|
|
|
|
const onRefresh = async (shotTip = true) => {
|
|
try {
|
|
setLoading(true);
|
|
await refreshConfig();
|
|
if (shotTip) toast.success('刷新成功');
|
|
} catch (error) {
|
|
const msg = (error as Error).message;
|
|
toast.error(`刷新失败: ${msg}`);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
reset();
|
|
}, [config]);
|
|
|
|
useEffect(() => {
|
|
onRefresh(false);
|
|
}, []);
|
|
|
|
if (loading) return <PageLoading loading />;
|
|
|
|
return (
|
|
<>
|
|
<title>OneBot配置 - NapCat WebUI</title>
|
|
<Controller
|
|
control={control}
|
|
name='musicSignUrl'
|
|
render={({ field }) => (
|
|
<Input
|
|
{...field}
|
|
label='音乐签名地址'
|
|
placeholder='请输入音乐签名地址'
|
|
classNames={{
|
|
inputWrapper:
|
|
'bg-default-100/50 dark:bg-white/5 backdrop-blur-md border border-transparent hover:bg-default-200/50 dark:hover:bg-white/10 transition-all shadow-sm data-[hover=true]:border-default-300',
|
|
input: 'bg-transparent text-default-700 placeholder:text-default-400',
|
|
}}
|
|
/>
|
|
)}
|
|
/>
|
|
<Controller
|
|
control={control}
|
|
name='enableLocalFile2Url'
|
|
render={({ field }) => (
|
|
<SwitchCard
|
|
{...field}
|
|
description='启用本地文件到URL'
|
|
label='启用本地文件到URL'
|
|
/>
|
|
)}
|
|
/>
|
|
<Controller
|
|
control={control}
|
|
name='parseMultMsg'
|
|
render={({ field }) => (
|
|
<SwitchCard
|
|
{...field}
|
|
description='启用上报解析合并消息'
|
|
label='启用上报解析合并消息'
|
|
/>
|
|
)}
|
|
/>
|
|
<Controller
|
|
control={control}
|
|
name='imageDownloadProxy'
|
|
render={({ field }) => (
|
|
<Input
|
|
{...field}
|
|
label='图片下载代理'
|
|
placeholder='请输入代理地址,如 http://127.0.0.1:7890'
|
|
classNames={{
|
|
inputWrapper:
|
|
'bg-default-100/50 dark:bg-white/5 backdrop-blur-md border border-transparent hover:bg-default-200/50 dark:hover:bg-white/10 transition-all shadow-sm data-[hover=true]:border-default-300',
|
|
input: 'bg-transparent text-default-700 placeholder:text-default-400',
|
|
}}
|
|
/>
|
|
)}
|
|
/>
|
|
<SaveButtons
|
|
onSubmit={onSubmit}
|
|
reset={reset}
|
|
isSubmitting={isSubmitting}
|
|
refresh={onRefresh}
|
|
/>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default OneBotConfigCard;
|