chore: 临时会话

This commit is contained in:
手瓜一十雪 2024-08-11 15:43:13 +08:00
parent 427889f8ca
commit 7a88786685
3 changed files with 128 additions and 78 deletions

View File

@ -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 { InstanceContext, NapCatCore } from '@/core';
import { onGroupFileInfoUpdateParamType } from '@/core/listeners'; import { onGroupFileInfoUpdateParamType } from '@/core/listeners';
import { GeneralCallResult } from '@/core/services/common'; import { GeneralCallResult } from '@/core/services/common';
@ -103,18 +103,18 @@ export class NTQQMsgApi {
const data = await this.core.eventWrapper.CallNormalEvent< const data = await this.core.eventWrapper.CallNormalEvent<
(GroupCode: string, params: GetFileListParam) => Promise<unknown>, (GroupCode: string, params: GetFileListParam) => Promise<unknown>,
(groupFileListResult: onGroupFileInfoUpdateParamType) => void (groupFileListResult: onGroupFileInfoUpdateParamType) => void
>( >(
'NodeIKernelRichMediaService/getGroupFileList', 'NodeIKernelRichMediaService/getGroupFileList',
'NodeIKernelMsgListener/onGroupFileInfoUpdate', 'NodeIKernelMsgListener/onGroupFileInfoUpdate',
1, 1,
5000, 5000,
(groupFileListResult: onGroupFileInfoUpdateParamType) => { (groupFileListResult: onGroupFileInfoUpdateParamType) => {
//Developer Mlikiowa Todo: 此处有问题 无法判断是否成功 //Developer Mlikiowa Todo: 此处有问题 无法判断是否成功
return true; return true;
}, },
GroupCode, GroupCode,
params, params,
); );
return data[1].item; return data[1].item;
} }
@ -155,24 +155,24 @@ export class NTQQMsgApi {
const data = await this.core.eventWrapper.CallNormalEvent< const data = await this.core.eventWrapper.CallNormalEvent<
(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>, (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>,
(msgList: RawMessage[]) => void (msgList: RawMessage[]) => void
>( >(
'NodeIKernelMsgService/sendMsg', 'NodeIKernelMsgService/sendMsg',
'NodeIKernelMsgListener/onMsgInfoListUpdate', 'NodeIKernelMsgListener/onMsgInfoListUpdate',
1, 1,
timeout, timeout,
(msgRecords: RawMessage[]) => { (msgRecords: RawMessage[]) => {
for (const msgRecord of msgRecords) { for (const msgRecord of msgRecords) {
if (msgRecord.msgId === msgId && msgRecord.sendStatus === 2) { if (msgRecord.msgId === msgId && msgRecord.sendStatus === 2) {
return true; return true;
}
} }
return false; }
}, return false;
msgId, },
peer, msgId,
msgElements, peer,
new Map(), msgElements,
); new Map(),
);
const retMsg = data[1].find(msgRecord => { const retMsg = data[1].find(msgRecord => {
if (msgRecord.msgId === msgId) { if (msgRecord.msgId === msgId) {
return true; return true;
@ -184,32 +184,60 @@ export class NTQQMsgApi {
sendMsgEx(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { sendMsgEx(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
//return NTQQMsgApi.sendMsgV1(peer, msgElements, waitComplete, timeout); //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) { 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()); const msgId = await this.getMsgUnique(peer.chatType, await this.getServerTime());
peer.guildId = msgId; peer.guildId = msgId;
const data = await this.core.eventWrapper.CallNormalEvent< const data = await this.core.eventWrapper.CallNormalEvent<
(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>, (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>,
(msgList: RawMessage[]) => void (msgList: RawMessage[]) => void
>( >(
'NodeIKernelMsgService/sendMsg', 'NodeIKernelMsgService/sendMsg',
'NodeIKernelMsgListener/onMsgInfoListUpdate', 'NodeIKernelMsgListener/onMsgInfoListUpdate',
1, 1,
timeout, timeout,
(msgRecords: RawMessage[]) => { (msgRecords: RawMessage[]) => {
for (const msgRecord of msgRecords) { for (const msgRecord of msgRecords) {
if (msgRecord.guildId === msgId && msgRecord.sendStatus === 2) { if (msgRecord.guildId === msgId && msgRecord.sendStatus === 2) {
return true; return true;
}
} }
return false; }
}, return false;
'0', },
peer, '0',
msgElements, peer,
new Map(), msgElements,
); new Map(),
);
const retMsg = data[1].find(msgRecord => { const retMsg = data[1].find(msgRecord => {
if (msgRecord.guildId === msgId) { if (msgRecord.guildId === msgId) {
return true; return true;
@ -244,25 +272,25 @@ export class NTQQMsgApi {
const data = await this.core.eventWrapper.CallNormalEvent< const data = await this.core.eventWrapper.CallNormalEvent<
(msgInfo: typeof msgInfos, srcPeer: Peer, destPeer: Peer, comment: Array<any>, attr: Map<any, any>) => Promise<unknown>, (msgInfo: typeof msgInfos, srcPeer: Peer, destPeer: Peer, comment: Array<any>, attr: Map<any, any>) => Promise<unknown>,
(msgList: RawMessage[]) => void (msgList: RawMessage[]) => void
>( >(
'NodeIKernelMsgService/multiForwardMsgWithComment', 'NodeIKernelMsgService/multiForwardMsgWithComment',
'NodeIKernelMsgListener/onMsgInfoListUpdate', 'NodeIKernelMsgListener/onMsgInfoListUpdate',
1, 1,
5000, 5000,
(msgRecords: RawMessage[]) => { (msgRecords: RawMessage[]) => {
for (const msgRecord of msgRecords) { for (const msgRecord of msgRecords) {
if (msgRecord.peerUid == destPeer.peerUid && msgRecord.senderUid == this.core.selfInfo.uid) { if (msgRecord.peerUid == destPeer.peerUid && msgRecord.senderUid == this.core.selfInfo.uid) {
return true; return true;
}
} }
return false; }
}, return false;
msgInfos, },
srcPeer, msgInfos,
destPeer, srcPeer,
[], destPeer,
new Map(), [],
); new Map(),
);
for (const msg of data[1]) { for (const msg of data[1]) {
const arkElement = msg.elements.find(ele => ele.arkElement); const arkElement = msg.elements.find(ele => ele.arkElement);
if (!arkElement) { if (!arkElement) {

View File

@ -12,6 +12,20 @@ export interface QueryMsgsParams {
isReverseOrder: boolean, isReverseOrder: boolean,
isIncludeCurrent: 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 { export interface NodeIKernelMsgService {
@ -497,11 +511,11 @@ export interface NodeIKernelMsgService {
result: number, result: number,
errMsg: string, errMsg: string,
emojiLikesList: emojiLikesList:
Array<{ Array<{
tinyId: string, tinyId: string,
nickName: string, nickName: string,
headUrl: string headUrl: string
}>, }>,
cookie: string, cookie: string,
isLastPage: boolean, isLastPage: boolean,
isFirstPage: boolean isFirstPage: boolean
@ -624,7 +638,7 @@ export interface NodeIKernelMsgService {
sendSsoCmdReqByContend(cmd: string, param: string): Promise<unknown>; sendSsoCmdReqByContend(cmd: string, param: string): Promise<unknown>;
//chattype,uid->Promise<any> //chattype,uid->Promise<any>
getTempChatInfo(ChatType: number, Uid: string): unknown; getTempChatInfo(ChatType: number, Uid: string): Promise<TmpChatInfoApi>;
setContactLocalTop(...args: unknown[]): unknown; setContactLocalTop(...args: unknown[]): unknown;

View File

@ -88,6 +88,14 @@ export class OB11Constructor {
//resMsg.sender.nickname = user.info.nick; //resMsg.sender.nickname = user.info.nick;
} else if (msg.chatType == ChatType.temp) { } else if (msg.chatType == ChatType.temp) {
resMsg.sub_type = 'group'; 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) { for (const element of msg.elements) {
let message_data: OB11MessageData = { let message_data: OB11MessageData = {
@ -270,13 +278,13 @@ export class OB11Constructor {
chatType: msg.chatType, chatType: msg.chatType,
guildId: '', guildId: '',
}, },
msg.msgId, msg.msgId,
msg.msgSeq, msg.msgSeq,
msg.senderUid, msg.senderUid,
element.elementId, element.elementId,
element.elementType.toString(), element.elementType.toString(),
element.pttElement.fileSize || '0', element.pttElement.fileSize || '0',
element.pttElement.fileUuid || '', element.pttElement.fileUuid || '',
); );
//以uuid作为文件名 //以uuid作为文件名
} else if (element.arkElement) { } else if (element.arkElement) {