mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix
This commit is contained in:
@@ -71,6 +71,7 @@ export class NTQQMsgApi {
|
|||||||
async queryMsgsWithFilterExWithSeq(peer: Peer, msgSeq: string) {
|
async queryMsgsWithFilterExWithSeq(peer: Peer, msgSeq: string) {
|
||||||
return await this.context.session.getMsgService().queryMsgsWithFilterEx('0', '0', msgSeq, {
|
return await this.context.session.getMsgService().queryMsgsWithFilterEx('0', '0', msgSeq, {
|
||||||
chatInfo: peer,
|
chatInfo: peer,
|
||||||
|
//searchFields: 3,
|
||||||
filterMsgType: [],
|
filterMsgType: [],
|
||||||
filterSendersUid: [],
|
filterSendersUid: [],
|
||||||
filterMsgToTime: '0',
|
filterMsgToTime: '0',
|
||||||
@@ -84,6 +85,7 @@ export class NTQQMsgApi {
|
|||||||
return await this.context.session.getMsgService().queryMsgsWithFilterEx('0', '0', msgSeq, {
|
return await this.context.session.getMsgService().queryMsgsWithFilterEx('0', '0', msgSeq, {
|
||||||
chatInfo: peer,
|
chatInfo: peer,
|
||||||
filterMsgType: [],
|
filterMsgType: [],
|
||||||
|
//searchFields: 3,
|
||||||
filterSendersUid: SendersUid,
|
filterSendersUid: SendersUid,
|
||||||
filterMsgToTime: MsgTime,
|
filterMsgToTime: MsgTime,
|
||||||
filterMsgFromTime: MsgTime,
|
filterMsgFromTime: MsgTime,
|
||||||
@@ -100,6 +102,7 @@ export class NTQQMsgApi {
|
|||||||
filterMsgToTime: '0',
|
filterMsgToTime: '0',
|
||||||
filterMsgFromTime: '0',
|
filterMsgFromTime: '0',
|
||||||
isReverseOrder: false,
|
isReverseOrder: false,
|
||||||
|
//searchFields: 3,
|
||||||
isIncludeCurrent: true,
|
isIncludeCurrent: true,
|
||||||
pageLimit: 1,
|
pageLimit: 1,
|
||||||
});
|
});
|
||||||
@@ -110,6 +113,7 @@ export class NTQQMsgApi {
|
|||||||
filterMsgType: [],
|
filterMsgType: [],
|
||||||
filterSendersUid: [],
|
filterSendersUid: [],
|
||||||
filterMsgToTime: '0',
|
filterMsgToTime: '0',
|
||||||
|
//searchFields: 3,
|
||||||
filterMsgFromTime: '0',
|
filterMsgFromTime: '0',
|
||||||
isReverseOrder: true,
|
isReverseOrder: true,
|
||||||
isIncludeCurrent: true,
|
isIncludeCurrent: true,
|
||||||
@@ -128,6 +132,7 @@ export class NTQQMsgApi {
|
|||||||
chatInfo: peer,//此处为Peer 为关键查询参数 没有啥也没有 by mlik iowa
|
chatInfo: peer,//此处为Peer 为关键查询参数 没有啥也没有 by mlik iowa
|
||||||
filterMsgType: [],
|
filterMsgType: [],
|
||||||
filterSendersUid: [],
|
filterSendersUid: [],
|
||||||
|
//searchFields: 3,
|
||||||
filterMsgToTime: filterMsgToTime,
|
filterMsgToTime: filterMsgToTime,
|
||||||
filterMsgFromTime: filterMsgFromTime,
|
filterMsgFromTime: filterMsgFromTime,
|
||||||
isReverseOrder: false,
|
isReverseOrder: false,
|
||||||
@@ -142,6 +147,7 @@ export class NTQQMsgApi {
|
|||||||
chatInfo: peer,
|
chatInfo: peer,
|
||||||
filterMsgType: [],
|
filterMsgType: [],
|
||||||
filterSendersUid: SendersUid,
|
filterSendersUid: SendersUid,
|
||||||
|
//searchFields: 3,
|
||||||
filterMsgToTime: '0',
|
filterMsgToTime: '0',
|
||||||
filterMsgFromTime: '0',
|
filterMsgFromTime: '0',
|
||||||
isReverseOrder: true,
|
isReverseOrder: true,
|
||||||
|
@@ -148,10 +148,11 @@ export interface NodeIKernelMsgService {
|
|||||||
msgList: RawMessage[]
|
msgList: RawMessage[]
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
//@deprecated
|
// getMsgService/getMsgs { chatType: 2, peerUid: '975206796', privilegeFlag: 336068800 } 0 20 true
|
||||||
getMsgs(peer: Peer, msgId: string, count: unknown, queryOrder: boolean): Promise<unknown>;
|
getMsgs(peer: Peer & { privilegeFlag: number }, msgId: string, count: number, queryOrder: boolean): Promise<GeneralCallResult & {
|
||||||
|
msgList: RawMessage[]
|
||||||
|
}>;
|
||||||
|
|
||||||
//@deprecated
|
|
||||||
getMsgsIncludeSelf(peer: Peer, msgId: string, count: number, queryOrder: boolean): Promise<GeneralCallResult & {
|
getMsgsIncludeSelf(peer: Peer, msgId: string, count: number, queryOrder: boolean): Promise<GeneralCallResult & {
|
||||||
msgList: RawMessage[]
|
msgList: RawMessage[]
|
||||||
}>;
|
}>;
|
||||||
|
@@ -508,7 +508,8 @@ export interface RawMessage {
|
|||||||
* 查询消息参数接口
|
* 查询消息参数接口
|
||||||
*/
|
*/
|
||||||
export interface QueryMsgsParams {
|
export interface QueryMsgsParams {
|
||||||
chatInfo: Peer;
|
chatInfo: Peer & { privilegeFlag?: number };
|
||||||
|
//searchFields: number;
|
||||||
filterMsgType: Array<{ type: NTMsgType, subType: Array<number> }>;
|
filterMsgType: Array<{ type: NTMsgType, subType: Array<number> }>;
|
||||||
filterSendersUid: string[];
|
filterSendersUid: string[];
|
||||||
filterMsgFromTime: string;
|
filterMsgFromTime: string;
|
||||||
|
@@ -244,17 +244,13 @@ export class OneBotMsgApi {
|
|||||||
},
|
},
|
||||||
|
|
||||||
replyElement: async (element, msg) => {
|
replyElement: async (element, msg) => {
|
||||||
const records = msg.records.find(msgRecord => msgRecord.msgId === element?.sourceMsgIdInRecords);
|
|
||||||
const peer = {
|
const peer = {
|
||||||
chatType: msg.chatType,
|
chatType: msg.chatType,
|
||||||
peerUid: msg.peerUid,
|
peerUid: msg.peerUid,
|
||||||
guildId: '',
|
guildId: '',
|
||||||
};
|
};
|
||||||
if (!records || !element.replyMsgTime || !element.senderUidStr) {
|
|
||||||
this.core.context.logger.logError('似乎是旧版客户端,获取不到引用的消息', element.replayMsgSeq);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 创建回复数据的通用方法
|
||||||
const createReplyData = (msgId: string): OB11MessageData => ({
|
const createReplyData = (msgId: string): OB11MessageData => ({
|
||||||
type: OB11MessageDataType.reply,
|
type: OB11MessageDataType.reply,
|
||||||
data: {
|
data: {
|
||||||
@@ -262,48 +258,96 @@ export class OneBotMsgApi {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (records.peerUin === '284840486' || records.peerUin === '1094950020') {
|
// 查找记录
|
||||||
|
const records = msg.records.find(msgRecord => msgRecord.msgId === element?.sourceMsgIdInRecords);
|
||||||
|
|
||||||
|
// 特定账号的特殊处理
|
||||||
|
if (records && (records.peerUin === '284840486' || records.peerUin === '1094950020')) {
|
||||||
return createReplyData(records.msgId);
|
return createReplyData(records.msgId);
|
||||||
}
|
}
|
||||||
let replyMsgList = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeqV2(peer, element.replayMsgSeq, records.msgTime, [element.senderUidStr])).msgList;
|
|
||||||
let replyMsg = replyMsgList.find(msg => msg.msgRandom === records.msgRandom);
|
|
||||||
|
|
||||||
if (!replyMsg || records.msgRandom !== replyMsg.msgRandom) {
|
// 获取消息的通用方法组
|
||||||
this.core.context.logger.logError(
|
const tryFetchMethods = async (msgSeq: string, senderUid?: string, msgTime?: string, msgRandom?: string): Promise<RawMessage | undefined> => {
|
||||||
'筛选结果,筛选消息失败,将使用Fallback-1 Seq: ',
|
try {
|
||||||
element.replayMsgSeq,
|
// 方法1:通过序号和时间筛选
|
||||||
',消息长度:',
|
if (senderUid && msgTime) {
|
||||||
replyMsgList.length
|
const replyMsgList = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeqV2(
|
||||||
);
|
peer, msgSeq, msgTime, [senderUid]
|
||||||
replyMsgList = (await this.core.apis.MsgApi.getMsgsBySeqAndCount(peer, element.replayMsgSeq, 1, true, true)).msgList;
|
)).msgList;
|
||||||
replyMsg = replyMsgList.find(msg => msg.msgRandom === records.msgRandom);
|
|
||||||
|
const replyMsg = msgRandom
|
||||||
|
? replyMsgList.find(msg => msg.msgRandom === msgRandom)
|
||||||
|
: replyMsgList.find(msg => msg.msgSeq === msgSeq);
|
||||||
|
|
||||||
|
if (replyMsg) return replyMsg;
|
||||||
|
|
||||||
|
this.core.context.logger.logWarn(`方法1查询失败,序号: ${msgSeq}, 消息数: ${replyMsgList.length}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!replyMsg || records.msgRandom !== replyMsg.msgRandom) {
|
// 方法2:直接通过序号获取
|
||||||
this.core.context.logger.logWarn(
|
const replyMsgList = (await this.core.apis.MsgApi.getMsgsBySeqAndCount(
|
||||||
'筛选消息失败,将使用Fallback-2 Seq:',
|
peer, msgSeq, 1, true, true
|
||||||
element.replayMsgSeq,
|
)).msgList;
|
||||||
',消息长度:',
|
|
||||||
replyMsgList.length
|
const replyMsg = msgRandom
|
||||||
);
|
? replyMsgList.find(msg => msg.msgRandom === msgRandom)
|
||||||
replyMsgList = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeqV3(peer, element.replayMsgSeq, [element.senderUidStr])).msgList;
|
: replyMsgList.find(msg => msg.msgSeq === msgSeq);
|
||||||
replyMsg = replyMsgList.find(msg => msg.msgRandom === records.msgRandom);
|
|
||||||
|
if (replyMsg) return replyMsg;
|
||||||
|
|
||||||
|
this.core.context.logger.logWarn(`方法2查询失败,序号: ${msgSeq}, 消息数: ${replyMsgList.length}`);
|
||||||
|
|
||||||
|
// 方法3:另一种筛选方式
|
||||||
|
if (senderUid) {
|
||||||
|
const replyMsgList = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeqV3(
|
||||||
|
peer, msgSeq, [senderUid]
|
||||||
|
)).msgList;
|
||||||
|
|
||||||
|
const replyMsg = msgRandom
|
||||||
|
? replyMsgList.find(msg => msg.msgRandom === msgRandom)
|
||||||
|
: replyMsgList.find(msg => msg.msgSeq === msgSeq);
|
||||||
|
|
||||||
|
if (replyMsg) return replyMsg;
|
||||||
|
|
||||||
|
this.core.context.logger.logWarn(`方法3查询失败,序号: ${msgSeq}, 消息数: ${replyMsgList.length}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
// 丢弃该消息段
|
} catch (error) {
|
||||||
if (!replyMsg || records.msgRandom !== replyMsg.msgRandom) {
|
this.core.context.logger.logError('查询回复消息出错', error);
|
||||||
this.core.context.logger.logError(
|
return undefined;
|
||||||
'最终筛选结果,筛选消息失败,获取不到引用的消息 Seq: ',
|
|
||||||
element.replayMsgSeq,
|
|
||||||
',消息长度:',
|
|
||||||
replyMsgList.length
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 有记录情况下,使用完整信息查询
|
||||||
|
if (records && element.replyMsgTime && element.senderUidStr) {
|
||||||
|
const replyMsg = await tryFetchMethods(
|
||||||
|
element.replayMsgSeq,
|
||||||
|
element.senderUidStr,
|
||||||
|
records.msgTime,
|
||||||
|
records.msgRandom
|
||||||
|
);
|
||||||
|
|
||||||
|
if (replyMsg) {
|
||||||
return createReplyData(replyMsg.msgId);
|
return createReplyData(replyMsg.msgId);
|
||||||
},
|
}
|
||||||
|
|
||||||
|
this.core.context.logger.logError('所有查找方法均失败,获取不到带记录的引用消息', element.replayMsgSeq);
|
||||||
|
} else {
|
||||||
|
// 旧版客户端或不完整记录的情况,也尝试使用相同流程
|
||||||
|
this.core.context.logger.logWarn('似乎是旧版客户端,尝试仅通过序号获取引用消息', element.replayMsgSeq);
|
||||||
|
|
||||||
|
const replyMsg = await tryFetchMethods(element.replayMsgSeq);
|
||||||
|
|
||||||
|
if (replyMsg) {
|
||||||
|
return createReplyData(replyMsg.msgId);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.core.context.logger.logError('所有查找方法均失败,获取不到旧客户端的引用消息', element.replayMsgSeq);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
},
|
||||||
videoElement: async (element, msg, elementWrapper) => {
|
videoElement: async (element, msg, elementWrapper) => {
|
||||||
const peer = {
|
const peer = {
|
||||||
chatType: msg.chatType,
|
chatType: msg.chatType,
|
||||||
|
Reference in New Issue
Block a user