mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix: #605
This commit is contained in:
@@ -54,12 +54,20 @@ export const PushMsg = {
|
|||||||
generalFlag: ProtoField(9, ScalarType.INT32, true),
|
generalFlag: ProtoField(9, ScalarType.INT32, true),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const GroupChangeInfo = {
|
||||||
|
operator: ProtoField(1, () => GroupChangeOperator, true),
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GroupChangeOperator = {
|
||||||
|
operatorUid: ProtoField(1, ScalarType.STRING, true),
|
||||||
|
};
|
||||||
|
|
||||||
export const GroupChange = {
|
export const GroupChange = {
|
||||||
groupUin: ProtoField(1, ScalarType.UINT32),
|
groupUin: ProtoField(1, ScalarType.UINT32),
|
||||||
flag: ProtoField(2, ScalarType.UINT32),
|
flag: ProtoField(2, ScalarType.UINT32),
|
||||||
memberUid: ProtoField(3, ScalarType.STRING, true),
|
memberUid: ProtoField(3, ScalarType.STRING, true),
|
||||||
decreaseType: ProtoField(4, ScalarType.UINT32),
|
decreaseType: ProtoField(4, ScalarType.UINT32),
|
||||||
operatorUid: ProtoField(5, ScalarType.STRING, true),
|
operatorInfo: ProtoField(5, ScalarType.BYTES, true),
|
||||||
increaseType: ProtoField(6, ScalarType.UINT32),
|
increaseType: ProtoField(6, ScalarType.UINT32),
|
||||||
field7: ProtoField(7, ScalarType.BYTES, true),
|
field7: ProtoField(7, ScalarType.BYTES, true),
|
||||||
};
|
};
|
||||||
|
@@ -28,12 +28,12 @@ import { RequestUtil } from '@/common/request';
|
|||||||
import fsPromise, { constants } from 'node:fs/promises';
|
import fsPromise, { constants } from 'node:fs/promises';
|
||||||
import { OB11FriendAddNoticeEvent } from '@/onebot/event/notice/OB11FriendAddNoticeEvent';
|
import { OB11FriendAddNoticeEvent } from '@/onebot/event/notice/OB11FriendAddNoticeEvent';
|
||||||
import { ForwardMsgBuilder } from "@/common/forward-msg-builder";
|
import { ForwardMsgBuilder } from "@/common/forward-msg-builder";
|
||||||
import { GroupChange, PushMsgBody } from "@/core/packet/transformer/proto";
|
|
||||||
import { NapProtoMsg } from '@napneko/nap-proto-core';
|
import { NapProtoMsg } from '@napneko/nap-proto-core';
|
||||||
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
||||||
import { OB11GroupDecreaseEvent, GroupDecreaseSubType } from '../event/notice/OB11GroupDecreaseEvent';
|
import { OB11GroupDecreaseEvent, GroupDecreaseSubType } from '../event/notice/OB11GroupDecreaseEvent';
|
||||||
import { GroupAdmin } from '@/core/packet/transformer/proto/message/groupAdmin';
|
import { GroupAdmin } from '@/core/packet/transformer/proto/message/groupAdmin';
|
||||||
import { OB11GroupAdminNoticeEvent } from '../event/notice/OB11GroupAdminNoticeEvent';
|
import { OB11GroupAdminNoticeEvent } from '../event/notice/OB11GroupAdminNoticeEvent';
|
||||||
|
import { GroupChange, GroupChangeInfo, PushMsgBody } from '@/core/packet/transformer/proto';
|
||||||
|
|
||||||
type RawToOb11Converters = {
|
type RawToOb11Converters = {
|
||||||
[Key in keyof MessageElement as Key extends `${string}Element` ? Key : never]: (
|
[Key in keyof MessageElement as Key extends `${string}Element` ? Key : never]: (
|
||||||
@@ -891,42 +891,42 @@ export class OneBotMsgApi {
|
|||||||
if (!sendElements.length) {
|
if (!sendElements.length) {
|
||||||
throw new Error('消息体无法解析, 请检查是否发送了不支持的消息类型');
|
throw new Error('消息体无法解析, 请检查是否发送了不支持的消息类型');
|
||||||
}
|
}
|
||||||
|
|
||||||
const calculateTotalSize = async (elements: SendMessageElement[]): Promise<number> => {
|
const calculateTotalSize = async (elements: SendMessageElement[]): Promise<number> => {
|
||||||
const sizePromises = elements.map(async element => {
|
const sizePromises = elements.map(async element => {
|
||||||
switch (element.elementType) {
|
switch (element.elementType) {
|
||||||
case ElementType.PTT:
|
case ElementType.PTT:
|
||||||
return (await fsPromise.stat(element.pttElement.filePath)).size;
|
return (await fsPromise.stat(element.pttElement.filePath)).size;
|
||||||
case ElementType.FILE:
|
case ElementType.FILE:
|
||||||
return (await fsPromise.stat(element.fileElement.filePath)).size;
|
return (await fsPromise.stat(element.fileElement.filePath)).size;
|
||||||
case ElementType.VIDEO:
|
case ElementType.VIDEO:
|
||||||
return (await fsPromise.stat(element.videoElement.filePath)).size;
|
return (await fsPromise.stat(element.videoElement.filePath)).size;
|
||||||
case ElementType.PIC:
|
case ElementType.PIC:
|
||||||
return (await fsPromise.stat(element.picElement.sourcePath)).size;
|
return (await fsPromise.stat(element.picElement.sourcePath)).size;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const sizes = await Promise.all(sizePromises);
|
const sizes = await Promise.all(sizePromises);
|
||||||
return sizes.reduce((total, size) => total + size, 0);
|
return sizes.reduce((total, size) => total + size, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
const totalSize = await calculateTotalSize(sendElements).catch(e => {
|
const totalSize = await calculateTotalSize(sendElements).catch(e => {
|
||||||
this.core.context.logger.logError('发送消息计算预计时间异常', e);
|
this.core.context.logger.logError('发送消息计算预计时间异常', e);
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
const timeout = 10000 + (totalSize / 1024 / 256 * 1000);
|
const timeout = 10000 + (totalSize / 1024 / 256 * 1000);
|
||||||
|
|
||||||
const returnMsg = await this.core.apis.MsgApi.sendMsg(peer, sendElements, waitComplete, timeout);
|
const returnMsg = await this.core.apis.MsgApi.sendMsg(peer, sendElements, waitComplete, timeout);
|
||||||
if (!returnMsg) throw new Error('发送消息失败');
|
if (!returnMsg) throw new Error('发送消息失败');
|
||||||
|
|
||||||
returnMsg.id = MessageUnique.createUniqueMsgId({
|
returnMsg.id = MessageUnique.createUniqueMsgId({
|
||||||
chatType: peer.chatType,
|
chatType: peer.chatType,
|
||||||
guildId: '',
|
guildId: '',
|
||||||
peerUid: peer.peerUid,
|
peerUid: peer.peerUid,
|
||||||
}, returnMsg.msgId);
|
}, returnMsg.msgId);
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
const deletePromises = deleteAfterSentFiles.map(async file => {
|
const deletePromises = deleteAfterSentFiles.map(async file => {
|
||||||
try {
|
try {
|
||||||
@@ -939,7 +939,7 @@ export class OneBotMsgApi {
|
|||||||
});
|
});
|
||||||
await Promise.all(deletePromises);
|
await Promise.all(deletePromises);
|
||||||
}, 60000);
|
}, 60000);
|
||||||
|
|
||||||
return returnMsg;
|
return returnMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,14 +970,14 @@ export class OneBotMsgApi {
|
|||||||
}
|
}
|
||||||
groupChangDecreseType2String(type: number): GroupDecreaseSubType {
|
groupChangDecreseType2String(type: number): GroupDecreaseSubType {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 130:
|
case 130:
|
||||||
return 'leave';
|
return 'leave';
|
||||||
case 131:
|
case 131:
|
||||||
return 'kick';
|
return 'kick';
|
||||||
case 3:
|
case 3:
|
||||||
return 'kick_me';
|
return 'kick_me';
|
||||||
default:
|
default:
|
||||||
return 'kick';
|
return 'kick';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -986,15 +986,20 @@ export class OneBotMsgApi {
|
|||||||
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);
|
||||||
this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString()).then().catch();
|
this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString()).then().catch();
|
||||||
|
const operatorUid = groupChange.operatorInfo?.toString();
|
||||||
return new OB11GroupIncreaseEvent(
|
return new OB11GroupIncreaseEvent(
|
||||||
this.core,
|
this.core,
|
||||||
groupChange.groupUin,
|
groupChange.groupUin,
|
||||||
groupChange.memberUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.memberUid) : 0,
|
groupChange.memberUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.memberUid) : 0,
|
||||||
groupChange.operatorUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.operatorUid) : 0,
|
operatorUid ? +await this.core.apis.UserApi.getUinByUidV2(operatorUid) : 0,
|
||||||
groupChange.decreaseType == 131 ? 'invite' : 'approve',
|
groupChange.decreaseType == 131 ? 'invite' : 'approve',
|
||||||
);
|
);
|
||||||
} else if (SysMessage.contentHead.type == 34 && SysMessage.body?.msgContent) {
|
} else if (SysMessage.contentHead.type == 34 && SysMessage.body?.msgContent) {
|
||||||
const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent);
|
const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent);
|
||||||
|
// 自身被踢出时operatorInfo会是一个protobuf 否则大多数情况为一个string
|
||||||
|
const operatorUid = groupChange.decreaseType === 3 && groupChange.operatorInfo ?
|
||||||
|
new NapProtoMsg(GroupChangeInfo).decode(groupChange.operatorInfo).operator?.operatorUid :
|
||||||
|
groupChange.operatorInfo?.toString();
|
||||||
if (groupChange.memberUid === this.core.selfInfo.uid) {
|
if (groupChange.memberUid === this.core.selfInfo.uid) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.core.apis.GroupApi.groupMemberCache.delete(groupChange.groupUin.toString());
|
this.core.apis.GroupApi.groupMemberCache.delete(groupChange.groupUin.toString());
|
||||||
@@ -1007,7 +1012,7 @@ export class OneBotMsgApi {
|
|||||||
this.core,
|
this.core,
|
||||||
groupChange.groupUin,
|
groupChange.groupUin,
|
||||||
groupChange.memberUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.memberUid) : 0,
|
groupChange.memberUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.memberUid) : 0,
|
||||||
groupChange.operatorUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.operatorUid) : 0,
|
operatorUid ? +await this.core.apis.UserApi.getUinByUidV2(operatorUid) : 0,
|
||||||
this.groupChangDecreseType2String(groupChange.decreaseType),
|
this.groupChangDecreseType2String(groupChange.decreaseType),
|
||||||
);
|
);
|
||||||
} else if (SysMessage.contentHead.type == 44 && SysMessage.body?.msgContent) {
|
} else if (SysMessage.contentHead.type == 44 && SysMessage.body?.msgContent) {
|
||||||
|
Reference in New Issue
Block a user