diff --git a/src/onebot/action/go-cqhttp/GetForwardMsg.ts b/src/onebot/action/go-cqhttp/GetForwardMsg.ts index 7cb5ac14..89e9cb60 100644 --- a/src/onebot/action/go-cqhttp/GetForwardMsg.ts +++ b/src/onebot/action/go-cqhttp/GetForwardMsg.ts @@ -4,11 +4,10 @@ import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; import { ChatType, ElementType, MsgSourceType, NTMsgType, RawMessage } from '@/core'; import { z } from 'zod'; -import { isNumeric } from '@/common/helper'; const SchemaData = z.object({ - message_id: z.string().optional(), - id: z.string().optional(), + message_id: z.union([z.number(), z.string()]).optional(), + id: z.union([z.number(), z.string()]).optional(), }); type Payload = z.infer; @@ -53,21 +52,19 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction { + const fakeForwardMsg = (res_id: string) => { return { chatType: ChatType.KCHATTYPEGROUP, elements: [{ elementType: ElementType.MULTIFORWARD, elementId: '', multiForwardMsgElement: { - resId: resId, + resId: res_id, fileName: '', xmlContent: '', } @@ -98,9 +95,8 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction { - const ob = (await this.obContext.apis.MsgApi.parseMessageV2(createFakeForwardMsg(resId)))?.arrayMsg; + const protocolFallbackLogic = async (res_id: string) => { + const ob = (await this.obContext.apis.MsgApi.parseMessageV2(fakeForwardMsg(res_id)))?.arrayMsg; if (ob) { return { messages: (ob?.message?.[0] as OB11MessageForward)?.data?.content @@ -108,37 +104,31 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction 0) { - const singleMsg = data.msgList[0]; - if (!singleMsg) { - throw new Error('消息不存在或已过期'); - } - // 6. 解析消息内容 - const resMsg = (await this.obContext.apis.MsgApi.parseMessageV2(singleMsg))?.arrayMsg; - - const forwardContent = (resMsg?.message?.[0] as OB11MessageForward)?.data?.content; - if (forwardContent) { - return { messages: forwardContent }; - } - } + if (!rootMsg) { + return await protocolFallbackLogic(msgId.toString()); } - // 说明消息已过期或者为内层消息 NapCat 一次返回不处理内层消息 - throw new Error('消息已过期或者为内层消息,无法获取转发消息'); + const data = await this.core.apis.MsgApi.getMsgsByMsgId(rootMsg.Peer, [rootMsg.MsgId]); + + if (!data || data.result !== 0) { + return await protocolFallbackLogic(msgId.toString()); + } + + const singleMsg = data.msgList[0]; + if (!singleMsg) { + return await protocolFallbackLogic(msgId.toString()); + } + const resMsg = (await this.obContext.apis.MsgApi.parseMessageV2(singleMsg))?.arrayMsg;//强制array 以便处理 + if (!(resMsg?.message?.[0] as OB11MessageForward)?.data?.content) { + return await protocolFallbackLogic(msgId.toString()); + } + return { + messages: (resMsg?.message?.[0] as OB11MessageForward)?.data?.content + }; + //} + + // return { message: resMsg }; } }