diff --git a/src/core/apis/msg.ts b/src/core/apis/msg.ts index 0465923b..5a90215f 100644 --- a/src/core/apis/msg.ts +++ b/src/core/apis/msg.ts @@ -1,4 +1,4 @@ -import { GetFileListParam, Peer, RawMessage, SendMessageElement } from '@/core/entities'; +import { ChatType, GetFileListParam, Peer, RawMessage, SendMessageElement } from '@/core/entities'; import { InstanceContext, NapCatCore } from '@/core'; import { onGroupFileInfoUpdateParamType } from '@/core/listeners'; import { GeneralCallResult } from '@/core/services/common'; @@ -103,18 +103,18 @@ export class NTQQMsgApi { const data = await this.core.eventWrapper.CallNormalEvent< (GroupCode: string, params: GetFileListParam) => Promise, (groupFileListResult: onGroupFileInfoUpdateParamType) => void - >( - 'NodeIKernelRichMediaService/getGroupFileList', - 'NodeIKernelMsgListener/onGroupFileInfoUpdate', - 1, - 5000, - (groupFileListResult: onGroupFileInfoUpdateParamType) => { + >( + 'NodeIKernelRichMediaService/getGroupFileList', + 'NodeIKernelMsgListener/onGroupFileInfoUpdate', + 1, + 5000, + (groupFileListResult: onGroupFileInfoUpdateParamType) => { //Developer Mlikiowa Todo: 此处有问题 无法判断是否成功 - return true; - }, - GroupCode, - params, - ); + return true; + }, + GroupCode, + params, + ); return data[1].item; } @@ -155,24 +155,24 @@ export class NTQQMsgApi { const data = await this.core.eventWrapper.CallNormalEvent< (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map) => Promise, (msgList: RawMessage[]) => void - >( - 'NodeIKernelMsgService/sendMsg', - 'NodeIKernelMsgListener/onMsgInfoListUpdate', - 1, - timeout, - (msgRecords: RawMessage[]) => { - for (const msgRecord of msgRecords) { - if (msgRecord.msgId === msgId && msgRecord.sendStatus === 2) { - return true; - } + >( + 'NodeIKernelMsgService/sendMsg', + 'NodeIKernelMsgListener/onMsgInfoListUpdate', + 1, + timeout, + (msgRecords: RawMessage[]) => { + for (const msgRecord of msgRecords) { + if (msgRecord.msgId === msgId && msgRecord.sendStatus === 2) { + return true; } - return false; - }, - msgId, - peer, - msgElements, - new Map(), - ); + } + return false; + }, + msgId, + peer, + msgElements, + new Map(), + ); const retMsg = data[1].find(msgRecord => { if (msgRecord.msgId === msgId) { return true; @@ -184,32 +184,60 @@ export class NTQQMsgApi { sendMsgEx(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { //return NTQQMsgApi.sendMsgV1(peer, msgElements, waitComplete, timeout); } - + async PrepareTempChat(toUserUid: string, GroupCode: string, nickname: string) { + //By Jadx/Ida Mlikiowa + let TempGameSession = { + nickname: "", + gameAppId: "", + selfTinyId: "", + peerRoleId: "", + peerOpenId: "", + }; + return this.context.session.getMsgService().prepareTempChat({ + chatType: ChatType.temp, + peerUid: toUserUid, + peerNickname: nickname, + fromGroupCode: GroupCode, + sig: "", + selfPhone: "", + selfUid: this.core.selfInfo.uid, + gameSession: TempGameSession + }); + } + async getTempChatInfo(chatType: ChatType, peerUid: string) { + return this.context.session.getMsgService().getTempChatInfo(chatType, peerUid); + } async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { //唉? !我有个想法 + if (peer.chatType === ChatType.temp && peer.guildId && peer.guildId !== '') { + let member = await this.core.ApiContext.GroupApi.getGroupMember(peer.guildId, peer.peerUid!); + if (member) { + await this.PrepareTempChat(peer.peerUid, peer.guildId, member.nick); + } + } const msgId = await this.getMsgUnique(peer.chatType, await this.getServerTime()); peer.guildId = msgId; const data = await this.core.eventWrapper.CallNormalEvent< (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map) => Promise, (msgList: RawMessage[]) => void - >( - 'NodeIKernelMsgService/sendMsg', - 'NodeIKernelMsgListener/onMsgInfoListUpdate', - 1, - timeout, - (msgRecords: RawMessage[]) => { - for (const msgRecord of msgRecords) { - if (msgRecord.guildId === msgId && msgRecord.sendStatus === 2) { - return true; - } + >( + 'NodeIKernelMsgService/sendMsg', + 'NodeIKernelMsgListener/onMsgInfoListUpdate', + 1, + timeout, + (msgRecords: RawMessage[]) => { + for (const msgRecord of msgRecords) { + if (msgRecord.guildId === msgId && msgRecord.sendStatus === 2) { + return true; } - return false; - }, - '0', - peer, - msgElements, - new Map(), - ); + } + return false; + }, + '0', + peer, + msgElements, + new Map(), + ); const retMsg = data[1].find(msgRecord => { if (msgRecord.guildId === msgId) { return true; @@ -244,25 +272,25 @@ export class NTQQMsgApi { const data = await this.core.eventWrapper.CallNormalEvent< (msgInfo: typeof msgInfos, srcPeer: Peer, destPeer: Peer, comment: Array, attr: Map) => Promise, (msgList: RawMessage[]) => void - >( - 'NodeIKernelMsgService/multiForwardMsgWithComment', - 'NodeIKernelMsgListener/onMsgInfoListUpdate', - 1, - 5000, - (msgRecords: RawMessage[]) => { - for (const msgRecord of msgRecords) { - if (msgRecord.peerUid == destPeer.peerUid && msgRecord.senderUid == this.core.selfInfo.uid) { - return true; - } + >( + 'NodeIKernelMsgService/multiForwardMsgWithComment', + 'NodeIKernelMsgListener/onMsgInfoListUpdate', + 1, + 5000, + (msgRecords: RawMessage[]) => { + for (const msgRecord of msgRecords) { + if (msgRecord.peerUid == destPeer.peerUid && msgRecord.senderUid == this.core.selfInfo.uid) { + return true; } - return false; - }, - msgInfos, - srcPeer, - destPeer, - [], - new Map(), - ); + } + return false; + }, + msgInfos, + srcPeer, + destPeer, + [], + new Map(), + ); for (const msg of data[1]) { const arkElement = msg.elements.find(ele => ele.arkElement); if (!arkElement) { diff --git a/src/core/services/NodeIKernelMsgService.ts b/src/core/services/NodeIKernelMsgService.ts index ead24875..44756bfb 100644 --- a/src/core/services/NodeIKernelMsgService.ts +++ b/src/core/services/NodeIKernelMsgService.ts @@ -12,6 +12,20 @@ export interface QueryMsgsParams { isReverseOrder: boolean, isIncludeCurrent: boolean } +export interface TmpChatInfoApi { + errMsg: string; + result: number; + tmpChatInfo?: TmpChatInfo; +} + +export interface TmpChatInfo { + chatType: number; + fromNick: string; + groupCode: string; + peerUid: string; + sessionType: number; + sig: string; +} export interface NodeIKernelMsgService { @@ -497,11 +511,11 @@ export interface NodeIKernelMsgService { result: number, errMsg: string, emojiLikesList: - Array<{ - tinyId: string, - nickName: string, - headUrl: string - }>, + Array<{ + tinyId: string, + nickName: string, + headUrl: string + }>, cookie: string, isLastPage: boolean, isFirstPage: boolean @@ -624,7 +638,7 @@ export interface NodeIKernelMsgService { sendSsoCmdReqByContend(cmd: string, param: string): Promise; //chattype,uid->Promise - getTempChatInfo(ChatType: number, Uid: string): unknown; + getTempChatInfo(ChatType: number, Uid: string): Promise; setContactLocalTop(...args: unknown[]): unknown; diff --git a/src/onebot/helper/data.ts b/src/onebot/helper/data.ts index 54a3f801..5e2ecc43 100644 --- a/src/onebot/helper/data.ts +++ b/src/onebot/helper/data.ts @@ -88,6 +88,14 @@ export class OB11Constructor { //resMsg.sender.nickname = user.info.nick; } else if (msg.chatType == ChatType.temp) { resMsg.sub_type = 'group'; + let ret = await NTQQMsgApi.getTempChatInfo(ChatType.temp, msg.senderUid); + if (ret.result === 0) { + resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode); + resMsg.sender.nickname = ret.tmpChatInfo!.fromNick; + } else { + resMsg.group_id = 284840486;//兜底数据 + resMsg.sender.nickname = "临时会话"; + } } for (const element of msg.elements) { let message_data: OB11MessageData = { @@ -270,13 +278,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - element.pttElement.fileSize || '0', - element.pttElement.fileUuid || '', + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + element.pttElement.fileSize || '0', + element.pttElement.fileUuid || '', ); //以uuid作为文件名 } else if (element.arkElement) {