From dfc7c7357aebe327da9fbfc7d41ed5f3067f28e9 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: Sun, 4 Aug 2024 16:37:15 +0800 Subject: [PATCH] Refactor Api: GetFriendsWithCategory --- src/core/src/apis/friend.ts | 58 +++++-------------- src/core/src/core.ts | 35 ++++------- src/core/src/data.ts | 1 - .../action/extends/GetFriendWithCategory.ts | 13 ++++- src/onebot11/action/user/GetFriendList.ts | 2 +- 5 files changed, 36 insertions(+), 73 deletions(-) diff --git a/src/core/src/apis/friend.ts b/src/core/src/apis/friend.ts index 742d0da1..486b8c4e 100644 --- a/src/core/src/apis/friend.ts +++ b/src/core/src/apis/friend.ts @@ -4,59 +4,29 @@ import { NTEventDispatch } from '@/common/utils/EventTask'; export class NTQQFriendApi { static async getBuddyV2(refresh = false): Promise { - let uids: string[]; - let categoryMap: Map = new Map(); - if (!refresh) { - uids = (await napCatCore.session.getBuddyService().getBuddyListFromCache('0')).flatMap((item) => { - for (let i = 0; i < item.buddyUids.length; i++) { - categoryMap.set(item.buddyUids[i], { categoryId: item.categoryId, categroyName: item.categroyName }); - } - return item.buddyUids; - }); - } - 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: FriendV2[] = []; - data.forEach((value, key) => { - let category = categoryMap.get(key); - if (category) { - retArr.push({ - ...value, - categoryId: category.categoryId, - categroyName: category.categroyName - }); - } - }) - return retArr; + let uids: string[] = []; + const buddyService = napCatCore.session.getBuddyService(); + const buddyListV2 = refresh ? await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL) : await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL); + uids.push(...buddyListV2.data.flatMap(item => item.buddyUids)); + const data = await NTEventDispatch.CallNoListenerEvent( + 'NodeIKernelProfileService/getCoreAndBaseInfo', 5000, 'nodeStore', uids + ); + return Array.from(data.values()); } - static async getBuddyV2Ex(refresh = false): Promise { + static async getBuddyV2ExWithCate(refresh = false) { let uids: string[] = []; let categoryMap: Map = new Map(); - const buddyService = napCatCore.session.getBuddyService(); - - if (!refresh) { - const cachedBuddyList = await buddyService.getBuddyListFromCache('0'); - cachedBuddyList.forEach(item => { - item.buddyUids.forEach(uid => { - categoryMap.set(uid, { categoryId: item.categoryId, categroyName: item.categroyName }); - }); - uids.push(...item.buddyUids); - }); - } - - const buddyListV2 = await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL); + const buddyListV2 = refresh ? await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL) : await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL); uids.push(...buddyListV2.data.flatMap(item => item.buddyUids)); - const data = await NTEventDispatch.CallNoListenerEvent( - 'NodeIKernelProfileService/getCoreAndBaseInfo', 5000, 'nodeStore', uids + 'NodeIKernelProfileService/getCoreAndBaseInfo', 5000, 'nodeStore', uids ); return Array.from(data).map(([key, value]) => { - const category = categoryMap.get(key); - return category ? { ...value, categoryId: category.categoryId, categroyName: category.categroyName } : value; + const category = categoryMap.get(key); + return category ? { ...value, categoryId: category.categoryId, categroyName: category.categroyName } : value; }); -} + } static async isBuddy(uid: string) { return napCatCore.session.getBuddyService().isBuddy(uid); } diff --git a/src/core/src/core.ts b/src/core/src/core.ts index 45288c30..7b205d13 100644 --- a/src/core/src/core.ts +++ b/src/core/src/core.ts @@ -15,12 +15,12 @@ import { DependsAdapter, DispatcherAdapter, GlobalAdapter, NodeIGlobalAdapter } import path from 'node:path'; import os from 'node:os'; import fs from 'node:fs'; -import { getFullQQVesion, QQVersionAppid, QQVersionQua } from '@/common/utils/QQBasicInfo'; +import { getFullQQVesion, QQVersionAppid, QQVersionQua, requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; import { hostname, systemVersion } from '@/common/utils/system'; import { genSessionConfig } from '@/core/sessionConfig'; import { sleep } from '@/common/utils/helper'; import crypto from 'node:crypto'; -import { rawFriends, friends, groupMembers, groups, selfInfo, stat } from '@/core/data'; +import { friends, groupMembers, groups, selfInfo, stat } from '@/core/data'; import { GroupMember, RawMessage } from '@/core/entities'; import { NTEventDispatch } from '@/common/utils/EventTask'; import { @@ -254,29 +254,16 @@ export class NapCatCore { this.addListener(msgListener); // 好友相关 const buddyListener = new BuddyListener(); - buddyListener.onBuddyListChange = arg => { - rawFriends.length = 0; - rawFriends.push(...arg); - // console.log('onBuddyListChange', arg); - for (const categoryItem of arg) { - for (const friend of categoryItem.buddyList) { - // console.log("onBuddyListChange", friend) - const existFriend = friends.get(friend.uid); - if (existFriend) { - Object.assign(existFriend, friend); - } - else { - friends.set(friend.uid, friend); - } - } - // console.log("onBuddyListChange", friend) - } - }; + + this.addListener(buddyListener); - // 刷新一次好友列表 - this.session.getBuddyService().getBuddyList(true).then(arg => { - // console.log('getBuddyList', arg); - }); + // 刷新一次好友列表 26702版本以下需要手动刷新一次获取 高版本NTQQ自带缓存 + if (!requireMinNTQQBuild('26702')) { + this.session.getBuddyService().getBuddyList(true).then(arg => { + // console.log('getBuddyList', arg); + }); + } + interface SelfStatusInfo { uid: string status: number diff --git a/src/core/src/data.ts b/src/core/src/data.ts index 24965a3c..31143f41 100644 --- a/src/core/src/data.ts +++ b/src/core/src/data.ts @@ -28,7 +28,6 @@ export const groupMembers: Map> = new Map Friend 下面这俩个准备移除 QQ里面自带缓存 export const friends: Map = new Map(); -export const rawFriends: Array = []; // 带分组的好友列表 export async function getGroup(qq: string | number): Promise { let group = groups.get(qq.toString()); diff --git a/src/onebot11/action/extends/GetFriendWithCategory.ts b/src/onebot11/action/extends/GetFriendWithCategory.ts index 2a5fef6a..5d423dc3 100644 --- a/src/onebot11/action/extends/GetFriendWithCategory.ts +++ b/src/onebot11/action/extends/GetFriendWithCategory.ts @@ -1,12 +1,19 @@ -import { rawFriends } from '@/core/data'; +import { requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; import BaseAction from '../BaseAction'; import { ActionName } from '../types'; import { BuddyCategoryType } from '@/core/entities/'; +import { NTQQFriendApi } from '@/core'; +import { OB11Constructor } from '@/onebot11/constructor'; -export class GetFriendWithCategory extends BaseAction> { +export class GetFriendWithCategory extends BaseAction { actionName = ActionName.GetFriendsWithCategory; protected async _handle(payload: void) { - return rawFriends; + if (requireMinNTQQBuild('26702')) { + //全新逻辑 + return OB11Constructor.friendsV2(await NTQQFriendApi.getBuddyV2ExWithCate(true)); + } else { + throw new Error('not support'); + } } } diff --git a/src/onebot11/action/user/GetFriendList.ts b/src/onebot11/action/user/GetFriendList.ts index bc1e8df6..e72eaa31 100644 --- a/src/onebot11/action/user/GetFriendList.ts +++ b/src/onebot11/action/user/GetFriendList.ts @@ -23,7 +23,7 @@ export default class GetFriendList extends BaseAction { protected async _handle(payload: Payload) { if (requireMinNTQQBuild('26702')) { //全新逻辑 - return OB11Constructor.friendsV2(await NTQQFriendApi.getBuddyV2Ex(payload?.no_cache === true || payload?.no_cache === 'true')); + 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);