update: LL

This commit is contained in:
手瓜一十雪 2024-10-16 19:23:38 +08:00
parent 05b05fd74e
commit b15e1174d6
5 changed files with 33 additions and 72 deletions

Binary file not shown.

View File

@ -21,28 +21,31 @@ class GetGroupMemberInfo extends BaseAction<Payload, OB11GroupMember> {
actionName = ActionName.GetGroupMemberInfo; actionName = ActionName.GetGroupMemberInfo;
payloadSchema = SchemaData; payloadSchema = SchemaData;
private parseBoolean(value: boolean | string): boolean {
return typeof value === 'string' ? value === 'true' : value;
}
private async getUid(userId: string | number): Promise<string> {
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) { async _handle(payload: Payload) {
const isNocache = typeof payload.no_cache === 'string' ? payload.no_cache === 'true' : !!payload.no_cache; const isNocache = this.parseBoolean(payload.no_cache ?? true);
const uid = await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString()); const uid = await this.getUid(payload.user_id);
if (!uid) throw new Error(`Uin2Uid Error ${payload.user_id}不存在`); const [member, info] = await Promise.all([
const [member, info] = await Promise.allSettled([
this.core.apis.GroupApi.getGroupMemberEx(payload.group_id.toString(), uid, isNocache), this.core.apis.GroupApi.getGroupMemberEx(payload.group_id.toString(), uid, isNocache),
this.core.apis.UserApi.getUserDetailInfo(uid), this.core.apis.UserApi.getUserDetailInfo(uid),
]); ]);
if (member.status !== 'fulfilled') throw new Error(`群(${payload.group_id})成员${payload.user_id}获取失败 ${member.reason}`); if (!member) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`);
if (!member.value) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`); if (info) {
if (info.status === 'fulfilled') { Object.assign(member, info);
Object.assign(member.value, info.value);
} else { } else {
this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息 ${info.reason}`); this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息`);
} }
const date = Math.round(Date.now() / 1000); return OB11Entities.groupMember(payload.group_id.toString(), member as GroupMember);
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;
} }
} }
export default GetGroupMemberInfo; export default GetGroupMemberInfo;

View File

@ -3,7 +3,6 @@ import { OB11Entities } from '@/onebot/entities';
import BaseAction from '../BaseAction'; import BaseAction from '../BaseAction';
import { ActionName } from '../types'; import { ActionName } from '../types';
import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { FromSchema, JSONSchema } from 'json-schema-to-ts';
import { calcQQLevel } from '@/common/helper';
const SchemaData = { const SchemaData = {
type: 'object', type: 'object',
@ -16,61 +15,19 @@ const SchemaData = {
type Payload = FromSchema<typeof SchemaData>; type Payload = FromSchema<typeof SchemaData>;
class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> { export class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> {
actionName = ActionName.GetGroupMemberList; actionName = ActionName.GetGroupMemberList;
payloadSchema = SchemaData; payloadSchema = SchemaData;
async _handle(payload: Payload) { async _handle(payload: Payload) {
const groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(payload.group_id.toString()); const groupIdStr = payload.group_id.toString();
const groupMembersArr = Array.from(groupMembers.values()); const groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr);
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 MemberMap: Map<number, OB11GroupMember> = new Map<number, OB11GroupMember>(); const memberPromises = Array.from(groupMembers.values()).map(item =>
const date = Math.round(Date.now() / 1000); OB11Entities.groupMember(groupIdStr, item)
);
for (let i = 0, len = _groupMembers.length; i < len; i++) { const _groupMembers = await Promise.all(memberPromises);
// 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 const MemberMap = new Map(_groupMembers.map(member => [member.user_id, member]));
const Member = await this.core.apis.GroupApi.getGroupMember(payload.group_id.toString(), _groupMembers[i].user_id); return Array.from(MemberMap.values());
_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;
} }
} }
export default GetGroupMemberList;

View File

@ -3,7 +3,6 @@ import GetLoginInfo from './system/GetLoginInfo';
import GetFriendList from './user/GetFriendList'; import GetFriendList from './user/GetFriendList';
import GetGroupList from './group/GetGroupList'; import GetGroupList from './group/GetGroupList';
import GetGroupInfo from './group/GetGroupInfo'; import GetGroupInfo from './group/GetGroupInfo';
import GetGroupMemberList from './group/GetGroupMemberList';
import GetGroupMemberInfo from './group/GetGroupMemberInfo'; import GetGroupMemberInfo from './group/GetGroupMemberInfo';
import SendGroupMsg from './group/SendGroupMsg'; import SendGroupMsg from './group/SendGroupMsg';
import SendPrivateMsg from './msg/SendPrivateMsg'; import SendPrivateMsg from './msg/SendPrivateMsg';
@ -90,6 +89,7 @@ import { GetRkey } from './extends/GetRkey';
import { SetSpecialTittle } from './extends/SetSpecialTittle'; import { SetSpecialTittle } from './extends/SetSpecialTittle';
import { UploadForwardMsg } from "@/onebot/action/extends/UploadForwardMsg"; import { UploadForwardMsg } from "@/onebot/action/extends/UploadForwardMsg";
import { GetGroupShutList } from './group/GetGroupShutList'; import { GetGroupShutList } from './group/GetGroupShutList';
import { GetGroupMemberList } from './group/GetGroupMemberList';
export type ActionMap = Map<string, BaseAction<any, any>>; export type ActionMap = Map<string, BaseAction<any, any>>;

View File

@ -68,8 +68,8 @@ export class OB11Entities {
area: '', area: '',
level: member.memberRealLevel ?? '0', level: member.memberRealLevel ?? '0',
qq_level: member.qqLevel && calcQQLevel(member.qqLevel) || 0, qq_level: member.qqLevel && calcQQLevel(member.qqLevel) || 0,
join_time: 0, // 暂时没法获取 join_time: +member.joinTime,
last_sent_time: 0, // 暂时没法获取 last_sent_time: +member.lastSpeakTime,
title_expire_time: 0, title_expire_time: 0,
unfriendly: false, unfriendly: false,
card_changeable: true, card_changeable: true,
@ -77,6 +77,7 @@ export class OB11Entities {
shut_up_timestamp: member.shutUpTime, shut_up_timestamp: member.shutUpTime,
role: OB11Entities.groupMemberRole(member.role), role: OB11Entities.groupMemberRole(member.role),
title: member.memberSpecialTitle || '', title: member.memberSpecialTitle || '',
}; };
} }