From 37d061b602a7a4636cc6c3fe97435424106707a3 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: Thu, 22 Aug 2024 13:53:07 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E8=BF=9B=E4=B8=80=E6=AD=A5=E8=A7=A3?= =?UTF-8?q?=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/onebot/api/group.ts | 43 ++++++++++++++++++++++++++++++- src/onebot/helper/converter.ts | 0 src/onebot/helper/data.ts | 46 ++-------------------------------- 3 files changed, 44 insertions(+), 45 deletions(-) create mode 100644 src/onebot/helper/converter.ts diff --git a/src/onebot/api/group.ts b/src/onebot/api/group.ts index feefe94c..1c9ede44 100644 --- a/src/onebot/api/group.ts +++ b/src/onebot/api/group.ts @@ -1,8 +1,11 @@ -import { GrayTipElement, NapCatCore } from '@/core'; +import { ChatType, GrayTipElement, NapCatCore } from '@/core'; import { NapCatOneBot11Adapter } from '@/onebot'; import { OB11GroupBanEvent } from '../event/notice/OB11GroupBanEvent'; import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent'; import { OB11GroupDecreaseEvent } from '../event/notice/OB11GroupDecreaseEvent'; +import fastXmlParser from 'fast-xml-parser'; +import { OB11GroupMsgEmojiLikeEvent } from '../event/notice/OB11MsgEmojiLikeEvent'; +import { MessageUnique } from '@/common/utils/MessageUnique'; export class OneBotGroupApi { obContext: NapCatOneBot11Adapter; @@ -77,4 +80,42 @@ export class OneBotGroupApi { } return undefined; } + async parseGroupEmjioLikeEvent(GroupCode: string, grayTipElement: GrayTipElement) { + const NTQQMsgApi = this.coreContext.apis.MsgApi; + const emojiLikeData = new fastXmlParser.XMLParser({ + ignoreAttributes: false, + attributeNamePrefix: '', + }).parse(grayTipElement.xmlElement.content); + this.coreContext.context.logger.logDebug('收到表情回应我的消息', emojiLikeData); + try { + const senderUin = emojiLikeData.gtip.qq.jp; + const msgSeq = emojiLikeData.gtip.url.msgseq; + const emojiId = emojiLikeData.gtip.face.id; + const peer = { + chatType: ChatType.group, + guildId: '', + peerUid: GroupCode + } + const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList; + if (replyMsgList.length < 1) { + return; + } + const replyMsg = replyMsgList.filter(e => e.msgSeq == msgSeq).sort((a, b) => parseInt(a.msgTime) - parseInt(b.msgTime))[0]; + //console.log("表情回应消息长度检测", msgSeq, replyMsg.elements); + if (!replyMsg) throw new Error('找不到回应消息'); + return new OB11GroupMsgEmojiLikeEvent( + this.coreContext, + parseInt(GroupCode), + parseInt(senderUin), + MessageUnique.getShortIdByMsgId(replyMsg.msgId)!, + [{ + emoji_id: emojiId, + count: 1, + }], + ); + } catch (e: any) { + this.coreContext.context.logger.logError('解析表情回应消息失败', e.stack); + } + return undefined; + } } diff --git a/src/onebot/helper/converter.ts b/src/onebot/helper/converter.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/onebot/helper/data.ts b/src/onebot/helper/data.ts index 32acb862..c7ca308c 100644 --- a/src/onebot/helper/data.ts +++ b/src/onebot/helper/data.ts @@ -454,40 +454,8 @@ export class OB11Constructor { } if (element.grayTipElement) { if (element.grayTipElement.xmlElement?.templId === '10382') { - const emojiLikeData = new fastXmlParser.XMLParser({ - ignoreAttributes: false, - attributeNamePrefix: '', - }).parse(element.grayTipElement.xmlElement.content); - logger.logDebug('收到表情回应我的消息', emojiLikeData); - try { - const senderUin = emojiLikeData.gtip.qq.jp; - const msgSeq = emojiLikeData.gtip.url.msgseq; - const emojiId = emojiLikeData.gtip.face.id; - const peer = { - chatType: ChatType.group, - guildId: '', - peerUid: msg.peerUid - } - const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList; - if (replyMsgList.length < 1) { - return; - } - const replyMsg = replyMsgList.filter(e => e.msgSeq == msgSeq).sort((a, b) => parseInt(a.msgTime) - parseInt(b.msgTime))[0]; - //console.log("表情回应消息长度检测", msgSeq, replyMsg.elements); - if (!replyMsg) throw new Error('找不到回应消息'); - return new OB11GroupMsgEmojiLikeEvent( - core, - parseInt(msg.peerUid), - parseInt(senderUin), - MessageUnique.getShortIdByMsgId(replyMsg.msgId)!, - [{ - emoji_id: emojiId, - count: 1, - }], - ); - } catch (e: any) { - logger.logError('解析表情回应消息失败', e.stack); - } + let emojiLikeEvent = await obContext.apiContext.GroupApi.parseGroupEmjioLikeEvent(msg.peerUid, element.grayTipElement); + if (emojiLikeEvent) return emojiLikeEvent; } if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { logger.logDebug('收到新人被邀请进群消息', element.grayTipElement); @@ -569,16 +537,6 @@ export class OB11Constructor { } } - static friend(friend: User): OB11User { - return { - user_id: parseInt(friend.uin), - nickname: friend.nick, - remark: friend.remark, - sex: OB11Constructor.sex(friend.sex!), - level: friend.qqLevel && calcQQLevel(friend.qqLevel) || 0, - }; - } - static selfInfo(selfInfo: SelfInfo): OB11User { return { user_id: parseInt(selfInfo.uin),