From 71a2e52739fe679ba2424a6dc86beda1ffa5c50e 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 14:11:20 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/onebot/helper/converter.ts | 161 +-------------------------------- src/onebot/helper/event.ts | 154 +++++++++++++++++++++++++++++++ src/onebot/helper/index.ts | 3 +- src/onebot/index.ts | 6 +- 4 files changed, 162 insertions(+), 162 deletions(-) create mode 100644 src/onebot/helper/event.ts diff --git a/src/onebot/helper/converter.ts b/src/onebot/helper/converter.ts index 350ae812..2e73d67f 100644 --- a/src/onebot/helper/converter.ts +++ b/src/onebot/helper/converter.ts @@ -1,164 +1,9 @@ -import { UUIDConverter, calcQQLevel } from '@/common/utils/helper'; -import { MessageUnique } from '@/common/utils/MessageUnique'; -import { NapCatCore, RawMessage, ChatType, AtType, VideoElement, FaceIndex, NTGrayTipElementSubTypeV2, TipGroupElementType, Peer, SelfInfo, FriendV2, Friend, Sex, GroupMember, User, Group } from '@/core'; -import { NapCatOneBot11Adapter } from '..'; -import { OB11BaseNoticeEvent } from '../event/notice/OB11BaseNoticeEvent'; -import { OB11FriendAddNoticeEvent } from '../event/notice/OB11FriendAddNoticeEvent'; -import { OB11GroupCardEvent } from '../event/notice/OB11GroupCardEvent'; -import { OB11GroupDecreaseEvent } from '../event/notice/OB11GroupDecreaseEvent'; -import { OB11GroupEssenceEvent } from '../event/notice/OB11GroupEssenceEvent'; -import { OB11GroupNoticeEvent } from '../event/notice/OB11GroupNoticeEvent'; -import { OB11GroupTitleEvent } from '../event/notice/OB11GroupTitleEvent'; -import { OB11GroupUploadNoticeEvent } from '../event/notice/OB11GroupUploadNoticeEvent'; -import { OB11GroupPokeEvent } from '../event/notice/OB11PokeEvent'; -import { EventType } from '../event/OB11BaseEvent'; -import { OB11Message, OB11MessageData, OB11MessageDataType, OB11User, OB11GroupMemberRole, OB11UserSex, OB11GroupMember, OB11Group } from '../types'; -import { encodeCQCode } from './cqcode'; +import { calcQQLevel } from '@/common/utils/helper'; +import { SelfInfo, FriendV2, Friend, Sex, GroupMember, User, Group } from '@/core'; +import { OB11User, OB11GroupMemberRole, OB11UserSex, OB11GroupMember, OB11Group } from '../types'; export class OB11Constructor { - static async PrivateEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise { - if (msg.chatType !== ChatType.friend) { - return; - } - for (const element of msg.elements) { - if (element.grayTipElement) { - if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { - if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { - let PokeEvent = await obContext.apiContext.FriendApi.parsePrivatePokeEvent(element.grayTipElement); - if (PokeEvent) return PokeEvent; - } - } - if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { - //好友添加成功事件 - if (element.grayTipElement.xmlElement.templId === '10229' && msg.peerUin !== '') { - return new OB11FriendAddNoticeEvent(core, parseInt(msg.peerUin)); - } - } - } - } - } - - static async GroupEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise { - const NTQQGroupApi = core.apis.GroupApi; - const NTQQUserApi = core.apis.UserApi; - const NTQQMsgApi = core.apis.MsgApi; - const logger = core.context.logger; - if (msg.chatType !== ChatType.group) { - return; - } - //log("group msg", msg); - if (msg.senderUin && msg.senderUin !== '0') { - const member = await NTQQGroupApi.getGroupMember(msg.peerUid, msg.senderUin); - if (member && member.cardName !== msg.sendMemberName) { - const newCardName = msg.sendMemberName || ''; - const event = new OB11GroupCardEvent(core, parseInt(msg.peerUid), parseInt(msg.senderUin), newCardName, member.cardName); - member.cardName = newCardName; - return event; - } - } - - for (const element of msg.elements) { - if (element.grayTipElement && element.grayTipElement.groupElement) { - const groupElement = element.grayTipElement.groupElement; - if (groupElement.type == TipGroupElementType.memberIncrease) { - let MemberIncreaseEvent = await obContext.apiContext.GroupApi.parseGroupMemberIncreaseEvent(msg.peerUid, element.grayTipElement); - if (MemberIncreaseEvent) return MemberIncreaseEvent; - } else if (groupElement.type === TipGroupElementType.ban) { - let BanEvent = await obContext.apiContext.GroupApi.parseGroupBanEvent(msg.peerUid, element.grayTipElement); - if (BanEvent) return BanEvent; - } else if (groupElement.type == TipGroupElementType.kicked) { - NTQQGroupApi.quitGroup(msg.peerUid).then(); - try { - let KickEvent = await obContext.apiContext.GroupApi.parseGroupKickEvent(msg.peerUid, element.grayTipElement); - if (KickEvent) return KickEvent; - } catch (e) { - return new OB11GroupDecreaseEvent( - core, - parseInt(msg.peerUid), - parseInt(core.selfInfo.uin), - 0, - 'leave' - ); - } - } - } else if (element.fileElement) { - return new OB11GroupUploadNoticeEvent( - core, - parseInt(msg.peerUid), parseInt(msg.senderUin || ''), - { - id: element.fileElement.fileUuid!, - name: element.fileElement.fileName, - size: parseInt(element.fileElement.fileSize), - busid: element.fileElement.fileBizId || 0, - } - ); - } - if (element.grayTipElement) { - if (element.grayTipElement.xmlElement?.templId === '10382') { - let emojiLikeEvent = await obContext.apiContext.GroupApi.parseGroupEmjioLikeEvent(msg.peerUid, element.grayTipElement); - if (emojiLikeEvent) return emojiLikeEvent; - } - if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { - let GroupIncreaseEvent = await obContext.apiContext.GroupApi.parseGroupMemberIncreaseEvent(msg.peerUid, element.grayTipElement); - if (GroupIncreaseEvent) return GroupIncreaseEvent; - } - - //代码歧义 GrayTipElementSubType.MEMBER_NEW_TITLE - else if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { - const json = JSON.parse(element.grayTipElement.jsonGrayTipElement.jsonStr); - if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { - //判断业务类型 - //Poke事件 - const pokedetail: any[] = json.items; - //筛选item带有uid的元素 - const poke_uid = pokedetail.filter(item => item.uid); - if (poke_uid.length == 2) { - return new OB11GroupPokeEvent( - core, - parseInt(msg.peerUid), - parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[0].uid))!), - parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[1].uid))!), - pokedetail - ); - } - } - if (element.grayTipElement.jsonGrayTipElement.busiId == 2401) { - const searchParams = new URL(json.items[0].jp).searchParams; - const msgSeq = searchParams.get('msgSeq')!; - const Group = searchParams.get('groupCode'); - // const businessId = searchParams.get('businessid'); - const Peer: Peer = { - guildId: '', - chatType: ChatType.group, - peerUid: Group!, - }; - const msgData = await NTQQMsgApi.getMsgsBySeqAndCount(Peer, msgSeq.toString(), 1, true, true); - return new OB11GroupEssenceEvent( - core, - parseInt(msg.peerUid), - MessageUnique.getShortIdByMsgId(msgData.msgList[0].msgId)!, - parseInt(msgData.msgList[0].senderUin) - ); - // 获取MsgSeq+Peer可获取具体消息 - } - if (element.grayTipElement.jsonGrayTipElement.busiId == 2407) { - //下面得改 上面也是错的grayTipElement.subElementType == GrayTipElementSubType.MEMBER_NEW_TITLE - const memberUin = json.items[1].param[0]; - const title = json.items[3].txt; - logger.logDebug('收到群成员新头衔消息', json); - return new OB11GroupTitleEvent( - core, - parseInt(msg.peerUid), - parseInt(memberUin), - title - ); - } - } - } - } - } - static selfInfo(selfInfo: SelfInfo): OB11User { return { user_id: parseInt(selfInfo.uin), diff --git a/src/onebot/helper/event.ts b/src/onebot/helper/event.ts new file mode 100644 index 00000000..a51ce637 --- /dev/null +++ b/src/onebot/helper/event.ts @@ -0,0 +1,154 @@ +import { NapCatOneBot11Adapter } from ".."; +import { OB11BaseNoticeEvent } from "../event/notice/OB11BaseNoticeEvent"; +import { OB11FriendAddNoticeEvent } from "../event/notice/OB11FriendAddNoticeEvent"; +import { OB11GroupNoticeEvent } from "../event/notice/OB11GroupNoticeEvent"; +import { OB11GroupCardEvent } from "../event/notice/OB11GroupCardEvent"; +import { OB11GroupDecreaseEvent } from "../event/notice/OB11GroupDecreaseEvent"; +import { OB11GroupUploadNoticeEvent } from "../event/notice/OB11GroupUploadNoticeEvent"; +import { OB11GroupPokeEvent } from "../event/notice/OB11PokeEvent"; +import { OB11GroupEssenceEvent } from "../event/notice/OB11GroupEssenceEvent"; +import { MessageUnique } from "@/common/utils/MessageUnique"; +import { OB11GroupTitleEvent } from "../event/notice/OB11GroupTitleEvent"; +import { NapCatCore, RawMessage, ChatType, NTGrayTipElementSubTypeV2, TipGroupElementType, Peer } from '@/core'; + +export async function NT2PrivateEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise { + if (msg.chatType !== ChatType.friend) { + return; + } + for (const element of msg.elements) { + if (element.grayTipElement) { + if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { + if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { + let PokeEvent = await obContext.apiContext.FriendApi.parsePrivatePokeEvent(element.grayTipElement); + if (PokeEvent) return PokeEvent; + } + } + if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { + //好友添加成功事件 + if (element.grayTipElement.xmlElement.templId === '10229' && msg.peerUin !== '') { + return new OB11FriendAddNoticeEvent(core, parseInt(msg.peerUin)); + } + } + } + } +} + +export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise { + const NTQQGroupApi = core.apis.GroupApi; + const NTQQUserApi = core.apis.UserApi; + const NTQQMsgApi = core.apis.MsgApi; + const logger = core.context.logger; + if (msg.chatType !== ChatType.group) { + return; + } + //log("group msg", msg); + if (msg.senderUin && msg.senderUin !== '0') { + const member = await NTQQGroupApi.getGroupMember(msg.peerUid, msg.senderUin); + if (member && member.cardName !== msg.sendMemberName) { + const newCardName = msg.sendMemberName || ''; + const event = new OB11GroupCardEvent(core, parseInt(msg.peerUid), parseInt(msg.senderUin), newCardName, member.cardName); + member.cardName = newCardName; + return event; + } + } + + for (const element of msg.elements) { + if (element.grayTipElement && element.grayTipElement.groupElement) { + const groupElement = element.grayTipElement.groupElement; + if (groupElement.type == TipGroupElementType.memberIncrease) { + let MemberIncreaseEvent = await obContext.apiContext.GroupApi.parseGroupMemberIncreaseEvent(msg.peerUid, element.grayTipElement); + if (MemberIncreaseEvent) return MemberIncreaseEvent; + } else if (groupElement.type === TipGroupElementType.ban) { + let BanEvent = await obContext.apiContext.GroupApi.parseGroupBanEvent(msg.peerUid, element.grayTipElement); + if (BanEvent) return BanEvent; + } else if (groupElement.type == TipGroupElementType.kicked) { + NTQQGroupApi.quitGroup(msg.peerUid).then(); + try { + let KickEvent = await obContext.apiContext.GroupApi.parseGroupKickEvent(msg.peerUid, element.grayTipElement); + if (KickEvent) return KickEvent; + } catch (e) { + return new OB11GroupDecreaseEvent( + core, + parseInt(msg.peerUid), + parseInt(core.selfInfo.uin), + 0, + 'leave' + ); + } + } + } else if (element.fileElement) { + return new OB11GroupUploadNoticeEvent( + core, + parseInt(msg.peerUid), parseInt(msg.senderUin || ''), + { + id: element.fileElement.fileUuid!, + name: element.fileElement.fileName, + size: parseInt(element.fileElement.fileSize), + busid: element.fileElement.fileBizId || 0, + } + ); + } + if (element.grayTipElement) { + if (element.grayTipElement.xmlElement?.templId === '10382') { + let emojiLikeEvent = await obContext.apiContext.GroupApi.parseGroupEmjioLikeEvent(msg.peerUid, element.grayTipElement); + if (emojiLikeEvent) return emojiLikeEvent; + } + if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { + let GroupIncreaseEvent = await obContext.apiContext.GroupApi.parseGroupMemberIncreaseEvent(msg.peerUid, element.grayTipElement); + if (GroupIncreaseEvent) return GroupIncreaseEvent; + } + + //代码歧义 GrayTipElementSubType.MEMBER_NEW_TITLE + else if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { + const json = JSON.parse(element.grayTipElement.jsonGrayTipElement.jsonStr); + if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { + //判断业务类型 + //Poke事件 + const pokedetail: any[] = json.items; + //筛选item带有uid的元素 + const poke_uid = pokedetail.filter(item => item.uid); + if (poke_uid.length == 2) { + return new OB11GroupPokeEvent( + core, + parseInt(msg.peerUid), + parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[0].uid))!), + parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[1].uid))!), + pokedetail + ); + } + } + if (element.grayTipElement.jsonGrayTipElement.busiId == 2401) { + const searchParams = new URL(json.items[0].jp).searchParams; + const msgSeq = searchParams.get('msgSeq')!; + const Group = searchParams.get('groupCode'); + // const businessId = searchParams.get('businessid'); + const Peer: Peer = { + guildId: '', + chatType: ChatType.group, + peerUid: Group!, + }; + const msgData = await NTQQMsgApi.getMsgsBySeqAndCount(Peer, msgSeq.toString(), 1, true, true); + return new OB11GroupEssenceEvent( + core, + parseInt(msg.peerUid), + MessageUnique.getShortIdByMsgId(msgData.msgList[0].msgId)!, + parseInt(msgData.msgList[0].senderUin) + ); + // 获取MsgSeq+Peer可获取具体消息 + } + if (element.grayTipElement.jsonGrayTipElement.busiId == 2407) { + //下面得改 上面也是错的grayTipElement.subElementType == GrayTipElementSubType.MEMBER_NEW_TITLE + const memberUin = json.items[1].param[0]; + const title = json.items[3].txt; + logger.logDebug('收到群成员新头衔消息', json); + return new OB11GroupTitleEvent( + core, + parseInt(msg.peerUid), + parseInt(memberUin), + title + ); + } + } + } + } +} diff --git a/src/onebot/helper/index.ts b/src/onebot/helper/index.ts index 6847ff05..09b6fda5 100644 --- a/src/onebot/helper/index.ts +++ b/src/onebot/helper/index.ts @@ -2,4 +2,5 @@ export * from './config'; export * from './message'; export * from './converter'; export * from './quick'; -export * from './msg'; \ No newline at end of file +export * from './msg'; +export * from './event'; \ No newline at end of file diff --git a/src/onebot/index.ts b/src/onebot/index.ts index bb48d169..c7f34bd4 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -35,7 +35,7 @@ import { OB11GroupRequestEvent } from '@/onebot/event/request/OB11GroupRequest'; import { OB11FriendRecallNoticeEvent } from '@/onebot/event/notice/OB11FriendRecallNoticeEvent'; import { OB11GroupRecallNoticeEvent } from '@/onebot/event/notice/OB11GroupRecallNoticeEvent'; import { LRUCache } from '@/common/utils/LRU'; -import { RawNTMsg2Onebot } from './helper'; +import { NT2GroupEvent, NT2PrivateEvent, RawNTMsg2Onebot } from './helper'; //OneBot实现类 export class NapCatOneBot11Adapter { @@ -468,14 +468,14 @@ export class NapCatOneBot11Adapter { this.networkManager.emitEvent(ob11Msg); }).catch(e => this.context.logger.logError('constructMessage error: ', e)); - OB11Constructor.GroupEvent(this.core, this, message).then(groupEvent => { + NT2GroupEvent(this.core, this, message).then(groupEvent => { if (groupEvent) { // log("post group event", groupEvent); this.networkManager.emitEvent(groupEvent); } }).catch(e => this.context.logger.logError('constructGroupEvent error: ', e)); - OB11Constructor.PrivateEvent(this.core, this, message).then(privateEvent => { + NT2PrivateEvent(this.core, this, message).then(privateEvent => { if (privateEvent) { // log("post private event", privateEvent); this.networkManager.emitEvent(privateEvent);