From 18cb46ade5c2bfa1554f3f0a89547c728246e60f Mon Sep 17 00:00:00 2001 From: idranme Date: Mon, 16 Sep 2024 20:43:18 +0800 Subject: [PATCH] fix --- src/ntqqapi/core.ts | 23 +++++++++++++---------- src/onebot11/adapter.ts | 24 ++++++++++-------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/ntqqapi/core.ts b/src/ntqqapi/core.ts index b2c34a2..8b247fc 100644 --- a/src/ntqqapi/core.ts +++ b/src/ntqqapi/core.ts @@ -27,8 +27,8 @@ declare module 'cordis' { } interface Events { 'nt/message-created': (input: RawMessage[]) => void - 'nt/message-deleted': (input: RawMessage[]) => void - 'nt/message-sent': (input: RawMessage[]) => void + 'nt/message-deleted': (input: RawMessage) => void + 'nt/message-sent': (input: RawMessage) => void 'nt/group-notify': (input: GroupNotify[]) => void 'nt/friend-request': (input: FriendRequest[]) => void 'nt/group-member-info-updated': (input: { groupCode: string, members: GroupMember[] }) => void @@ -174,23 +174,26 @@ class Core extends Service { this.ctx.parallel('nt/message-created', payload.msgList) }) + const sentMsgIds = new Map() const recallMsgIds: string[] = [] // 避免重复上报 + registerReceiveHook<{ msgList: RawMessage[] }>([ReceiveCmdS.UPDATE_MSG], payload => { - const list = payload.msgList.filter(v => { - if (recallMsgIds.includes(v.msgId)) { - return false + for (const msg of payload.msgList) { + if (msg.recallTime !== '0' && !recallMsgIds.includes(msg.msgId)) { + recallMsgIds.push(msg.msgId) + this.ctx.parallel('nt/message-deleted', msg) + } else if (sentMsgIds.get(msg.msgId)) { + sentMsgIds.delete(msg.msgId) + this.ctx.parallel('nt/message-sent', msg) } - recallMsgIds.push(v.msgId) - return true - }) - this.ctx.parallel('nt/message-deleted', list) + } }) registerReceiveHook<{ msgRecord: RawMessage }>(ReceiveCmdS.SELF_SEND_MSG, payload => { if (!this.config.reportSelfMessage) { return } - this.ctx.parallel('nt/message-sent', [payload.msgRecord]) + sentMsgIds.set(payload.msgRecord.msgId, true) }) const groupNotifyFlags: string[] = [] diff --git a/src/onebot11/adapter.ts b/src/onebot11/adapter.ts index 396a779..0676bbf 100644 --- a/src/onebot11/adapter.ts +++ b/src/onebot11/adapter.ts @@ -226,20 +226,16 @@ class OneBot11Adapter extends Service { } } - private handleRecallMsg(msgList: RawMessage[]) { - for (const message of msgList) { - if (message.recallTime != '0') { - const oriMessageId = MessageUnique.getShortIdByMsgId(message.msgId) - if (!oriMessageId) { - continue - } - OB11Entities.recallEvent(this.ctx, message, oriMessageId).then((recallEvent) => { - if (recallEvent) { - this.dispatch(recallEvent) - } - }) - } + private handleRecallMsg(message: RawMessage) { + const oriMessageId = MessageUnique.getShortIdByMsgId(message.msgId) + if (!oriMessageId) { + return } + OB11Entities.recallEvent(this.ctx, message, oriMessageId).then((recallEvent) => { + if (recallEvent) { + this.dispatch(recallEvent) + } + }) } private async handleFriendRequest(buddyReqs: FriendRequest[]) { @@ -404,7 +400,7 @@ class OneBot11Adapter extends Service { this.handleRecallMsg(input) }) this.ctx.on('nt/message-sent', input => { - this.handleMsg(input) + this.handleMsg([input]) }) this.ctx.on('nt/group-notify', input => { this.handleGroupNotify(input)