diff --git a/external/LiteLoaderWrapper.zip b/external/LiteLoaderWrapper.zip index 44b654a5..a6edb42f 100644 Binary files a/external/LiteLoaderWrapper.zip and b/external/LiteLoaderWrapper.zip differ diff --git a/src/onebot/action/group/GetGroupMemberInfo.ts b/src/onebot/action/group/GetGroupMemberInfo.ts index 6c1a04fd..82f734ef 100644 --- a/src/onebot/action/group/GetGroupMemberInfo.ts +++ b/src/onebot/action/group/GetGroupMemberInfo.ts @@ -21,28 +21,31 @@ class GetGroupMemberInfo extends BaseAction { actionName = ActionName.GetGroupMemberInfo; payloadSchema = SchemaData; + private parseBoolean(value: boolean | string): boolean { + return typeof value === 'string' ? value === 'true' : value; + } + + private async getUid(userId: string | number): Promise { + const uid = await this.core.apis.UserApi.getUidByUinV2(userId.toString()); + if (!uid) throw new Error(`Uin2Uid Error: 用户ID ${userId} 不存在`); + return uid; + } + async _handle(payload: Payload) { - const isNocache = typeof payload.no_cache === 'string' ? payload.no_cache === 'true' : !!payload.no_cache; - const uid = await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString()); - if (!uid) throw new Error(`Uin2Uid Error ${payload.user_id}不存在`); - const [member, info] = await Promise.allSettled([ + const isNocache = this.parseBoolean(payload.no_cache ?? true); + const uid = await this.getUid(payload.user_id); + const [member, info] = await Promise.all([ this.core.apis.GroupApi.getGroupMemberEx(payload.group_id.toString(), uid, isNocache), this.core.apis.UserApi.getUserDetailInfo(uid), ]); - if (member.status !== 'fulfilled') throw new Error(`群(${payload.group_id})成员${payload.user_id}获取失败 ${member.reason}`); - if (!member.value) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`); - if (info.status === 'fulfilled') { - Object.assign(member.value, info.value); + if (!member) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`); + if (info) { + Object.assign(member, info); } else { - this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息 ${info.reason}`); + this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息`); } - const date = Math.round(Date.now() / 1000); - const retMember = OB11Entities.groupMember(payload.group_id.toString(), member.value as GroupMember); - const Member = await this.core.apis.GroupApi.getGroupMember(payload.group_id.toString(), retMember.user_id); - retMember.last_sent_time = parseInt(Member?.lastSpeakTime ?? date.toString()); - retMember.join_time = parseInt(Member?.joinTime ?? date.toString()); - return retMember; + return OB11Entities.groupMember(payload.group_id.toString(), member as GroupMember); } } -export default GetGroupMemberInfo; +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 df632944..56ec9cc4 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -3,7 +3,6 @@ import { OB11Entities } from '@/onebot/entities'; import BaseAction from '../BaseAction'; import { ActionName } from '../types'; import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -import { calcQQLevel } from '@/common/helper'; const SchemaData = { type: 'object', @@ -16,61 +15,19 @@ const SchemaData = { type Payload = FromSchema; -class GetGroupMemberList extends BaseAction { +export class GetGroupMemberList extends BaseAction { actionName = ActionName.GetGroupMemberList; payloadSchema = SchemaData; async _handle(payload: Payload) { - const groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(payload.group_id.toString()); - const groupMembersArr = Array.from(groupMembers.values()); - const uids = groupMembersArr.map(item => item.uid); - //let CoreAndBase = await this.core.apis.GroupApi.getCoreAndBaseInfo(uids) - let _groupMembers = groupMembersArr.map(item => { - return OB11Entities.groupMember(payload.group_id.toString(), item); - }); + const groupIdStr = payload.group_id.toString(); + const groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr); - const MemberMap: Map = new Map(); - const date = Math.round(Date.now() / 1000); - - for (let i = 0, len = _groupMembers.length; i < len; i++) { - // 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 - const Member = await this.core.apis.GroupApi.getGroupMember(payload.group_id.toString(), _groupMembers[i].user_id); - _groupMembers[i].join_time = +(Member?.joinTime ?? date); - _groupMembers[i].last_sent_time = +(Member?.lastSpeakTime ?? date); - MemberMap.set(_groupMembers[i].user_id, _groupMembers[i]); - } - - - const selfRole = groupMembers.get(this.core.selfInfo.uid)?.role; - const isPrivilege = selfRole === 3 || selfRole === 4; - - - if (isPrivilege) { - try { - const webGroupMembers = await this.core.apis.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); - } - } - } catch (e) { - const logger = this.core.context.logger; - logger.logError.bind(logger)('GetGroupMemberList', e); - } - - } - - _groupMembers = Array.from(MemberMap.values()); - return _groupMembers; + const memberPromises = Array.from(groupMembers.values()).map(item => + OB11Entities.groupMember(groupIdStr, item) + ); + const _groupMembers = await Promise.all(memberPromises); + const MemberMap = new Map(_groupMembers.map(member => [member.user_id, member])); + return Array.from(MemberMap.values()); } -} - -export default GetGroupMemberList; +} \ No newline at end of file diff --git a/src/onebot/action/index.ts b/src/onebot/action/index.ts index e7dab21f..6d97e24e 100644 --- a/src/onebot/action/index.ts +++ b/src/onebot/action/index.ts @@ -3,7 +3,6 @@ import GetLoginInfo from './system/GetLoginInfo'; import GetFriendList from './user/GetFriendList'; import GetGroupList from './group/GetGroupList'; import GetGroupInfo from './group/GetGroupInfo'; -import GetGroupMemberList from './group/GetGroupMemberList'; import GetGroupMemberInfo from './group/GetGroupMemberInfo'; import SendGroupMsg from './group/SendGroupMsg'; import SendPrivateMsg from './msg/SendPrivateMsg'; @@ -90,6 +89,7 @@ import { GetRkey } from './extends/GetRkey'; import { SetSpecialTittle } from './extends/SetSpecialTittle'; import { UploadForwardMsg } from "@/onebot/action/extends/UploadForwardMsg"; import { GetGroupShutList } from './group/GetGroupShutList'; +import { GetGroupMemberList } from './group/GetGroupMemberList'; export type ActionMap = Map>; diff --git a/src/onebot/entities.ts b/src/onebot/entities.ts index d56d0da9..1f7c911b 100644 --- a/src/onebot/entities.ts +++ b/src/onebot/entities.ts @@ -68,8 +68,8 @@ export class OB11Entities { area: '', level: member.memberRealLevel ?? '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, @@ -77,6 +77,7 @@ export class OB11Entities { shut_up_timestamp: member.shutUpTime, role: OB11Entities.groupMemberRole(member.role), title: member.memberSpecialTitle || '', + }; }