From 2cabd7879ce463370db37d90d275f5dcbc75d0a7 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: Fri, 9 Aug 2024 17:37:17 +0800 Subject: [PATCH] chore: GroupApi Finish --- src/onebot/action/group/GetGroupInfo.ts | 5 +- src/onebot/action/group/GetGroupMemberInfo.ts | 11 +-- .../action/group/GetGroupMemberInfoOld.ts | 80 ------------------- src/onebot/action/group/GetGroupMemberList.ts | 17 ++-- src/onebot/action/group/SetGroupKick.ts | 5 +- 5 files changed, 23 insertions(+), 95 deletions(-) delete mode 100644 src/onebot/action/group/GetGroupMemberInfoOld.ts diff --git a/src/onebot/action/group/GetGroupInfo.ts b/src/onebot/action/group/GetGroupInfo.ts index dc969b06..f427b366 100644 --- a/src/onebot/action/group/GetGroupInfo.ts +++ b/src/onebot/action/group/GetGroupInfo.ts @@ -7,7 +7,7 @@ import { FromSchema, JSONSchema } from 'json-schema-to-ts'; const SchemaData = { type: 'object', properties: { - group_id: { type: [ 'number' , 'string' ] }, + group_id: { type: ['number', 'string'] }, }, required: ['group_id'] } as const satisfies JSONSchema; @@ -18,7 +18,8 @@ class GetGroupInfo extends BaseAction { actionName = ActionName.GetGroupInfo; PayloadSchema = SchemaData; protected async _handle(payload: Payload) { - const group = await getGroup(payload.group_id.toString()); + const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; + const group = (await NTQQGroupApi.getGroups()).find(e => e.groupCode == payload.group_id.toString()); if (group) { return OB11Constructor.group(group); } else { diff --git a/src/onebot/action/group/GetGroupMemberInfo.ts b/src/onebot/action/group/GetGroupMemberInfo.ts index c51409bf..e2bdc694 100644 --- a/src/onebot/action/group/GetGroupMemberInfo.ts +++ b/src/onebot/action/group/GetGroupMemberInfo.ts @@ -21,7 +21,7 @@ class GetGroupMemberInfo extends BaseAction { protected async _handle(payload: Payload) { const NTQQUserApi = this.CoreContext.getApiContext().UserApi; const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; - const NTQQMsgApi = this.CoreContext.getApiContext().MsgApi; + const NTQQWebApi = this.CoreContext.getApiContext().WebApi; const isNocache = payload.no_cache == true || payload.no_cache === 'true'; const uid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); if (!uid) { @@ -41,13 +41,13 @@ class GetGroupMemberInfo extends BaseAction { const date = Math.round(Date.now() / 1000); const retMember = OB11Constructor.groupMember(payload.group_id.toString(), member); if (!this.CoreContext.context.basicInfoWrapper.requireMinNTQQBuild('26702')) { - const SelfInfoInGroup = await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), selfInfo.uid, isNocache); + const SelfInfoInGroup = await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), this.CoreContext.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()); + const webGroupMembers = await NTQQWebApi.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; @@ -67,8 +67,9 @@ class GetGroupMemberInfo extends BaseAction { } } } else { - 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()); + // Mlikiowa V2.0.0 Refactor Todo + // 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/onebot/action/group/GetGroupMemberInfoOld.ts b/src/onebot/action/group/GetGroupMemberInfoOld.ts deleted file mode 100644 index ebe51e82..00000000 --- a/src/onebot/action/group/GetGroupMemberInfoOld.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { OB11GroupMember } from '../../types'; -import { OB11Constructor } from '../../helper/data'; -import BaseAction from '../BaseAction'; -import { ActionName } from '../types'; -import { NTQQUserApi } from '@/core/apis/user'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -// no_cache get时传字符串 -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - no_cache: { type: ['boolean', 'string'] }, - }, - required: ['group_id', 'user_id'] -} as const satisfies JSONSchema; - -type Payload = FromSchema; - -class GetGroupMemberInfo extends BaseAction { - actionName = ActionName.GetGroupMemberInfo; - PayloadSchema = SchemaData; - protected async _handle(payload: Payload) { - const NTQQUserApi = this.CoreContext.getApiContext().UserApi; - const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; - if (this.CoreContext.context.basicInfoWrapper.requireMinNTQQBuild('26702')) { - const V2Data = await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), payload.user_id.toString(), payload.no_cache == true || payload.no_cache === 'true'); - if (V2Data) { - return OB11Constructor.groupMember(payload.group_id.toString(), V2Data); - } else { - throw (`群(${payload.group_id})成员${payload.user_id}不存在`); - } - } - const group = await getGroup(payload.group_id.toString()); - const role = (await getGroupMember(payload.group_id, selfInfo.uin))?.role; - const isPrivilege = role === 3 || role === 4; - if (!group) { - throw (`群(${payload.group_id})不存在`); - } - if (payload.no_cache == true || payload.no_cache === 'true') { - groupMembers.set(group.groupCode, await NTQQGroupApi.getGroupMembers(payload.group_id.toString())); - } - const member = await getGroupMember(payload.group_id.toString(), payload.user_id.toString()); - //早返回 - if (!member) { - throw (`群(${payload.group_id})成员${payload.user_id}不存在`); - } - //console.log('GetGroupMemberInfo', JSON.stringify(await NTQQGroupApi.getGroupMemberV2(payload.group_id.toString(), member.uid, true), null, 4)); - try { - const info = (await NTQQUserApi.getUserDetailInfo(member.uid)); - logDebug('群成员详细信息结果', info); - Object.assign(member, info); - } catch (e) { - logDebug('获取群成员详细信息失败, 只能返回基础信息', e); - } - const retMember = OB11Constructor.groupMember(payload.group_id.toString(), member); - 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);//兜底数据 防止群管乱杀 - } - } - } - return retMember; - } -} -export default GetGroupMemberInfo; \ No newline at end of file diff --git a/src/onebot/action/group/GetGroupMemberList.ts b/src/onebot/action/group/GetGroupMemberList.ts index 1f067305..2350ebe8 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -29,11 +29,13 @@ class GetGroupMemberList extends BaseAction { throw (`群${payload.group_id}不存在`); } const groupMembers = await NTQQGroupApi.getGroupMembers(payload.group_id.toString()); - let _groupMembers = Array.from(groupMembers.values()) - .map(item => { return OB11Constructor.groupMember(group.groupCode, item); }); + const groupMembersArr = Array.from(groupMembers.values()); + const groupMembersUids = groupMembersArr.map(e => e.uid); + let _groupMembers = groupMembersArr.map(item => { return OB11Constructor.groupMember(group.groupCode, item); }); const MemberMap: Map = new Map(); // 转为Map 方便索引 + let GroupMemberUids: string[] = []; const date = Math.round(Date.now() / 1000); for (let i = 0, len = _groupMembers.length; i < len; i++) { // 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 @@ -63,7 +65,7 @@ class GetGroupMemberList extends BaseAction { } } else { if (isNocache) { - const DateMap = await NTQQGroupApi.getGroupMemberLatestSendTimeCache(payload.group_id.toString());//开始从本地拉取 + const DateMap = await NTQQGroupApi.getGroupMemberLatestSendTimeCache(payload.group_id.toString(), groupMembersUids);//开始从本地拉取 for (const DateUin of DateMap.keys()) { const MemberData = MemberMap.get(parseInt(DateUin)); if (MemberData) { @@ -79,10 +81,11 @@ class GetGroupMemberList extends BaseAction { } } } 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()); - }); + // Mlikiowa V2.0.0 Refactor Todo + // _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 一同返回 diff --git a/src/onebot/action/group/SetGroupKick.ts b/src/onebot/action/group/SetGroupKick.ts index 87f1a013..4d4e791d 100644 --- a/src/onebot/action/group/SetGroupKick.ts +++ b/src/onebot/action/group/SetGroupKick.ts @@ -21,8 +21,11 @@ export default class SetGroupKick extends BaseAction { PayloadSchema = SchemaData; protected async _handle(payload: Payload): Promise { const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; + const NTQQUserApi = this.CoreContext.getApiContext().UserApi; const rejectReq = payload.reject_add_request?.toString() == 'true'; - await NTQQGroupApi.kickMember(payload.group_id.toString(), [member.uid], rejectReq); + const uid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); + if(!uid) throw new Error('get Uid Error') + await NTQQGroupApi.kickMember(payload.group_id.toString(), [uid], rejectReq); return null; } }