diff --git a/src/core/apis/user.ts b/src/core/apis/user.ts index 93e81c5e..1bb2ef42 100644 --- a/src/core/apis/user.ts +++ b/src/core/apis/user.ts @@ -93,8 +93,8 @@ export class NTQQUserApi { return profile; } - async getUserDetailInfo(uid: string): Promise { - let profile = await solveAsyncProblem(async (uid) => this.fetchUserDetailInfo(uid, UserDetailSource.KDB), uid); + async getUserDetailInfo(uid: string, no_cache: boolean = false): Promise { + let profile = await solveAsyncProblem(async (uid) => this.fetchUserDetailInfo(uid, no_cache ? UserDetailSource.KSERVER : UserDetailSource.KDB), uid); if (profile && profile.uin !== '0' && profile.commonExt) { return { ...profile.simpleInfo.status, diff --git a/src/core/types/user.ts b/src/core/types/user.ts index f6393ccd..921c709a 100644 --- a/src/core/types/user.ts +++ b/src/core/types/user.ts @@ -207,6 +207,7 @@ interface PhotoWall { // 简单信息 export interface SimpleInfo { + qqLevel?: QQLevel;//临时添加 uid?: string; uin?: string; coreInfo: CoreInfo; diff --git a/src/onebot/action/user/GetFriendList.ts b/src/onebot/action/user/GetFriendList.ts index de7526c4..0bc4e677 100644 --- a/src/onebot/action/user/GetFriendList.ts +++ b/src/onebot/action/user/GetFriendList.ts @@ -15,7 +15,21 @@ export default class GetFriendList extends OneBotAction { override payloadSchema = SchemaData; async _handle(_payload: Payload) { - //全新逻辑 - return OB11Construct.friends(await this.core.apis.FriendApi.getBuddy()); + const buddyMap = await this.core.apis.FriendApi.getBuddyV2SimpleInfoMap(); + + await Promise.all( + Array.from(buddyMap.values()).map(async (buddyInfo) => { + try { + const userDetail = await this.core.apis.UserApi.getUserDetailInfo(buddyInfo.coreInfo.uid); + const data = buddyMap.get(buddyInfo.coreInfo.uid); + if (data) { + data.qqLevel = userDetail.qqLevel; + } + } catch (error) { + this.core.context.logger.logError('获取好友详细信息失败', error); + } + }) + ); + return OB11Construct.friends(Array.from(buddyMap.values())); } -} +} \ No newline at end of file diff --git a/src/onebot/helper/data.ts b/src/onebot/helper/data.ts index e0380966..777a40b5 100644 --- a/src/onebot/helper/data.ts +++ b/src/onebot/helper/data.ts @@ -31,10 +31,25 @@ export class OB11Construct { nickname: rawFriend.coreInfo.nick ?? '', remark: rawFriend.coreInfo.remark ?? rawFriend.coreInfo.nick, sex: this.sex(rawFriend.baseInfo.sex), - level: 0, + level: rawFriend.qqLevel && calcQQLevel(rawFriend.qqLevel) || 0, })); } - + static friend(friends: FriendV2): OB11User { + return { + birthday_year: friends.baseInfo.birthday_year, + birthday_month: friends.baseInfo.birthday_month, + birthday_day: friends.baseInfo.birthday_day, + user_id: parseInt(friends.coreInfo.uin), + age: friends.baseInfo.age, + phone_num: friends.baseInfo.phoneNum, + email: friends.baseInfo.eMail, + category_id: friends.baseInfo.categoryId, + nickname: friends.coreInfo.nick ?? '', + remark: friends.coreInfo.remark ?? friends.coreInfo.nick, + sex: this.sex(friends.baseInfo.sex), + level: 0, + }; + } static groupMemberRole(role: number): OB11GroupMemberRole | undefined { return { 4: OB11GroupMemberRole.owner, diff --git a/src/onebot/types/data.ts b/src/onebot/types/data.ts index 2957e22a..e03974af 100644 --- a/src/onebot/types/data.ts +++ b/src/onebot/types/data.ts @@ -1,4 +1,10 @@ export interface OB11User { + birthday_year?: number; // 生日 + birthday_month?: number; // 生日 + birthday_day?: number; // 生日 + phone_num?: string; // 手机号 + email?: string; // 邮箱 + category_id?: number; // 分组ID user_id: number; // 用户ID nickname: string; // 昵称 remark?: string; // 备注