From d4fbbd671197211f09207f1d73e401a817935811 Mon Sep 17 00:00:00 2001 From: pk5ls20 Date: Tue, 19 Nov 2024 01:12:49 +0800 Subject: [PATCH] fix: #539 --- src/core/apis/msg.ts | 42 +++++---- src/core/listeners/NodeIKernelMsgListener.ts | 91 ++++++++++---------- 2 files changed, 74 insertions(+), 59 deletions(-) diff --git a/src/core/apis/msg.ts b/src/core/apis/msg.ts index 120d3351..4335fc73 100644 --- a/src/core/apis/msg.ts +++ b/src/core/apis/msg.ts @@ -1,5 +1,5 @@ import { ChatType, GetFileListParam, Peer, RawMessage, SendMessageElement, SendStatusType } from '@/core/entities'; -import { InstanceContext, NapCatCore } from '@/core'; +import { GroupFileInfoUpdateItem, InstanceContext, NapCatCore } from '@/core'; import { GeneralCallResult } from '@/core/services/common'; export class NTQQMsgApi { @@ -25,9 +25,11 @@ export class NTQQMsgApi { async sendShowInputStatusReq(peer: Peer, eventType: number) { return this.context.session.getMsgService().sendShowInputStatusReq(peer.chatType, eventType, peer.peerUid); } + async getSourceOfReplyMsgV2(peer: Peer, clientSeq: string, time: string) { return this.context.session.getMsgService().getSourceOfReplyMsgV2(peer, clientSeq, time); } + async getMsgEmojiLikesList(peer: Peer, msgSeq: string, emojiId: string, emojiType: string, count: number = 20) { //注意此处emojiType 可选值一般为1-2 2好像是unicode表情dec值 大部分情况 Taged Mlikiowa return this.context.session.getMsgService().getMsgEmojiLikesList(peer, msgSeq, emojiId, emojiType, '', false, count); @@ -111,7 +113,7 @@ export class NTQQMsgApi { pageLimit: 1, }); } - // 客户端还在用别慌 + // 客户端还在用别慌 async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, isReverseOrder: boolean) { return await this.context.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, isReverseOrder); } @@ -136,19 +138,29 @@ export class NTQQMsgApi { } async getGroupFileList(GroupCode: string, params: GetFileListParam) { - const [, groupFileListResult] = await this.core.eventWrapper.callNormalEventV2( - 'NodeIKernelRichMediaService/getGroupFileList', - 'NodeIKernelMsgListener/onGroupFileInfoUpdate', - [ - GroupCode, - params, - ], - () => true, - () => true, // 应当通过 groupFileListResult 判断 - 1, - 5000, - ); - return groupFileListResult.item; + const item: GroupFileInfoUpdateItem[] = []; + let index = params.startIndex; + while (true) { + params.startIndex = index; + const [, groupFileListResult] = await this.core.eventWrapper.callNormalEventV2( + 'NodeIKernelRichMediaService/getGroupFileList', + 'NodeIKernelMsgListener/onGroupFileInfoUpdate', + [ + GroupCode, + params, + ], + () => true, + () => true, // 应当通过 groupFileListResult 判断 + 1, + 5000, + ); + if (!groupFileListResult?.item?.length) break; + item.push(...groupFileListResult.item); + if (groupFileListResult.isEnd) break; + if (item.length === params.fileCount) break; + index = groupFileListResult.nextIndex; + } + return item; } async getMsgHistory(peer: Peer, msgId: string, count: number, isReverseOrder: boolean = false) { diff --git a/src/core/listeners/NodeIKernelMsgListener.ts b/src/core/listeners/NodeIKernelMsgListener.ts index 43ce4466..f0ebdb37 100644 --- a/src/core/listeners/NodeIKernelMsgListener.ts +++ b/src/core/listeners/NodeIKernelMsgListener.ts @@ -29,50 +29,10 @@ export interface GroupFileInfoUpdateParamType { retMsg: string; clientWording: string; isEnd: boolean; - item: Array<{ - peerId: string; - type: number; - folderInfo?: { - folderId: string; - parentFolderId: string; - folderName: string; - createTime: number; - modifyTime: number; - createUin: string; - creatorName: string; - totalFileCount: number; - modifyUin: string; - modifyName: string; - usedSpace: string; - }, - fileInfo?: { - fileModelId: string; - fileId: string; - fileName: string; - fileSize: string; - busId: number; - uploadedSize: string; - uploadTime: number; - deadTime: number; - modifyTime: number; - downloadTimes: number; - sha: string; - sha3: string; - md5: string; - uploaderLocalPath: string; - uploaderName: string; - uploaderUin: string; - parentFolderId: string; - localPath: string; - transStatus: number; - transType: number; - elementId: string; - isFolder: boolean; - }, - }>; - allFileCount: string; - nextIndex: string; - reqId: string; + item: Array; + allFileCount: number; + nextIndex: number; + reqId: number; } // { @@ -83,6 +43,49 @@ export interface GroupFileInfoUpdateParamType { // fromNick: '拾xxxx, // sig: '0x' // } + +export interface GroupFileInfoUpdateItem { + peerId: string; + type: number; + folderInfo?: { + folderId: string; + parentFolderId: string; + folderName: string; + createTime: number; + modifyTime: number; + createUin: string; + creatorName: string; + totalFileCount: number; + modifyUin: string; + modifyName: string; + usedSpace: string; + }, + fileInfo?: { + fileModelId: string; + fileId: string; + fileName: string; + fileSize: string; + busId: number; + uploadedSize: string; + uploadTime: number; + deadTime: number; + modifyTime: number; + downloadTimes: number; + sha: string; + sha3: string; + md5: string; + uploaderLocalPath: string; + uploaderName: string; + uploaderUin: string; + parentFolderId: string; + localPath: string; + transStatus: number; + transType: number; + elementId: string; + isFolder: boolean; + }, +} + export interface TempOnRecvParams { sessionType: number,//1 chatType: ChatType,//100