From c1edc1b99be4d56a1f9bf994edb06859d6932920 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Tue, 16 Apr 2024 12:50:14 +0800 Subject: [PATCH] fix: Send empty forward msg --- src/common/server/websocket.ts | 5 ++- src/core | 1 + src/onebot11/action/file/GetFile.ts | 1 - src/onebot11/action/msg/GetMsg.ts | 2 +- src/onebot11/action/msg/SendMsg.ts | 49 +++++++++++++++------- src/onebot11/server/ws/ReverseWebsocket.ts | 1 + src/onebot11/version.ts | 2 +- 7 files changed, 42 insertions(+), 19 deletions(-) create mode 160000 src/core diff --git a/src/common/server/websocket.ts b/src/common/server/websocket.ts index 977cd53b..947ca2aa 100644 --- a/src/common/server/websocket.ts +++ b/src/common/server/websocket.ts @@ -29,7 +29,10 @@ export class WebsocketServerBase { start(port: number) { try { - this.ws = new WebSocketServer({ port }); + this.ws = new WebSocketServer({ + port , + maxPayload: 1024 * 1024 * 1024 + }); } catch (e: any) { throw Error('ws服务启动失败, ' + e.toString()); } diff --git a/src/core b/src/core new file mode 160000 index 00000000..0e7c9d43 --- /dev/null +++ b/src/core @@ -0,0 +1 @@ +Subproject commit 0e7c9d43c4c401a2b34f4b5637d566a2ff27b7b7 diff --git a/src/onebot11/action/file/GetFile.ts b/src/onebot11/action/file/GetFile.ts index f755e730..5ed6ab87 100644 --- a/src/onebot11/action/file/GetFile.ts +++ b/src/onebot11/action/file/GetFile.ts @@ -21,7 +21,6 @@ export interface GetFileResponse { base64?: string; } - export class GetFileBase extends BaseAction { private getElement(msg: RawMessage): { id: string, element: VideoElement | FileElement } { let element = msg.elements.find(e => e.fileElement); diff --git a/src/onebot11/action/msg/GetMsg.ts b/src/onebot11/action/msg/GetMsg.ts index 742941bc..46e1feb3 100644 --- a/src/onebot11/action/msg/GetMsg.ts +++ b/src/onebot11/action/msg/GetMsg.ts @@ -17,7 +17,7 @@ class GetMsg extends BaseAction { protected async _handle(payload: PayloadType) { // log("history msg ids", Object.keys(msgHistory)); if (!payload.message_id) { - throw ('参数message_id不能为空'); + throw Error('参数message_id不能为空'); } let msg = await dbUtil.getMsgByShortId(payload.message_id); if (!msg) { diff --git a/src/onebot11/action/msg/SendMsg.ts b/src/onebot11/action/msg/SendMsg.ts index 3d6f1f63..b075c52c 100644 --- a/src/onebot11/action/msg/SendMsg.ts +++ b/src/onebot11/action/msg/SendMsg.ts @@ -28,6 +28,7 @@ import { sleep } from '@/common/utils/helper'; import { uri2local } from '@/common/utils/file'; import { getFriend, getGroup, getGroupMember, getUidByUin, selfInfo } from '@/common/data'; import { NTQQMsgApi } from '@/core/qqnt/apis/msg'; +import {NTQQFileApi} from "@/core/qqnt/apis/file"; const ALLOW_SEND_TEMP_MSG = false; @@ -144,25 +145,40 @@ export async function createSendElements(messageData: OB11MessageData[], group: case OB11MessageDataType.file: case OB11MessageDataType.video: case OB11MessageDataType.voice: { - const file = sendMsg.data?.file; + let file = sendMsg.data?.file; const payloadFileName = sendMsg.data?.name; if (file) { // todo: 使用缓存文件发送 - // const cache = await dbUtil.getFileCache(file); - // if (cache) { - // if (fs.existsSync(cache.filePath)) { - // file = "file://" + cache.filePath; - // } else if (cache.downloadFunc) { - // await cache.downloadFunc(); - // file = cache.filePath; - // } else if (cache.url) { - // file = cache.url; - // } - // log("找到文件缓存", file); - // } + const cache = await dbUtil.getFileCacheByName(file); + if (cache) { + if (fs.existsSync(cache.path)) { + file = "file://" + cache.path; + } + else if (cache.url) { + file = cache.url; + } + else{ + const fileMsg = await dbUtil.getMsgByLongId(cache.msgId); + if (fileMsg){ + const downloadPath = await NTQQFileApi.downloadMedia(fileMsg.msgId, fileMsg.chatType, fileMsg.peerUid, + cache.elementId, '', ''); + cache.path = downloadPath!; + dbUtil.updateFileCache(cache).then(); + file = "file://" + cache.path; + } + // await sleep(1000); + + // log('download result', downloadPath); + // log('下载完成后的msg', msg); + } + log("找到文件缓存", file); + } const { path, isLocal, fileName, errMsg } = (await uri2local(file)); if (errMsg) { - throw errMsg; + log('文件下载失败', errMsg); + throw Error('文件下载失败' + errMsg); + // throw (errMsg); + // continue } if (path) { if (!isLocal) { // 只删除http和base64转过来的文件 @@ -311,7 +327,7 @@ export class SendMsg extends BaseAction { const returnMsg = await this.handleForwardNode(peer, messages as OB11MessageNode[], group); return { message_id: returnMsg!.id! }; } catch (e: any) { - throw ('发送转发消息失败 ' + e.toString()); + throw Error('发送转发消息失败 ' + e.toString()); } } else { if (this.getSpecialMsgNum(payload, OB11MessageDataType.music)) { @@ -482,6 +498,9 @@ export class SendMsg extends BaseAction { // nodeIds.push(nodeMsg.msgId) // await sleep(500); // 开发转发 + if (nodeMsgIds.length === 0){ + throw Error('转发消息失败,生成节点为空'); + } try { log('开发转发', nodeMsgIds); return await NTQQMsgApi.multiForwardMsg(srcPeer!, destPeer, nodeMsgIds); diff --git a/src/onebot11/server/ws/ReverseWebsocket.ts b/src/onebot11/server/ws/ReverseWebsocket.ts index 3a392b43..7a3b1538 100644 --- a/src/onebot11/server/ws/ReverseWebsocket.ts +++ b/src/onebot11/server/ws/ReverseWebsocket.ts @@ -79,6 +79,7 @@ export class ReverseWebsocket { private connect() { const { token, heartInterval } = ob11Config; this.websocket = new WebSocketClass(this.url, { + maxPayload: 1024 * 1024 * 1024, handshakeTimeout: 2000, perMessageDeflate: false, headers: { diff --git a/src/onebot11/version.ts b/src/onebot11/version.ts index 88715d81..e6218856 100644 --- a/src/onebot11/version.ts +++ b/src/onebot11/version.ts @@ -1 +1 @@ -export const version = '1.0.0'; +export const version = '1.0.3';