This commit is contained in:
手瓜一十雪
2025-01-13 19:25:08 +08:00
parent c8ee371982
commit a56cee3485
4 changed files with 5 additions and 15 deletions

View File

@@ -18,7 +18,6 @@ export class NTQQGroupApi {
context: InstanceContext; context: InstanceContext;
core: NapCatCore; core: NapCatCore;
groupMemberCache: Map<string, Map<string, GroupMember>> = new Map<string, Map<string, GroupMember>>(); groupMemberCache: Map<string, Map<string, GroupMember>> = new Map<string, Map<string, GroupMember>>();
groupMemberCacheEvent: Map<string, boolean> = new Map<string, boolean>();
essenceLRU = new LimitedHashTable<number, string>(1000); essenceLRU = new LimitedHashTable<number, string>(1000);
constructor(context: InstanceContext, core: NapCatCore) { constructor(context: InstanceContext, core: NapCatCore) {
@@ -128,15 +127,12 @@ export class NTQQGroupApi {
} }
async refreshGroupMemberCache(groupCode: string, isWait = true) { async refreshGroupMemberCache(groupCode: string, isWait = true) {
this.groupMemberCacheEvent.set(groupCode, true);
const updateCache = async () => { const updateCache = async () => {
try { try {
const members = await this.getGroupMemberAll(groupCode, true); const members = await this.getGroupMemberAll(groupCode, true);
this.groupMemberCache.set(groupCode, members.result.infos); this.groupMemberCache.set(groupCode, members.result.infos);
} catch (e) { } catch (e) {
this.context.logger.logError(`刷新群成员缓存失败, 群号: ${groupCode}, 错误: ${e}`); this.context.logger.logError(`刷新群成员缓存失败, 群号: ${groupCode}, 错误: ${e}`);
} finally {
this.groupMemberCacheEvent.set(groupCode, false);
} }
}; };

View File

@@ -35,13 +35,7 @@ class GetGroupMemberInfo extends OneBotAction<Payload, OB11GroupMember> {
this.core.apis.UserApi.getUserDetailInfo(uid), this.core.apis.UserApi.getUserDetailInfo(uid),
]); ]);
if (!member) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`); if (!member || !groupMember) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`);
if (!groupMember && this.core.apis.GroupApi.groupMemberCacheEvent.get(payload.group_id.toString())) {
groupMember = (await this.core.apis.GroupApi.refreshGroupMemberCache(payload.group_id.toString(), true))?.get(uid);
}
if (!groupMember) throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在`);
return info ? { ...groupMember, ...member, ...info } : member; return info ? { ...groupMember, ...member, ...info } : member;
} }

View File

@@ -223,7 +223,7 @@ export class OneBotGroupApi {
} else if (element.type === TipGroupElementType.KMEMBERADD) { } else if (element.type === TipGroupElementType.KMEMBERADD) {
// 自己的通知 协议推送为type->85 在这里实现为了避免邀请出现问题 // 自己的通知 协议推送为type->85 在这里实现为了避免邀请出现问题
if (element.memberUid == this.core.selfInfo.uid) { if (element.memberUid == this.core.selfInfo.uid) {
await this.core.apis.GroupApi.refreshGroupMemberCache(msg.peerUid, false); await this.core.apis.GroupApi.refreshGroupMemberCache(msg.peerUid, true);
return new OB11GroupIncreaseEvent( return new OB11GroupIncreaseEvent(
this.core, this.core,
parseInt(msg.peerUid), parseInt(msg.peerUid),

View File

@@ -1022,7 +1022,7 @@ export class OneBotMsgApi {
// 邀请需要解grayTipElement // 邀请需要解grayTipElement
if (SysMessage.contentHead.type == 33 && SysMessage.body?.msgContent) { if (SysMessage.contentHead.type == 33 && SysMessage.body?.msgContent) {
const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent); const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent);
await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString(), false); await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString(), true);
let operatorUid = await this.waitGroupNotify( let operatorUid = await this.waitGroupNotify(
groupChange.groupUin.toString(), groupChange.groupUin.toString(),
groupChange.memberUid, groupChange.memberUid,
@@ -1052,7 +1052,7 @@ export class OneBotMsgApi {
}, 5000); }, 5000);
// 自己被踢了 5S后回收 // 自己被踢了 5S后回收
} else { } else {
await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString(), false); await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString(), true);
} }
return new OB11GroupDecreaseEvent( return new OB11GroupDecreaseEvent(
this.core, this.core,
@@ -1063,7 +1063,7 @@ export class OneBotMsgApi {
); );
} else if (SysMessage.contentHead.type == 44 && SysMessage.body?.msgContent) { } else if (SysMessage.contentHead.type == 44 && SysMessage.body?.msgContent) {
const groupAmin = new NapProtoMsg(GroupAdmin).decode(SysMessage.body.msgContent); const groupAmin = new NapProtoMsg(GroupAdmin).decode(SysMessage.body.msgContent);
await this.core.apis.GroupApi.refreshGroupMemberCache(groupAmin.groupUin.toString(), false); await this.core.apis.GroupApi.refreshGroupMemberCache(groupAmin.groupUin.toString(), true);
let enabled = false; let enabled = false;
let uid = ''; let uid = '';
if (groupAmin.body.extraEnable != null) { if (groupAmin.body.extraEnable != null) {