From be605f11f25aeb495d8c2d5d85d8089cc828f426 Mon Sep 17 00:00:00 2001 From: Alen Date: Sat, 27 Jul 2024 15:01:08 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E7=96=8F=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改在查询群历史消息时,如未提供msg_seq,则返回最新消息 --- src/common/utils/MessageUnique.ts | 23 +++++++++++++++++++ .../action/go-cqhttp/GetGroupMsgHistory.ts | 15 +++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/common/utils/MessageUnique.ts b/src/common/utils/MessageUnique.ts index 30c4d09d..ac6190ed 100644 --- a/src/common/utils/MessageUnique.ts +++ b/src/common/utils/MessageUnique.ts @@ -61,6 +61,10 @@ class LimitedHashTable { this.valueToKey.delete(value); } } + + getKeyList(): K[] { + return Array.from(this.keyToValue.keys()); + } } class MessageUniqueWrapper { @@ -111,6 +115,25 @@ class MessageUniqueWrapper { this.msgIdMap.resize(maxSize); this.msgDataMap.resize(maxSize); } + getNthLatestShortIdByPeer(peer: Peer, index: number = 1): number | undefined { + const peerUid = peer.peerUid; + const chatType = peer.chatType; + const keys = this.msgDataMap.getKeyList(); + const matches: number[] = []; + for (const key of keys) { + const [msgId, chatTypeStr, peerUidStr] = key.split('|'); + if (peerUidStr === peerUid && chatTypeStr === chatType.toString()) { + const shortId = this.msgDataMap.getValue(key); + if (shortId) { + matches.push(shortId); + } + } + } + if (matches.length >= index) { + return matches[matches.length - index]; + } + return undefined; + } } export const MessageUnique: MessageUniqueWrapper = new MessageUniqueWrapper(); \ No newline at end of file diff --git a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts index c1f43021..a2e051af 100644 --- a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts @@ -18,7 +18,7 @@ const SchemaData = { message_seq: { type: 'number' }, count: { type: 'number' } }, - required: ['group_id', 'count'] + required: [ 'group_id' ] } as const satisfies JSONSchema; type Payload = FromSchema; @@ -31,13 +31,16 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction { msg.id = await MessageUnique.createMsg({ guildId: '', chatType: msg.chatType, peerUid: msg.peerUid }, msg.msgId); From 0d45125d7984a1b6e845aa475d8d9c39c2fde1a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sun, 28 Jul 2024 09:56:00 +0800 Subject: [PATCH 2/3] fix: uid && latestMsg --- src/common/utils/MessageUnique.ts | 19 ------------------- src/core/src/apis/group.ts | 13 ++++--------- src/core/src/apis/msg.ts | 14 +++++++++++++- .../src/services/NodeIKernelMsgService.ts | 2 +- .../action/go-cqhttp/GetGroupMsgHistory.ts | 7 ++++--- src/onebot11/main.ts | 11 ++++++----- 6 files changed, 28 insertions(+), 38 deletions(-) diff --git a/src/common/utils/MessageUnique.ts b/src/common/utils/MessageUnique.ts index ac6190ed..430ec621 100644 --- a/src/common/utils/MessageUnique.ts +++ b/src/common/utils/MessageUnique.ts @@ -115,25 +115,6 @@ class MessageUniqueWrapper { this.msgIdMap.resize(maxSize); this.msgDataMap.resize(maxSize); } - getNthLatestShortIdByPeer(peer: Peer, index: number = 1): number | undefined { - const peerUid = peer.peerUid; - const chatType = peer.chatType; - const keys = this.msgDataMap.getKeyList(); - const matches: number[] = []; - for (const key of keys) { - const [msgId, chatTypeStr, peerUidStr] = key.split('|'); - if (peerUidStr === peerUid && chatTypeStr === chatType.toString()) { - const shortId = this.msgDataMap.getValue(key); - if (shortId) { - matches.push(shortId); - } - } - } - if (matches.length >= index) { - return matches[matches.length - index]; - } - return undefined; - } } export const MessageUnique: MessageUniqueWrapper = new MessageUniqueWrapper(); \ No newline at end of file diff --git a/src/core/src/apis/group.ts b/src/core/src/apis/group.ts index 2a47a1a0..3163344a 100644 --- a/src/core/src/apis/group.ts +++ b/src/core/src/apis/group.ts @@ -1,4 +1,4 @@ -import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group, MemberExtSourceType, GroupNotifyTypes, ChatType } from '../entities'; +import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group, MemberExtSourceType, GroupNotifyTypes, ChatType, Peer } from '../entities'; import { GeneralCallResult, NTQQUserApi, napCatCore } from '@/core'; import { NTEventDispatch } from '@/common/utils/EventTask'; import { log } from '@/common/utils/log'; @@ -84,14 +84,9 @@ export class NTQQGroupApi { static async getLastestMsg(GroupCode: string, uins: string[]) { let uids: Array = []; for (let uin of uins) { - try { - let uid = await NTQQUserApi.getUidByUin(uin) - if (uid) { - uids.push(uid); - } - } catch (error) { - log("getLastestMsg--->", error); - return undefined; + let uid = await NTQQUserApi.getUidByUin(uin) + if (uid) { + uids.push(uid); } } let ret = await napCatCore.session.getMsgService().queryMsgsWithFilterEx('0', '0', '0', { diff --git a/src/core/src/apis/msg.ts b/src/core/src/apis/msg.ts index 06032df9..137d8faf 100644 --- a/src/core/src/apis/msg.ts +++ b/src/core/src/apis/msg.ts @@ -63,7 +63,19 @@ export class NTQQMsgApi { } | undefined> { return napCatCore.session.getMsgService().getMultiMsg(peer, rootMsgId, parentMsgId); } - + static async getLastestMsgByUids(peer: Peer) { + let ret = await napCatCore.session.getMsgService().queryMsgsWithFilterEx('0', '0', '0', { + chatInfo: peer, + filterMsgType: [], + filterSendersUid: [], + filterMsgToTime: '0', + filterMsgFromTime: '0', + isReverseOrder: false, + isIncludeCurrent: true, + pageLimit: 1, + }); + return ret; + } static async getMsgsByMsgId(peer: Peer, msgIds: string[]) { return await napCatCore.session.getMsgService().getMsgsByMsgId(peer, msgIds); } diff --git a/src/core/src/services/NodeIKernelMsgService.ts b/src/core/src/services/NodeIKernelMsgService.ts index 80e74a11..da8e5a76 100644 --- a/src/core/src/services/NodeIKernelMsgService.ts +++ b/src/core/src/services/NodeIKernelMsgService.ts @@ -141,7 +141,7 @@ export interface NodeIKernelMsgService { getLastMessageList(peer: Peer[]): Promise; - getAioFirstViewLatestMsgs(peer: Peer, unknown: number): unknown; + getAioFirstViewLatestMsgs(peer: Peer, num: number): unknown; getMsgs(peer: Peer, msgId: string, count: unknown, queryOrder: boolean): Promise; diff --git a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts index a2e051af..c8d4a6af 100644 --- a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts @@ -18,7 +18,7 @@ const SchemaData = { message_seq: { type: 'number' }, count: { type: 'number' } }, - required: [ 'group_id' ] + required: ['group_id'] } as const satisfies JSONSchema; type Payload = FromSchema; @@ -36,8 +36,9 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction { From 9ab07060ae93e6505012dc128ace478d93894e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sun, 28 Jul 2024 12:59:20 +0800 Subject: [PATCH 3/3] fix: default --- src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts index c8d4a6af..b6660efb 100644 --- a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts @@ -38,7 +38,7 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction