From 330b086b8bf765a960b2bc5fba7b0af99f70f8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Mon, 29 Jul 2024 09:10:52 +0800 Subject: [PATCH] fix #98 --- src/common/server/websocket.ts | 10 +-- src/common/utils/ConfigBase.ts | 18 +++--- src/common/utils/EventTask.ts | 2 +- src/common/utils/MessageUnique.ts | 4 +- src/common/utils/helper.ts | 2 +- .../action/extends/FetchCustomFace.ts | 2 +- src/onebot11/action/file/GetFile.ts | 18 +++--- .../action/go-cqhttp/GetGroupMsgHistory.ts | 4 +- .../action/go-cqhttp/UploadPrivareFile.ts | 64 +++++++++---------- .../action/group/GetGroupMemberInfo.ts | 4 +- .../action/group/GetGroupMemberList.ts | 4 +- .../msg/SendMsg/create-send-elements.ts | 4 +- .../action/msg/SendMsg/handle-forward-node.ts | 2 +- src/onebot11/action/types.ts | 4 +- src/onebot11/config.ts | 2 +- src/onebot11/constructor.ts | 63 +++++++++--------- src/onebot11/main.ts | 10 +-- src/webui/src/helper/config.ts | 16 ++--- 18 files changed, 119 insertions(+), 114 deletions(-) diff --git a/src/common/server/websocket.ts b/src/common/server/websocket.ts index 9f0bf69e..fe1c4895 100644 --- a/src/common/server/websocket.ts +++ b/src/common/server/websocket.ts @@ -32,17 +32,17 @@ export class WebsocketServerBase { if (port instanceof http.Server) { try { const wss = new WebSocketServer({ - noServer: true, - maxPayload: 1024 * 1024 * 1024 - }).on('error', () => { - }); + noServer: true, + maxPayload: 1024 * 1024 * 1024 + }).on('error', () => { + }); this.ws = wss; port.on('upgrade', function upgrade(request, socket, head) { wss.handleUpgrade(request, socket, head, function done(ws) { wss.emit('connection', ws, request); }); }); - log(`ws服务启动成功, 绑定到HTTP服务`); + log('ws服务启动成功, 绑定到HTTP服务'); } catch (e: any) { throw Error('ws服务启动失败, 可能是绑定的HTTP服务异常' + e.toString()); } diff --git a/src/common/utils/ConfigBase.ts b/src/common/utils/ConfigBase.ts index 87ba0f30..62aaf7ea 100644 --- a/src/common/utils/ConfigBase.ts +++ b/src/common/utils/ConfigBase.ts @@ -14,8 +14,8 @@ fs.mkdirSync(configDir, { recursive: true }); export class ConfigBase { - public name: string = 'default_config' - private pathName: string | null = null // 本次读取的文件路径 + public name: string = 'default_config'; + private pathName: string | null = null; // 本次读取的文件路径 constructor() { } @@ -30,21 +30,21 @@ export class ConfigBase { return configDir; } getConfigPath(pathName: string | null): string { - const suffix = pathName ? `_${pathName}` : '' - const filename = `${this.name}${suffix}.json` + const suffix = pathName ? `_${pathName}` : ''; + const filename = `${this.name}${suffix}.json`; return path.join(this.getConfigDir(), filename); } read() { // 尝试加载当前账号配置 - if (this.read_from_file(selfInfo.uin, false)) return this + if (this.read_from_file(selfInfo.uin, false)) return this; // 尝试加载默认配置 - return this.read_from_file('', true) + return this.read_from_file('', true); } read_from_file(pathName: string, createIfNotExist: boolean) { const configPath = this.getConfigPath(pathName); if (!fs.existsSync(configPath)) { - if (!createIfNotExist) return null - this.pathName = pathName // 记录有效的设置文件 + if (!createIfNotExist) return null; + this.pathName = pathName; // 记录有效的设置文件 try { fs.writeFileSync(configPath, JSON.stringify(this, this.getKeys(), 2)); log(`配置文件${configPath}已创建\n如果修改此文件后需要重启 NapCat 生效`); @@ -77,7 +77,7 @@ export class ConfigBase { Object.assign(this, config); if (overwrite) { // 用户要求强制写入,则变更当前文件为目标文件 - this.pathName = `${selfInfo.uin}` + this.pathName = `${selfInfo.uin}`; } const configPath = this.getConfigPath(this.pathName); try { diff --git a/src/common/utils/EventTask.ts b/src/common/utils/EventTask.ts index dcb15561..a6d110b2 100644 --- a/src/common/utils/EventTask.ts +++ b/src/common/utils/EventTask.ts @@ -150,7 +150,7 @@ export class NTEventWrapper { }); } async CallNormalEvent Promise, ListenerType extends (...args: any[]) => void> - (EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, checker: (...args: Parameters) => boolean, ...args: Parameters) { + (EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, checker: (...args: Parameters) => boolean, ...args: Parameters) { return new Promise<[EventRet: Awaited>, ...Parameters]>(async (resolve, reject) => { const id = randomUUID(); let complete = 0; diff --git a/src/common/utils/MessageUnique.ts b/src/common/utils/MessageUnique.ts index c5ee592c..b1c50f10 100644 --- a/src/common/utils/MessageUnique.ts +++ b/src/common/utils/MessageUnique.ts @@ -93,8 +93,8 @@ class MessageUniqueWrapper { if (!heads) { return []; } - let data = heads.map((t) => MessageUnique.getMsgIdAndPeerByShortId(t.value)); - let ret = data.filter((t) => t?.Peer.chatType === Peer.chatType && t?.Peer.peerUid === Peer.peerUid); + const data = heads.map((t) => MessageUnique.getMsgIdAndPeerByShortId(t.value)); + const ret = data.filter((t) => t?.Peer.chatType === Peer.chatType && t?.Peer.peerUid === Peer.peerUid); return ret.map((t) => t?.MsgId).filter((t) => t !== undefined); } createMsg(peer: Peer, msgId: string): number | undefined { diff --git a/src/common/utils/helper.ts b/src/common/utils/helper.ts index 9b653c7a..63273770 100644 --- a/src/common/utils/helper.ts +++ b/src/common/utils/helper.ts @@ -14,7 +14,7 @@ export function sleep(ms: number): Promise { export function PromiseTimer(promise: Promise, ms: number): Promise { const timeoutPromise = new Promise((_, reject) => - setTimeout(() => reject(new Error("PromiseTimer: Operation timed out")), ms) + setTimeout(() => reject(new Error('PromiseTimer: Operation timed out')), ms) ); return Promise.race([promise, timeoutPromise]); } diff --git a/src/onebot11/action/extends/FetchCustomFace.ts b/src/onebot11/action/extends/FetchCustomFace.ts index 5edf95e5..0b1a116e 100644 --- a/src/onebot11/action/extends/FetchCustomFace.ts +++ b/src/onebot11/action/extends/FetchCustomFace.ts @@ -15,7 +15,7 @@ export class FetchCustomFace extends BaseAction { actionName = ActionName.FetchCustomFace; PayloadSchema = SchemaData; protected async _handle(payload: Payload) { - let ret = await NTQQMsgApi.fetchFavEmojiList(payload.count || 48); + const ret = await NTQQMsgApi.fetchFavEmojiList(payload.count || 48); return ret.emojiInfoList.map(e => e.url); } } diff --git a/src/onebot11/action/file/GetFile.ts b/src/onebot11/action/file/GetFile.ts index 6ff1d878..5a866bbc 100644 --- a/src/onebot11/action/file/GetFile.ts +++ b/src/onebot11/action/file/GetFile.ts @@ -48,7 +48,7 @@ export class GetFileBase extends BaseAction { const { enableLocalFile2Url } = ob11Config; const NTSearchNameResult = (await NTQQFileApi.searchfile([payload.file])).resultItems; if (NTSearchNameResult.length !== 0) { - let MsgId = NTSearchNameResult[0].msgId; + const MsgId = NTSearchNameResult[0].msgId; let peer: Peer | undefined = undefined; if (NTSearchNameResult[0].chatType == ChatType.group) { peer = { chatType: ChatType.group, peerUid: NTSearchNameResult[0].groupChatInfo[0].groupCode }; @@ -56,12 +56,12 @@ export class GetFileBase extends BaseAction { if (!peer) { throw new Error('chattype not support'); } - let msgList: RawMessage[] = (await NTQQMsgApi.getMsgsByMsgId(peer, [MsgId]))?.msgList; + const msgList: RawMessage[] = (await NTQQMsgApi.getMsgsByMsgId(peer, [MsgId]))?.msgList; if (!msgList || msgList.length == 0) { throw new Error('msg not found'); } - let msg = msgList[0]; - let file = msg.elements.filter(e => e.elementType == NTSearchNameResult[0].elemType); + const msg = msgList[0]; + const file = msg.elements.filter(e => e.elementType == NTSearchNameResult[0].elemType); if (file.length == 0) { throw new Error('file not found'); } @@ -73,11 +73,11 @@ export class GetFileBase extends BaseAction { file_name: NTSearchNameResult[0].fileName }; if (enableLocalFile2Url) { - try { - res.base64 = await fs.readFile(downloadPath, 'base64'); - } catch (e) { - throw new Error('文件下载失败. ' + e); - } + try { + res.base64 = await fs.readFile(downloadPath, 'base64'); + } catch (e) { + throw new Error('文件下载失败. ' + e); + } } //不手动删除?文件持久化了 return res; diff --git a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts index b6660efb..ddc061ed 100644 --- a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts @@ -35,9 +35,9 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction; export default class GoCQHTTPUploadPrivateFile extends BaseAction { - actionName = ActionName.GOCQHTTP_UploadPrivateFile; - PayloadSchema = SchemaData; - async getPeer(payload: Payload): Promise { - if (payload.user_id) { - const peerUid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); - if (!peerUid) { - throw `私聊${payload.user_id}不存在`; - } - const isBuddy = await NTQQFriendApi.isBuddy(peerUid); - return { chatType: isBuddy ? ChatType.friend : ChatType.temp, peerUid }; - } - throw '缺少参数 user_id'; + actionName = ActionName.GOCQHTTP_UploadPrivateFile; + PayloadSchema = SchemaData; + async getPeer(payload: Payload): Promise { + if (payload.user_id) { + const peerUid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); + if (!peerUid) { + throw `私聊${payload.user_id}不存在`; + } + const isBuddy = await NTQQFriendApi.isBuddy(peerUid); + return { chatType: isBuddy ? ChatType.friend : ChatType.temp, peerUid }; } - protected async _handle(payload: Payload): Promise { - let peer = await this.getPeer(payload); - let file = payload.file; - if (fs.existsSync(file)) { - file = `file://${file}`; - } - const downloadResult = await uri2local(file); - if (downloadResult.errMsg) { - throw new Error(downloadResult.errMsg); - } - const sendFileEle: SendFileElement = await SendMsgElementConstructor.file(downloadResult.path, payload.name); - await sendMsg(peer, [sendFileEle], [], true); - return null; + throw '缺少参数 user_id'; + } + protected async _handle(payload: Payload): Promise { + const peer = await this.getPeer(payload); + let file = payload.file; + if (fs.existsSync(file)) { + file = `file://${file}`; } + const downloadResult = await uri2local(file); + if (downloadResult.errMsg) { + throw new Error(downloadResult.errMsg); + } + const sendFileEle: SendFileElement = await SendMsgElementConstructor.file(downloadResult.path, payload.name); + await sendMsg(peer, [sendFileEle], [], true); + return null; + } } diff --git a/src/onebot11/action/group/GetGroupMemberInfo.ts b/src/onebot11/action/group/GetGroupMemberInfo.ts index 4a1bbc41..1abb63e1 100644 --- a/src/onebot11/action/group/GetGroupMemberInfo.ts +++ b/src/onebot11/action/group/GetGroupMemberInfo.ts @@ -59,9 +59,9 @@ class GetGroupMemberInfo extends BaseAction { } } } else { - let LastestMsgList = await NTQQGroupApi.getLastestMsg(payload.group_id.toString(), [payload.user_id.toString()]); + const LastestMsgList = await NTQQGroupApi.getLastestMsg(payload.group_id.toString(), [payload.user_id.toString()]); if (LastestMsgList?.msgList?.length && LastestMsgList?.msgList?.length > 0) { - let last_send_time = LastestMsgList.msgList[0].msgTime; + const last_send_time = LastestMsgList.msgList[0].msgTime; if (last_send_time && last_send_time != '0' && last_send_time != '') { retMember.last_sent_time = parseInt(last_send_time); retMember.join_time = Math.round(Date.now() / 1000);//兜底数据 防止群管乱杀 diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index d49b405e..e3d8058c 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -39,7 +39,7 @@ class GetGroupMemberList extends BaseAction { const MemberMap: Map = new Map(); // 转为Map 方便索引 - let date = Math.round(Date.now() / 1000); + const date = Math.round(Date.now() / 1000); for (let i = 0, len = _groupMembers.length; i < len; i++) { // 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 _groupMembers[i].join_time = date; @@ -65,7 +65,7 @@ class GetGroupMemberList extends BaseAction { } } else { const DateMap = await NTQQGroupApi.getGroupMemberLastestSendTimeCache(payload.group_id.toString());//开始从本地拉取 - for (let DateUin of DateMap.keys()) { + for (const DateUin of DateMap.keys()) { const MemberData = MemberMap.get(parseInt(DateUin)); if (MemberData) { MemberData.last_sent_time = parseInt(DateMap.get(DateUin)!); diff --git a/src/onebot11/action/msg/SendMsg/create-send-elements.ts b/src/onebot11/action/msg/SendMsg/create-send-elements.ts index b2502fc6..b307bf2b 100644 --- a/src/onebot11/action/msg/SendMsg/create-send-elements.ts +++ b/src/onebot11/action/msg/SendMsg/create-send-elements.ts @@ -213,7 +213,7 @@ export default async function createSendElements( ignoreTypes: OB11MessageDataType[] = [] ) { const deleteAfterSentFiles: string[] = []; - let callResultList: Array> = []; + const callResultList: Array> = []; for (const sendMsg of messageData) { if (ignoreTypes.includes(sendMsg.type)) { continue; @@ -224,7 +224,7 @@ export default async function createSendElements( )?.catch(undefined); callResultList.push(callResult); } - let ret = await Promise.all(callResultList); + const ret = await Promise.all(callResultList); const sendElements: SendMessageElement[] = ret.filter(ele => ele) as SendMessageElement[]; return { sendElements, deleteAfterSentFiles }; } diff --git a/src/onebot11/action/msg/SendMsg/handle-forward-node.ts b/src/onebot11/action/msg/SendMsg/handle-forward-node.ts index 138b0513..755cda97 100644 --- a/src/onebot11/action/msg/SendMsg/handle-forward-node.ts +++ b/src/onebot11/action/msg/SendMsg/handle-forward-node.ts @@ -127,7 +127,7 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag } } } - // logDebug('nodeMsgArray', nodeMsgArray); + // logDebug('nodeMsgArray', nodeMsgArray); nodeMsgIds = nodeMsgArray.map(msg => msg.msgId); if (needSendSelf) { //logDebug('需要克隆转发消息'); diff --git a/src/onebot11/action/types.ts b/src/onebot11/action/types.ts index 60c2a5c7..e6b6f512 100644 --- a/src/onebot11/action/types.ts +++ b/src/onebot11/action/types.ts @@ -99,7 +99,7 @@ export enum ActionName { GetRecentContact = 'get_recent_contact', _MarkAllMsgAsRead = '_mark_all_as_read', GetProfileLike = 'get_profile_like', - SetGroupHeader = "set_group_head", - FetchCustomFace = "fetch_custom_face", + SetGroupHeader = 'set_group_head', + FetchCustomFace = 'fetch_custom_face', GOCQHTTP_UploadPrivateFile = 'upload_private_file' } diff --git a/src/onebot11/config.ts b/src/onebot11/config.ts index 8bce5c1b..9ff7b4e9 100644 --- a/src/onebot11/config.ts +++ b/src/onebot11/config.ts @@ -42,7 +42,7 @@ export interface OB11Config { } class Config extends ConfigBase implements OB11Config { - name: string = 'onebot11' + name: string = 'onebot11'; http = { enable: false, host: '', diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index a3555fa0..71a2f686 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -12,12 +12,12 @@ import { import { AtType, ChatType, - ElementType, FaceIndex, + FaceIndex, Friend, GrayTipElementSubType, Group, GroupMember, - IMAGE_HTTP_HOST, IMAGE_HTTP_HOST_NT, mFaceCache, + mFaceCache, Peer, RawMessage, SelfInfo, @@ -76,7 +76,12 @@ export class OB11Constructor { if (msg.chatType == ChatType.group) { resMsg.sub_type = 'normal'; // 这里go-cqhttp是group,而onebot11标准是normal, 蛋疼 resMsg.group_id = parseInt(msg.peerUin); - const member = await getGroupMember(msg.peerUin, msg.senderUin!); + let member = await getGroupMember(msg.peerUin, msg.senderUin!); + if (!member) { + //直接去QQNative取 + const memberList = await NTQQGroupApi.getGroupMembers(msg.peerUin); + member = memberList.get(msg.senderUin!); + } if (member) { resMsg.sender.role = OB11Constructor.groupMemberRole(member.role); resMsg.sender.nickname = member.nick; @@ -138,12 +143,12 @@ export class OB11Constructor { //log("收到回复消息", element.replyElement); try { //做这么多都是因为NC速度太快 可能nt还没有写入数据库 - let records = msg.records.find(msgRecord => msgRecord.msgId === element.replyElement.sourceMsgIdInRecords); + const records = msg.records.find(msgRecord => msgRecord.msgId === element.replyElement.sourceMsgIdInRecords); if (!records) { throw new Error('Record筛选失败'); } - let peer = { + const peer = { chatType: msg.chatType, peerUid: msg.peerUid, guildId: '', @@ -165,7 +170,7 @@ export class OB11Constructor { replyMsg = (await NTQQMsgApi.getSingleMsg(peer, element.replyElement.replayMsgSeq)).msgList[0]; } if (!replyMsg || replyMsg.msgRandom !== records.msgRandom) { - throw new Error('回复消息消息验证失败') + throw new Error('回复消息消息验证失败'); } if (replyMsg) { message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgId)?.toString(); @@ -209,13 +214,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - FileElement.fileSize, - FileElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + FileElement.fileSize, + FileElement.fileName ); } else if (element.videoElement) { @@ -235,7 +240,7 @@ export class OB11Constructor { let videoDownUrl = undefined; if (videoUrl) { - let videoDownUrlTemp = videoUrl.find((url) => { if (url.url) { return true; } return false; }); + const videoDownUrlTemp = videoUrl.find((url) => { if (url.url) { return true; } return false; }); if (videoDownUrlTemp) { videoDownUrl = videoDownUrlTemp.url; } @@ -256,20 +261,20 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - videoElement.fileSize || '0', - videoElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + videoElement.fileSize || '0', + videoElement.fileName ); } else if (element.pttElement) { message_data['type'] = OB11MessageDataType.voice; message_data['data']['file'] = element.pttElement.fileName; message_data['data']['path'] = element.pttElement.filePath; - message_data["data"]["file_id"] = element.pttElement.fileUuid; + message_data['data']['file_id'] = element.pttElement.fileUuid; message_data['data']['file_size'] = element.pttElement.fileSize; // dbUtil.addFileCache({ // name: element.pttElement.fileName, @@ -287,13 +292,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - element.pttElement.fileSize || '0', - element.pttElement.fileUuid || '' + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + element.pttElement.fileSize || '0', + element.pttElement.fileUuid || '' ); //以uuid作为文件名 } diff --git a/src/onebot11/main.ts b/src/onebot11/main.ts index ed0b0ef7..b3cdd705 100644 --- a/src/onebot11/main.ts +++ b/src/onebot11/main.ts @@ -41,7 +41,7 @@ export interface LineDevice { device_name: string; device_kind: string; } -export let DeviceList = new Array(); +export const DeviceList = new Array(); //peer->cached(boolen) // const PokeCache = new Map(); @@ -419,7 +419,7 @@ export class NapCatOnebot11 { if (check_http_ws_equal(NewOb11) || check_http_ws_equal(OldConfig)) { // http与ws共站 需要同步重启 if (isHttpChanged || isWsChanged) { - log("http与ws进行热重载") + log('http与ws进行热重载'); ob11WebsocketServer.stop(); ob11HTTPServer.stop(); if (NewOb11.http.enable) { @@ -436,7 +436,7 @@ export class NapCatOnebot11 { } else { // http重启逻辑 if (isHttpChanged) { - log("http进行热重载") + log('http进行热重载'); ob11HTTPServer.stop(); if (NewOb11.http.enable) { ob11HTTPServer.start(NewOb11.http.port, NewOb11.http.host); @@ -445,7 +445,7 @@ export class NapCatOnebot11 { // ws重启逻辑 if (isWsChanged) { - log("ws进行热重载") + log('ws进行热重载'); ob11WebsocketServer.stop(); if (NewOb11.ws.enable) { ob11WebsocketServer.start(NewOb11.ws.port, NewOb11.ws.host); @@ -455,7 +455,7 @@ export class NapCatOnebot11 { // 反向ws重启逻辑 if (isWsReverseChanged) { - log("反向ws进行热重载") + log('反向ws进行热重载'); ob11ReverseWebsockets.stop(); if (NewOb11.reverseWs.enable) { ob11ReverseWebsockets.start(); diff --git a/src/webui/src/helper/config.ts b/src/webui/src/helper/config.ts index a3eb92f3..44b77c75 100644 --- a/src/webui/src/helper/config.ts +++ b/src/webui/src/helper/config.ts @@ -23,7 +23,7 @@ async function tryUseHost(host: string): Promise { server.on('error', (err: any) => { if (err.code === 'EADDRNOTAVAIL') { - reject("主机地址验证失败,可能为非本机地址"); + reject('主机地址验证失败,可能为非本机地址'); } else { reject(`遇到错误: ${err.code}`); } @@ -87,10 +87,10 @@ class WebUiConfigWrapper { return this.WebUiConfigData; } const defaultconfig: WebUiConfigType = { - host: "0.0.0.0", + host: '0.0.0.0', port: 6099, - prefix: "", - token: "", // 默认先填空,空密码无法登录 + prefix: '', + token: '', // 默认先填空,空密码无法登录 loginRate: 3 }; try { @@ -109,8 +109,8 @@ class WebUiConfigWrapper { // 更新配置字段后新增字段可能会缺失,同步一下 const parsedConfig = this.applyDefaults(JSON.parse(fileContent) as Partial, defaultconfig); - if (!parsedConfig.prefix.startsWith("/")) parsedConfig.prefix = "/" + parsedConfig.prefix; - if (parsedConfig.prefix.endsWith("/")) parsedConfig.prefix = parsedConfig.prefix.slice(0, -1); + if (!parsedConfig.prefix.startsWith('/')) parsedConfig.prefix = '/' + parsedConfig.prefix; + if (parsedConfig.prefix.endsWith('/')) parsedConfig.prefix = parsedConfig.prefix.slice(0, -1); // 配置已经被操作过了,还是回写一下吧,不然新配置不会出现在配置文件里 writeFileSync(configPath, JSON.stringify(parsedConfig, null, 4)); // 不希望回写的配置放后面 @@ -118,14 +118,14 @@ class WebUiConfigWrapper { // 查询主机地址是否可用 const [host_err, host] = await tryUseHost(parsedConfig.host).then(data => [null, data as string]).catch(err => [err, null]); if (host_err) { - logError("host不可用", host_err) + logError('host不可用', host_err); parsedConfig.port = 0; // 设置为0,禁用WebUI } else { parsedConfig.host = host; // 修正端口占用情况 const [port_err, port] = await tryUsePort(parsedConfig.port, parsedConfig.host).then(data => [null, data as number]).catch(err => [err, null]); if (port_err) { - logError("port不可用", port_err) + logError('port不可用', port_err); parsedConfig.port = 0; // 设置为0,禁用WebUI } else { parsedConfig.port = port;