diff --git a/src/core/src/apis/friend.ts b/src/core/src/apis/friend.ts index d04d84f3..71188509 100644 --- a/src/core/src/apis/friend.ts +++ b/src/core/src/apis/friend.ts @@ -1,21 +1,31 @@ -import { FriendRequest, User } from '@/core/entities'; -import { BuddyListReqType, napCatCore, NodeIKernelBuddyListener, OnBuddyChangeParams } from '@/core'; +import { FriendRequest, SimpleInfo, User } from '@/core/entities'; +import { BuddyListReqType, napCatCore, NodeIKernelBuddyListener, NodeIKernelProfileService, OnBuddyChangeParams } from '@/core'; import { NTEventDispatch } from '@/common/utils/EventTask'; export class NTQQFriendApi { - static async getBuddyV2(refresh = false) { + static async getBuddyV2(refresh = false): Promise { // NTEventDispatch.RegisterListen('NodeIKernelBuddyListener/onBuddyListChange', 1, 5000, (arg: OnBuddyChangeParams) => { // console.log(arg); // return true; // }).catch().then(); + let uids: string[]; if (!refresh) { - return await napCatCore.session.getBuddyService().getBuddyListFromCache('0'); + uids = (await napCatCore.session.getBuddyService().getBuddyListFromCache('0')).flatMap((item) => item.buddyUids); } - return (await (napCatCore.session.getBuddyService().getBuddyListV2('0', BuddyListReqType.KNOMAL))).data; + uids = (await (napCatCore.session.getBuddyService().getBuddyListV2('0', BuddyListReqType.KNOMAL))).data.flatMap((item) => item.buddyUids); + let data = await NTEventDispatch.CallNoListenerEvent('NodeIKernelProfileService/getCoreAndBaseInfo', 5000, 'nodeStore', uids); + //遍历data + let retArr = Array.from(data.values()); + return retArr; } static async isBuddy(uid: string) { return napCatCore.session.getBuddyService().isBuddy(uid); } + /** + * @deprecated + * @param forced + * @returns + */ static async getFriends(forced = false): Promise { let [_retData, _BuddyArg] = await NTEventDispatch.CallNormalEvent <(force: boolean) => Promise, (arg: OnBuddyChangeParams) => void> diff --git a/src/core/src/entities/group.ts b/src/core/src/entities/group.ts index c05d2c2f..345e1538 100644 --- a/src/core/src/entities/group.ts +++ b/src/core/src/entities/group.ts @@ -2,11 +2,12 @@ import { QQLevel, Sex } from './user'; export interface Group { groupCode: string, + createTime?:string,//高版本才有 maxMember: number, memberCount: number, groupName: string, - groupStatus: 0, - memberRole: 2, + groupStatus: number, + memberRole: number, isTop: boolean, toppedTimestamp: string, privilegeFlag: number, //65760 diff --git a/src/core/src/entities/user.ts b/src/core/src/entities/user.ts index 20f5ff37..1946802a 100644 --- a/src/core/src/entities/user.ts +++ b/src/core/src/entities/user.ts @@ -9,14 +9,14 @@ export interface BuddyCategoryType { categroyMbCount: number; buddyList: User[]; } -interface CoreInfo { +export interface CoreInfo { uid: string; uin: string; nick: string; remark: string; } -interface BaseInfo { +export interface BaseInfo { qid: string; longNick: string; birthday_year: number; @@ -162,16 +162,16 @@ interface PhotoWall { picList: Pic[]; } -interface SimpleInfo { - uid: string; - uin: string; +export interface SimpleInfo { + uid?: string; + uin?: string; coreInfo: CoreInfo; baseInfo: BaseInfo; - status: UserStatus; - vasInfo: VasInfo; - relationFlags: RelationFlags; - otherFlags: any; - intimate: any; + status: UserStatus | null; + vasInfo: VasInfo | null; + relationFlags: RelationFlags | null; + otherFlags: any | null; + intimate: any | null; } export interface UserDetailInfoListenerArg { @@ -272,7 +272,7 @@ export interface Friend extends User { } export enum BizKey { KPRIVILEGEICON, KPHOTOWALL - } +} export interface UserDetailInfoByUin { result: number, errMsg: string, diff --git a/src/core/src/services/NodeIKernelMsgService.ts b/src/core/src/services/NodeIKernelMsgService.ts index 9e654973..ae1d4a1e 100644 --- a/src/core/src/services/NodeIKernelMsgService.ts +++ b/src/core/src/services/NodeIKernelMsgService.ts @@ -5,7 +5,7 @@ import { GeneralCallResult } from '@/core/services/common'; export interface QueryMsgsParams { chatInfo: Peer, filterMsgType: [], - filterSendersUid: [], + filterSendersUid: string[], filterMsgFromTime: string, filterMsgToTime: string, pageLimit: number, diff --git a/src/core/src/services/NodeIKernelProfileService.ts b/src/core/src/services/NodeIKernelProfileService.ts index 6b61be55..403f1a31 100644 --- a/src/core/src/services/NodeIKernelProfileService.ts +++ b/src/core/src/services/NodeIKernelProfileService.ts @@ -1,5 +1,5 @@ import { AnyCnameRecord } from 'node:dns'; -import { BizKey, ModifyProfileParams, UserDetailInfoByUin } from '../entities'; +import { BaseInfo, BizKey, CoreInfo, ModifyProfileParams, SimpleInfo, UserDetailInfoByUin } from '../entities'; import { NodeIKernelProfileListener } from '../listeners'; import { GeneralCallResult } from '@/core/services/common'; export enum UserDetailSource { @@ -14,6 +14,17 @@ export enum ProfileBizType { KOTHER } export interface NodeIKernelProfileService { + // { + // coreInfo: CoreInfo, + // baseInfo: BaseInfo, + // status: null, + // vasInfo: null, + // relationFlags: null, + // otherFlags: null, + // intimate: null + // } + getCoreAndBaseInfo(callfrom: string, uids: string[]): Promise>; + fetchUserDetailInfo(trace: string, uids: string[], arg2: number, arg3: number[]): Promise; addKernelProfileListener(listener: NodeIKernelProfileListener): number; diff --git a/src/core/src/services/NodeIKernelRobotService.ts b/src/core/src/services/NodeIKernelRobotService.ts index 14c1aef8..9df5cdce 100644 --- a/src/core/src/services/NodeIKernelRobotService.ts +++ b/src/core/src/services/NodeIKernelRobotService.ts @@ -21,7 +21,7 @@ export interface NodeIKernelRobotService { removeKernelRobotListener(ListenerId: number): unknown; - getAllRobotFriendsFromCache(): unknown; + getAllRobotFriendsFromCache(): Promise; fetchAllRobots(arg1: unknown, arg2: unknown): unknown; diff --git a/src/onebot11/action/user/GetFriendList.ts b/src/onebot11/action/user/GetFriendList.ts index fe12e977..e72eaa31 100644 --- a/src/onebot11/action/user/GetFriendList.ts +++ b/src/onebot11/action/user/GetFriendList.ts @@ -5,6 +5,7 @@ import BaseAction from '../BaseAction'; import { ActionName } from '../types'; import { NTQQFriendApi } from '@/core'; import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; // no_cache get时传字符串 @@ -20,7 +21,10 @@ export default class GetFriendList extends BaseAction { actionName = ActionName.GetFriendList; PayloadSchema = SchemaData; protected async _handle(payload: Payload) { - //let data = await NTQQFriendApi.getBuddyV2(payload?.no_cache === true || payload?.no_cache=== 'true'); + if (requireMinNTQQBuild('26702')) { + //全新逻辑 + return OB11Constructor.friendsV2(await NTQQFriendApi.getBuddyV2(payload?.no_cache === true || payload?.no_cache === 'true')); + } if (friends.size === 0 || payload?.no_cache === true || payload?.no_cache === 'true') { const _friends = await NTQQFriendApi.getFriends(true); // log('强制刷新好友列表,结果: ', _friends) diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 783ea611..17808394 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -22,6 +22,7 @@ import { RawMessage, SelfInfo, Sex, + SimpleInfo, TipGroupElementType, User, VideoElement @@ -206,13 +207,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - FileElement.fileSize, - FileElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + FileElement.fileSize, + FileElement.fileName ); } else if (element.videoElement) { @@ -253,13 +254,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - videoElement.fileSize || '0', - videoElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + videoElement.fileSize || '0', + videoElement.fileName ); } else if (element.pttElement) { @@ -274,13 +275,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作为文件名 } @@ -552,7 +553,14 @@ export class OB11Constructor { nickname: selfInfo.nick, }; } - + static friendsV2(friends: SimpleInfo[]): OB11User[] { + const data: OB11User[] = []; + friends.forEach(friend => { + const sexValue = this.sex(friend.baseInfo.sex!); + data.push({ ...friend.baseInfo, ...friend.coreInfo, user_id: parseInt(friend.coreInfo.uin), nickname: friend.coreInfo.nick, remark: friend.coreInfo.nick, sex: sexValue, level: 0 }); + }); + return data; + } static friends(friends: Friend[]): OB11User[] { const data: OB11User[] = []; friends.forEach(friend => {