From c2a723380a49e1190e742b75e9d97f0b83160f0e Mon Sep 17 00:00:00 2001 From: idranme Date: Wed, 18 Sep 2024 19:35:58 +0800 Subject: [PATCH] fix: `get_group_member_list` API --- .../services/NodeIKernelGroupService.ts | 17 +++++++++--- src/ntqqapi/types/group.ts | 7 ++--- .../action/group/GetGroupMemberList.ts | 27 +++++++++++-------- src/onebot11/entities.ts | 6 ++--- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/ntqqapi/services/NodeIKernelGroupService.ts b/src/ntqqapi/services/NodeIKernelGroupService.ts index c3ec6a2..1bbeb91 100644 --- a/src/ntqqapi/services/NodeIKernelGroupService.ts +++ b/src/ntqqapi/services/NodeIKernelGroupService.ts @@ -104,11 +104,20 @@ export interface NodeIKernelGroupService { createMemberListScene(groupCode: string, scene: string): string - destroyMemberListScene(SceneId: string): void - //About Arg (a) name: lastId 根据手Q来看为object {index:?(number),uid:string} + destroyMemberListScene(sceneId: string): void + getNextMemberList(sceneId: string, a: undefined, num: number): Promise<{ - errCode: number, errMsg: string, - result: { ids: string[], infos: Map, finish: boolean, hasRobot: boolean } + errCode: number + errMsg: string + result: { + ids: { + uid: string + index: number + }[] + infos: Map + finish: boolean + hasRobot: boolean + } }> getPrevMemberList(): unknown diff --git a/src/ntqqapi/types/group.ts b/src/ntqqapi/types/group.ts index 9f93304..876636b 100644 --- a/src/ntqqapi/types/group.ts +++ b/src/ntqqapi/types/group.ts @@ -62,8 +62,9 @@ export interface GroupMember { sex?: Sex qqLevel?: QQLevel isChangeRole: boolean - joinTime: string - lastSpeakTime: string + joinTime: number + lastSpeakTime: number + memberLevel: number } export interface PublishGroupBulletinReq { @@ -76,4 +77,4 @@ export interface PublishGroupBulletinReq { oldFeedsId: '' pinned: number confirmRequired: number -} \ No newline at end of file +} diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index 3bf2127..a6d5efc 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -13,11 +13,16 @@ class GetGroupMemberList extends BaseAction { actionName = ActionName.GetGroupMemberList protected async _handle(payload: Payload) { - const groupMembers = await this.ctx.ntGroupApi.getGroupMembers(payload.group_id.toString()) + const groupCode = payload.group_id.toString() + let groupMembers = await this.ctx.ntGroupApi.getGroupMembers(groupCode) + if (groupMembers.size === 0) { + await this.ctx.sleep(100) + groupMembers = await this.ctx.ntGroupApi.getGroupMembers(groupCode) + } const groupMembersArr = Array.from(groupMembers.values()) - let _groupMembers = groupMembersArr.map(item => { - return OB11Entities.groupMember(payload.group_id.toString(), item) + const _groupMembers = groupMembersArr.map(item => { + return OB11Entities.groupMember(groupCode, item) }) const MemberMap: Map = new Map() @@ -25,8 +30,8 @@ class GetGroupMemberList extends BaseAction { for (let i = 0, len = _groupMembers.length; i < len; i++) { // 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 - _groupMembers[i].join_time = date - _groupMembers[i].last_sent_time = date + _groupMembers[i].join_time ||= date + _groupMembers[i].last_sent_time ||= date MemberMap.set(_groupMembers[i].user_id, _groupMembers[i]) } @@ -34,24 +39,24 @@ class GetGroupMemberList extends BaseAction { const isPrivilege = selfRole === 3 || selfRole === 4 if (isPrivilege) { - const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(payload.group_id.toString()) + const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(groupCode) for (let i = 0, len = webGroupMembers.length; i < len; i++) { if (!webGroupMembers[i]?.uin) { continue } const MemberData = MemberMap.get(webGroupMembers[i]?.uin) if (MemberData) { - MemberData.join_time = webGroupMembers[i]?.join_time - MemberData.last_sent_time = webGroupMembers[i]?.last_speak_time + if (MemberData.join_time === date) { + MemberData.join_time = webGroupMembers[i]?.join_time + MemberData.last_sent_time = webGroupMembers[i]?.last_speak_time + } MemberData.qage = webGroupMembers[i]?.qage - MemberData.level = webGroupMembers[i]?.lv.level.toString() MemberMap.set(webGroupMembers[i]?.uin, MemberData) } } } - _groupMembers = Array.from(MemberMap.values()) - return _groupMembers + return Array.from(MemberMap.values()) } } diff --git a/src/onebot11/entities.ts b/src/onebot11/entities.ts index ca03999..fb341ae 100644 --- a/src/onebot11/entities.ts +++ b/src/onebot11/entities.ts @@ -710,10 +710,10 @@ export namespace OB11Entities { sex: sex(member.sex!), age: 0, area: '', - level: '0', + level: String(member.memberLevel ?? 0), qq_level: (member.qqLevel && calcQQLevel(member.qqLevel)) || 0, - join_time: 0, // 暂时没法获取 - last_sent_time: 0, // 暂时没法获取 + join_time: member.joinTime, + last_sent_time: member.lastSpeakTime, title_expire_time: 0, unfriendly: false, card_changeable: true,