Revert "feat: 区分resId和普通消息Id"

This reverts commit 7ecdd63bef.
This commit is contained in:
手瓜一十雪
2025-04-19 11:01:12 +08:00
parent 5c35ea11c3
commit 9f318ddaef

View File

@@ -4,11 +4,10 @@ import { ActionName } from '@/onebot/action/router';
import { MessageUnique } from '@/common/message-unique'; import { MessageUnique } from '@/common/message-unique';
import { ChatType, ElementType, MsgSourceType, NTMsgType, RawMessage } from '@/core'; import { ChatType, ElementType, MsgSourceType, NTMsgType, RawMessage } from '@/core';
import { z } from 'zod'; import { z } from 'zod';
import { isNumeric } from '@/common/helper';
const SchemaData = z.object({ const SchemaData = z.object({
message_id: z.string().optional(), message_id: z.union([z.number(), z.string()]).optional(),
id: z.string().optional(), id: z.union([z.number(), z.string()]).optional(),
}); });
type Payload = z.infer<typeof SchemaData>; type Payload = z.infer<typeof SchemaData>;
@@ -53,21 +52,19 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction<Payload, {
} }
async _handle(payload: Payload) { async _handle(payload: Payload) {
// 1. 检查消息ID是否存在
const msgId = payload.message_id || payload.id; const msgId = payload.message_id || payload.id;
if (!msgId) { if (!msgId) {
throw new Error('message_id is required'); throw new Error('message_id is required');
} }
// 2. 定义辅助函数 - 创建伪转发消息对象 const fakeForwardMsg = (res_id: string) => {
const createFakeForwardMsg = (resId: string): RawMessage => {
return { return {
chatType: ChatType.KCHATTYPEGROUP, chatType: ChatType.KCHATTYPEGROUP,
elements: [{ elements: [{
elementType: ElementType.MULTIFORWARD, elementType: ElementType.MULTIFORWARD,
elementId: '', elementId: '',
multiForwardMsgElement: { multiForwardMsgElement: {
resId: resId, resId: res_id,
fileName: '', fileName: '',
xmlContent: '', xmlContent: '',
} }
@@ -98,9 +95,8 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction<Payload, {
} as RawMessage; } as RawMessage;
}; };
// 3. 定义协议回退逻辑函数 const protocolFallbackLogic = async (res_id: string) => {
const protocolFallbackLogic = async (resId: string) => { const ob = (await this.obContext.apis.MsgApi.parseMessageV2(fakeForwardMsg(res_id)))?.arrayMsg;
const ob = (await this.obContext.apis.MsgApi.parseMessageV2(createFakeForwardMsg(resId)))?.arrayMsg;
if (ob) { if (ob) {
return { return {
messages: (ob?.message?.[0] as OB11MessageForward)?.data?.content messages: (ob?.message?.[0] as OB11MessageForward)?.data?.content
@@ -108,37 +104,31 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction<Payload, {
} }
throw new Error('protocolFallbackLogic: 找不到相关的聊天记录'); throw new Error('protocolFallbackLogic: 找不到相关的聊天记录');
}; };
// 4. 尝试通过正常渠道获取消息
// 如果是数字ID优先使用getMsgsByMsgId获取
if (!isNumeric(msgId)) {
let ret = await protocolFallbackLogic(msgId);
if (ret.messages) {
return ret;
}
throw new Error('ResId无效: 找不到相关的聊天记录');
}
const rootMsgId = MessageUnique.getShortIdByMsgId(msgId.toString()); const rootMsgId = MessageUnique.getShortIdByMsgId(msgId.toString());
const rootMsg = MessageUnique.getMsgIdAndPeerByShortId(rootMsgId ?? +msgId); const rootMsg = MessageUnique.getMsgIdAndPeerByShortId(rootMsgId ?? +msgId);
if (!rootMsg) {
if (rootMsg) { return await protocolFallbackLogic(msgId.toString());
// 5. 获取消息内容
const data = await this.core.apis.MsgApi.getMsgsByMsgId(rootMsg.Peer, [rootMsg.MsgId]);
if (data && data.result === 0 && data.msgList.length > 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 };
}
}
} }
// 说明消息已过期或者为内层消息 NapCat 一次返回不处理内层消息 const data = await this.core.apis.MsgApi.getMsgsByMsgId(rootMsg.Peer, [rootMsg.MsgId]);
throw new Error('消息已过期或者为内层消息,无法获取转发消息');
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 };
} }
} }