From bc936a0ca7efb7df06a0cbc254faf953f232a8e0 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: Mon, 5 Aug 2024 13:45:07 +0800 Subject: [PATCH] =?UTF-8?q?build:=20178=E5=8F=91=E8=A8=80=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E4=B8=8E=E5=8A=A0=E5=85=A5=E6=97=B6=E9=97=B4=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/src/core.ts | 1 + src/core/src/entities/group.ts | 4 +- .../action/group/GetGroupMemberInfo.ts | 51 +++++++------- .../action/group/GetGroupMemberList.ts | 66 +++++++++++-------- 4 files changed, 70 insertions(+), 52 deletions(-) diff --git a/src/core/src/core.ts b/src/core/src/core.ts index f7ed72c8..76af9759 100644 --- a/src/core/src/core.ts +++ b/src/core/src/core.ts @@ -322,6 +322,7 @@ export class NapCatCore { if (groupMembers.has(groupCode)) { const existMembers = groupMembers.get(groupCode)!; arg.infos.forEach((member, uid) => { + //console.log('onMemberListChange', member); const existMember = existMembers.get(uid); if (existMember) { Object.assign(existMember, member); diff --git a/src/core/src/entities/group.ts b/src/core/src/entities/group.ts index c2f6f093..43688fa2 100644 --- a/src/core/src/entities/group.ts +++ b/src/core/src/entities/group.ts @@ -7,7 +7,7 @@ export enum GroupListUpdateType { } export interface Group { groupCode: string, - createTime?:string,//高版本才有 + createTime?: string,//高版本才有 maxMember: number, memberCount: number, groupName: string, @@ -59,4 +59,6 @@ export interface GroupMember { sex?: Sex qqLevel?: QQLevel isChangeRole: boolean; + joinTime: string; + lastSpeakTime: string; } \ No newline at end of file diff --git a/src/onebot11/action/group/GetGroupMemberInfo.ts b/src/onebot11/action/group/GetGroupMemberInfo.ts index 08b166e5..c6d4c7a0 100644 --- a/src/onebot11/action/group/GetGroupMemberInfo.ts +++ b/src/onebot11/action/group/GetGroupMemberInfo.ts @@ -7,7 +7,8 @@ import { logDebug } from '@/common/utils/log'; import { WebApi } from '@/core/apis/webapi'; import { NTQQGroupApi } from '@/core'; import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -import { selfInfo } from '@/core/data'; +import { getGroupMember, selfInfo } from '@/core/data'; +import { requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; const SchemaData = { type: 'object', properties: { @@ -40,31 +41,37 @@ class GetGroupMemberInfo extends BaseAction { } catch (e) { logDebug('获取群成员详细信息失败, 只能返回基础信息', e); } + const date = Math.round(Date.now() / 1000); const retMember = OB11Constructor.groupMember(payload.group_id.toString(), member); - let SelfInfoInGroup = await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), selfInfo.uid, isNocache); - let isPrivilege = false; - if (SelfInfoInGroup) { - isPrivilege = SelfInfoInGroup.role === 3 || SelfInfoInGroup.role === 4; - } - if (isPrivilege) { - const webGroupMembers = await WebApi.getGroupMembers(payload.group_id.toString()); - for (let i = 0, len = webGroupMembers.length; i < len; i++) { - if (webGroupMembers[i]?.uin && webGroupMembers[i].uin === retMember.user_id) { - retMember.join_time = webGroupMembers[i]?.join_time; - retMember.last_sent_time = webGroupMembers[i]?.last_speak_time; - retMember.qage = webGroupMembers[i]?.qage; - retMember.level = webGroupMembers[i]?.lv.level.toString(); + if (!requireMinNTQQBuild('26702')) { + let SelfInfoInGroup = await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), selfInfo.uid, isNocache); + let isPrivilege = false; + if (SelfInfoInGroup) { + isPrivilege = SelfInfoInGroup.role === 3 || SelfInfoInGroup.role === 4; + } + if (isPrivilege) { + const webGroupMembers = await WebApi.getGroupMembers(payload.group_id.toString()); + for (let i = 0, len = webGroupMembers.length; i < len; i++) { + if (webGroupMembers[i]?.uin && webGroupMembers[i].uin === retMember.user_id) { + retMember.join_time = webGroupMembers[i]?.join_time; + retMember.last_sent_time = webGroupMembers[i]?.last_speak_time; + retMember.qage = webGroupMembers[i]?.qage; + retMember.level = webGroupMembers[i]?.lv.level.toString(); + } + } + } else { + const LastestMsgList = await NTQQGroupApi.getLastestMsg(payload.group_id.toString(), [payload.user_id.toString()]); + if (LastestMsgList?.msgList?.length && LastestMsgList?.msgList?.length > 0) { + const last_send_time = LastestMsgList.msgList[0].msgTime; + if (last_send_time && last_send_time != '0' && last_send_time != '') { + retMember.last_sent_time = parseInt(last_send_time); + retMember.join_time = Math.round(Date.now() / 1000);//兜底数据 防止群管乱杀 + } } } } else { - const LastestMsgList = await NTQQGroupApi.getLastestMsg(payload.group_id.toString(), [payload.user_id.toString()]); - if (LastestMsgList?.msgList?.length && LastestMsgList?.msgList?.length > 0) { - const last_send_time = LastestMsgList.msgList[0].msgTime; - if (last_send_time && last_send_time != '0' && last_send_time != '') { - retMember.last_sent_time = parseInt(last_send_time); - retMember.join_time = Math.round(Date.now() / 1000);//兜底数据 防止群管乱杀 - } - } + retMember.last_sent_time = parseInt((await getGroupMember(payload.group_id.toString(), retMember.user_id))?.lastSpeakTime || date.toString()); + retMember.join_time = parseInt((await getGroupMember(payload.group_id.toString(), retMember.user_id))?.joinTime || date.toString()); } return retMember; } diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index e2025486..a28c0a22 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -1,4 +1,4 @@ -import { selfInfo } from '@/core/data'; +import { getGroup, getGroupMember, selfInfo } from '@/core/data'; import { OB11GroupMember } from '../../types'; import { OB11Constructor } from '../../constructor'; import BaseAction from '../BaseAction'; @@ -6,6 +6,7 @@ import { ActionName } from '../types'; import { NTQQGroupApi } from '@/core'; import { WebApi } from '@/core/apis/webapi'; import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; const SchemaData = { type: 'object', @@ -43,40 +44,47 @@ class GetGroupMemberList extends BaseAction { MemberMap.set(_groupMembers[i].user_id, _groupMembers[i]); } - const selfRole = groupMembers.get(selfInfo.uid)?.role; - const isPrivilege = selfRole === 3 || selfRole === 4; + if (!requireMinNTQQBuild('26702')) { + const selfRole = groupMembers.get(selfInfo.uid)?.role; + const isPrivilege = selfRole === 3 || selfRole === 4; - if (isPrivilege) { - const webGroupMembers = await WebApi.getGroupMembers(payload.group_id.toString()); - 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; - MemberData.qage = webGroupMembers[i]?.qage; - MemberData.level = webGroupMembers[i]?.lv.level.toString(); - MemberMap.set(webGroupMembers[i]?.uin, MemberData); - } - } - } else { - if (isNocache) { - const DateMap = await NTQQGroupApi.getGroupMemberLastestSendTimeCache(payload.group_id.toString());//开始从本地拉取 - for (const DateUin of DateMap.keys()) { - const MemberData = MemberMap.get(parseInt(DateUin)); + if (isPrivilege) { + const webGroupMembers = await WebApi.getGroupMembers(payload.group_id.toString()); + 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.last_sent_time = parseInt(DateMap.get(DateUin)!); - //join_time 有基础数据兜底 + 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); } } } else { - _groupMembers.forEach(item => { - item.last_sent_time = date; - item.join_time = date; - }); + if (isNocache) { + const DateMap = await NTQQGroupApi.getGroupMemberLastestSendTimeCache(payload.group_id.toString());//开始从本地拉取 + for (const DateUin of DateMap.keys()) { + const MemberData = MemberMap.get(parseInt(DateUin)); + if (MemberData) { + MemberData.last_sent_time = parseInt(DateMap.get(DateUin)!); + //join_time 有基础数据兜底 + } + } + } else { + _groupMembers.forEach(item => { + item.last_sent_time = date; + item.join_time = date; + }); + } } + } else { + _groupMembers.forEach(async item => { + item.last_sent_time = parseInt((await getGroupMember(payload.group_id.toString(), item.user_id))?.lastSpeakTime || date.toString()); + item.join_time = parseInt((await getGroupMember(payload.group_id.toString(), item.user_id))?.joinTime || date.toString()); + }); } // 还原索引到Array 一同返回