mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: 嵌套合并转发消息
This commit is contained in:
parent
b5f8140c79
commit
17c37ec32f
@ -145,9 +145,8 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
|||||||
return { message_id: returnMsg!.id! };
|
return { message_id: returnMsg!.id! };
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: recursively handle forwarded nodes
|
private async uploadForwardedNodesPacket(msgPeer: Peer, messageNodes: OB11MessageNode[], source?: string, news?: { text: string }[], summary?: string, prompt?: string): Promise<{
|
||||||
private async handleForwardedNodesPacket(msgPeer: Peer, messageNodes: OB11MessageNode[], source?: string, news?: { text: string }[], summary?: string, prompt?: string): Promise<{
|
finallySendElements: SendArkElement,
|
||||||
message: RawMessage | null,
|
|
||||||
res_id?: string
|
res_id?: string
|
||||||
}> {
|
}> {
|
||||||
const logger = this.core.context.logger;
|
const logger = this.core.context.logger;
|
||||||
@ -155,7 +154,17 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
|||||||
for (const node of messageNodes) {
|
for (const node of messageNodes) {
|
||||||
if ((node.data.id && typeof node.data.content !== "string") || !node.data.id) {
|
if ((node.data.id && typeof node.data.content !== "string") || !node.data.id) {
|
||||||
const OB11Data = normalize(node.data.content);
|
const OB11Data = normalize(node.data.content);
|
||||||
const { sendElements } = await this.obContext.apis.MsgApi.createSendElements(OB11Data, msgPeer);
|
let sendElements: SendMessageElement[];
|
||||||
|
|
||||||
|
if (getSpecialMsgNum({ message: OB11Data }, OB11MessageDataType.node)) {
|
||||||
|
const uploadReturnData = await this.uploadForwardedNodesPacket(msgPeer, OB11Data as OB11MessageNode[], node.data.source, node.data.news, node.data.summary, node.data.prompt);
|
||||||
|
sendElements = [uploadReturnData.finallySendElements];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const sendElementsCreateReturn = await this.obContext.apis.MsgApi.createSendElements(OB11Data, msgPeer);
|
||||||
|
sendElements = sendElementsCreateReturn.sendElements;
|
||||||
|
}
|
||||||
|
|
||||||
const packetMsgElements: rawMsgWithSendMsg = {
|
const packetMsgElements: rawMsgWithSendMsg = {
|
||||||
senderUin: Number(node.data.user_id) ?? +this.core.selfInfo.uin,
|
senderUin: Number(node.data.user_id) ?? +this.core.selfInfo.uin,
|
||||||
senderName: node.data.nickname,
|
senderName: node.data.nickname,
|
||||||
@ -173,20 +182,33 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
|||||||
}
|
}
|
||||||
const resid = await this.core.apis.PacketApi.sendUploadForwardMsg(packetMsg, msgPeer.chatType === ChatType.KCHATTYPEGROUP ? +msgPeer.peerUid : 0);
|
const resid = await this.core.apis.PacketApi.sendUploadForwardMsg(packetMsg, msgPeer.chatType === ChatType.KCHATTYPEGROUP ? +msgPeer.peerUid : 0);
|
||||||
const forwardJson = ForwardMsgBuilder.fromPacketMsg(resid, packetMsg, source, news, summary, prompt);
|
const forwardJson = ForwardMsgBuilder.fromPacketMsg(resid, packetMsg, source, news, summary, prompt);
|
||||||
const finallySendElements = {
|
return {
|
||||||
|
finallySendElements: {
|
||||||
elementType: ElementType.ARK,
|
elementType: ElementType.ARK,
|
||||||
elementId: "",
|
elementId: "",
|
||||||
arkElement: {
|
arkElement: {
|
||||||
bytesData: JSON.stringify(forwardJson),
|
bytesData: JSON.stringify(forwardJson),
|
||||||
},
|
},
|
||||||
} as SendArkElement;
|
} as SendArkElement,
|
||||||
let returnMsg: RawMessage | undefined;
|
res_id: resid,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private async handleForwardedNodesPacket(msgPeer: Peer, messageNodes: OB11MessageNode[], source?: string, news?: { text: string }[], summary?: string, prompt?: string): Promise<{
|
||||||
|
message: RawMessage | null,
|
||||||
|
res_id?: string
|
||||||
|
}> {
|
||||||
|
const logger = this.core.context.logger;
|
||||||
|
let returnMsg: RawMessage | undefined, res_id: string | undefined;
|
||||||
try {
|
try {
|
||||||
|
const uploadReturnData = await this.uploadForwardedNodesPacket(msgPeer, messageNodes, source, news, summary, prompt);
|
||||||
|
res_id = uploadReturnData.res_id;
|
||||||
|
const finallySendElements = uploadReturnData.finallySendElements;
|
||||||
returnMsg = await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(msgPeer, [finallySendElements], [], true).catch(_ => undefined);
|
returnMsg = await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(msgPeer, [finallySendElements], [], true).catch(_ => undefined);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.logWarn("发送伪造合并转发消息失败!", e);
|
logger.logWarn("发送伪造合并转发消息失败!", e);
|
||||||
}
|
}
|
||||||
return { message: returnMsg ?? null, res_id: resid };
|
return { message: returnMsg ?? null, res_id };
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleForwardedNodes(destPeer: Peer, messageNodes: OB11MessageNode[]): Promise<{
|
private async handleForwardedNodes(destPeer: Peer, messageNodes: OB11MessageNode[]): Promise<{
|
||||||
|
@ -152,6 +152,10 @@ export interface OB11MessageNode {
|
|||||||
user_id?: number | string // number
|
user_id?: number | string // number
|
||||||
nickname: string
|
nickname: string
|
||||||
content: OB11MessageMixType
|
content: OB11MessageMixType
|
||||||
|
source?: string,
|
||||||
|
news?: { text: string }[],
|
||||||
|
summary?: string,
|
||||||
|
prompt?: string
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user