mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix: #682
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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),
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user