From ea164fb048400969731d5b2b5d4fffc381717859 Mon Sep 17 00:00:00 2001 From: idranme Date: Thu, 22 Aug 2024 23:47:15 +0800 Subject: [PATCH 1/2] fix: friend list --- src/ntqqapi/api/friend.ts | 34 +++++++++++++++++++++------------- src/ntqqapi/types/user.ts | 3 ++- src/onebot11/constructor.ts | 3 ++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/ntqqapi/api/friend.ts b/src/ntqqapi/api/friend.ts index bb017fd..2af8916 100644 --- a/src/ntqqapi/api/friend.ts +++ b/src/ntqqapi/api/friend.ts @@ -5,6 +5,7 @@ import { getSession } from '@/ntqqapi/wrapper' import { BuddyListReqType, NodeIKernelProfileService } from '../services' import { NTEventDispatch } from '@/common/utils/EventTask' import { LimitedHashTable } from '@/common/utils/table' +import { pick } from 'cosmokit' export class NTQQFriendApi { /** 大于或等于 26702 应使用 getBuddyV2 */ @@ -73,7 +74,7 @@ export class NTQQFriendApi { } else { const data = await invoke<{ buddyCategory: CategoryFriend[] - userSimpleInfos: Map + userSimpleInfos: Record }>({ className: NTClass.NODE_STORE_API, methodName: 'getBuddyList', @@ -81,7 +82,11 @@ export class NTQQFriendApi { cbCmd: ReceiveCmdS.FRIENDS, afterFirstCmd: false, }) - return Array.from(data.userSimpleInfos.values()) + const categoryUids: Map = new Map() + for (const item of data.buddyCategory) { + categoryUids.set(item.categoryId, item.buddyUids) + } + return Object.values(data.userSimpleInfos).filter(v => v.baseInfo && categoryUids.get(v.baseInfo.categoryId)?.includes(v.uid!)) } } @@ -102,7 +107,7 @@ export class NTQQFriendApi { } else { const data = await invoke<{ buddyCategory: CategoryFriend[] - userSimpleInfos: Map + userSimpleInfos: Record }>({ className: NTClass.NODE_STORE_API, methodName: 'getBuddyList', @@ -110,9 +115,9 @@ export class NTQQFriendApi { cbCmd: ReceiveCmdS.FRIENDS, afterFirstCmd: false, }) - data.userSimpleInfos.forEach((value, key) => { - retMap.set(value.uin!, value.uid!) - }) + for (const item of Object.values(data.userSimpleInfos)) { + retMap.set(item.uin!, item.uid!) + } } return retMap } @@ -141,7 +146,7 @@ export class NTQQFriendApi { } else { const data = await invoke<{ buddyCategory: CategoryFriend[] - userSimpleInfos: Map + userSimpleInfos: Record }>({ className: NTClass.NODE_STORE_API, methodName: 'getBuddyList', @@ -149,16 +154,19 @@ export class NTQQFriendApi { cbCmd: ReceiveCmdS.FRIENDS, afterFirstCmd: false, }) - return Array.from(data.userSimpleInfos).map(([key, value]) => { - if (value.baseInfo) { + const category: Map> = new Map() + for (const item of data.buddyCategory) { + category.set(item.categoryId, pick(item, ['buddyUids', 'categroyName'])) + } + return Object.values(data.userSimpleInfos) + .filter(v => v.baseInfo && category.get(v.baseInfo.categoryId)?.buddyUids.includes(v.uid!)) + .map(value => { return { ...value, categoryId: value.baseInfo.categoryId, - categroyName: data.buddyCategory.find(e => e.categoryId === value.baseInfo.categoryId)?.categroyName + categroyName: category.get(value.baseInfo.categoryId)?.categroyName } - } - return value - }) + }) } } diff --git a/src/ntqqapi/types/user.ts b/src/ntqqapi/types/user.ts index e7018fc..8d01901 100644 --- a/src/ntqqapi/types/user.ts +++ b/src/ntqqapi/types/user.ts @@ -82,7 +82,8 @@ export interface CategoryFriend { categroyName: string categroyMbCount: number onlineCount: number - buddyList: User[] + buddyList: User[] // V1 + buddyUids: string[] } export interface CoreInfo { diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index ad613ee..4909588 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -49,6 +49,7 @@ import { OB11GroupRecallNoticeEvent } from './event/notice/OB11GroupRecallNotice import { OB11FriendPokeEvent, OB11GroupPokeEvent } from './event/notice/OB11PokeEvent' import { OB11BaseNoticeEvent } from './event/notice/OB11BaseNoticeEvent' import { OB11GroupEssenceEvent } from './event/notice/OB11GroupEssenceEvent' +import { omit } from 'cosmokit' export class OB11Constructor { static async message(msg: RawMessage): Promise { @@ -661,7 +662,7 @@ export class OB11Constructor { for (const friend of friends) { const sexValue = this.sex(friend.baseInfo.sex!) data.push({ - ...friend.baseInfo, + ...omit(friend.baseInfo, ['richBuffer']), ...friend.coreInfo, user_id: parseInt(friend.coreInfo.uin), nickname: friend.coreInfo.nick, From c07467b670bd98e6227c2e5699feafdea0c5894f Mon Sep 17 00:00:00 2001 From: idranme Date: Fri, 23 Aug 2024 00:08:52 +0800 Subject: [PATCH 2/2] chore: v3.30.2 --- manifest.json | 2 +- src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 788b551..569c82e 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "LLOneBot", "slug": "LLOneBot", "description": "实现 OneBot 11 协议,用于 QQ 机器人开发", - "version": "3.30.1", + "version": "3.30.2", "icon": "./icon.webp", "authors": [ { diff --git a/src/version.ts b/src/version.ts index a5e183c..26474e0 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const version = '3.30.1' +export const version = '3.30.2'