mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
adjustment of get_friends_with_category
API returns
This commit is contained in:
@@ -101,52 +101,20 @@ export class NTQQFriendApi extends Service {
|
|||||||
return retMap
|
return retMap
|
||||||
}
|
}
|
||||||
|
|
||||||
async getBuddyV2ExWithCate(refresh = false) {
|
async getBuddyV2WithCate(refresh = false) {
|
||||||
const session = getSession()
|
const data = await invoke<{
|
||||||
if (session) {
|
buddyCategory: CategoryFriend[]
|
||||||
const uids: string[] = []
|
userSimpleInfos: Record<string, SimpleInfo>
|
||||||
const categoryMap: Map<string, Dict> = new Map()
|
}>(
|
||||||
const buddyService = session.getBuddyService()
|
'getBuddyList',
|
||||||
const buddyListV2 = (await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL)).data
|
[refresh],
|
||||||
uids.push(
|
{
|
||||||
...buddyListV2.flatMap(item => {
|
className: NTClass.NODE_STORE_API,
|
||||||
item.buddyUids.forEach(uid => {
|
cbCmd: ReceiveCmdS.FRIENDS,
|
||||||
categoryMap.set(uid, { categoryId: item.categoryId, categroyName: item.categroyName })
|
afterFirstCmd: false,
|
||||||
})
|
|
||||||
return item.buddyUids
|
|
||||||
}))
|
|
||||||
const data = await session.getProfileService().getCoreAndBaseInfo('nodeStore', uids)
|
|
||||||
return Array.from(data).map(([key, value]) => {
|
|
||||||
const category = categoryMap.get(key)
|
|
||||||
return category ? { ...value, categoryId: category.categoryId, categroyName: category.categroyName } : value
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const data = await invoke<{
|
|
||||||
buddyCategory: CategoryFriend[]
|
|
||||||
userSimpleInfos: Record<string, SimpleInfo>
|
|
||||||
}>(
|
|
||||||
'getBuddyList',
|
|
||||||
[refresh],
|
|
||||||
{
|
|
||||||
className: NTClass.NODE_STORE_API,
|
|
||||||
cbCmd: ReceiveCmdS.FRIENDS,
|
|
||||||
afterFirstCmd: false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
const category: Map<number, Pick<CategoryFriend, 'buddyUids' | 'categroyName'>> = 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!))
|
return data
|
||||||
.map(value => {
|
|
||||||
return {
|
|
||||||
...value,
|
|
||||||
categoryId: value.baseInfo.categoryId,
|
|
||||||
categroyName: category.get(value.baseInfo.categoryId)?.categroyName
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async isBuddy(uid: string): Promise<boolean> {
|
async isBuddy(uid: string): Promise<boolean> {
|
||||||
|
@@ -4,14 +4,35 @@ import { OB11Entities } from '../../entities'
|
|||||||
import { ActionName } from '../types'
|
import { ActionName } from '../types'
|
||||||
import { getBuildVersion } from '@/common/utils'
|
import { getBuildVersion } from '@/common/utils'
|
||||||
|
|
||||||
export class GetFriendWithCategory extends BaseAction<void, OB11User[]> {
|
interface Category {
|
||||||
|
categoryId: number
|
||||||
|
categorySortId: number
|
||||||
|
categoryName: string
|
||||||
|
categoryMbCount: number
|
||||||
|
onlineCount: number
|
||||||
|
buddyList: OB11User[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GetFriendWithCategory extends BaseAction<void, Category[]> {
|
||||||
actionName = ActionName.GetFriendsWithCategory
|
actionName = ActionName.GetFriendsWithCategory
|
||||||
|
|
||||||
protected async _handle() {
|
protected async _handle() {
|
||||||
if (getBuildVersion() >= 26702) {
|
if (getBuildVersion() < 26702) {
|
||||||
return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2ExWithCate(true))
|
|
||||||
} else {
|
|
||||||
throw new Error('this ntqq version not support, must be 26702 or later')
|
throw new Error('this ntqq version not support, must be 26702 or later')
|
||||||
}
|
}
|
||||||
|
const data = await this.ctx.ntFriendApi.getBuddyV2WithCate(true)
|
||||||
|
return data.buddyCategory.map(item => {
|
||||||
|
return {
|
||||||
|
categoryId: item.categoryId,
|
||||||
|
categorySortId: item.categorySortId,
|
||||||
|
categoryName: item.categroyName,
|
||||||
|
categoryMbCount: item.categroyMbCount,
|
||||||
|
onlineCount: item.onlineCount,
|
||||||
|
buddyList: item.buddyUids.map(uid => {
|
||||||
|
const info = data.userSimpleInfos[uid]
|
||||||
|
return OB11Entities.friendV2(info)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -649,23 +649,20 @@ export namespace OB11Entities {
|
|||||||
return friends.map(friend)
|
return friends.map(friend)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function friendsV2(friends: FriendV2[]): OB11User[] {
|
export function friendV2(raw: FriendV2): OB11User {
|
||||||
const data: OB11User[] = []
|
return {
|
||||||
for (const friend of friends) {
|
...omit(raw.baseInfo, ['richBuffer', 'phoneNum']),
|
||||||
const sexValue = sex(friend.baseInfo.sex!)
|
...omit(raw.coreInfo, ['nick']),
|
||||||
data.push({
|
user_id: parseInt(raw.coreInfo.uin),
|
||||||
...omit(friend.baseInfo, ['richBuffer']),
|
nickname: raw.coreInfo.nick,
|
||||||
...friend.coreInfo,
|
remark: raw.coreInfo.remark || raw.coreInfo.nick,
|
||||||
user_id: parseInt(friend.coreInfo.uin),
|
sex: sex(raw.baseInfo.sex),
|
||||||
nickname: friend.coreInfo.nick,
|
level: 0
|
||||||
remark: friend.coreInfo.nick,
|
|
||||||
sex: sexValue,
|
|
||||||
level: 0,
|
|
||||||
categroyName: friend.categroyName,
|
|
||||||
categoryId: friend.categoryId
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return data
|
}
|
||||||
|
|
||||||
|
export function friendsV2(raw: FriendV2[]): OB11User[] {
|
||||||
|
return raw.map(friendV2)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function groupMemberRole(role: number): OB11GroupMemberRole | undefined {
|
export function groupMemberRole(role: number): OB11GroupMemberRole | undefined {
|
||||||
|
Reference in New Issue
Block a user