mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
chore: 可读性提高 优化代码
This commit is contained in:
@@ -727,8 +727,33 @@ export class OneBotMsgApi {
|
|||||||
) {
|
) {
|
||||||
if (msg.senderUin == '0' || msg.senderUin == '') return;
|
if (msg.senderUin == '0' || msg.senderUin == '') return;
|
||||||
if (msg.peerUin == '0' || msg.peerUin == '') return;
|
if (msg.peerUin == '0' || msg.peerUin == '') return;
|
||||||
//跳过空消息
|
|
||||||
const resMsg: OB11Message = {
|
const resMsg = this.initializeMessage(msg);
|
||||||
|
|
||||||
|
if (this.core.selfInfo.uin == msg.senderUin) {
|
||||||
|
resMsg.message_sent_type = 'self';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg.chatType == ChatType.KCHATTYPEGROUP) {
|
||||||
|
await this.handleGroupMessage(resMsg, msg);
|
||||||
|
} else if (msg.chatType == ChatType.KCHATTYPEC2C) {
|
||||||
|
await this.handlePrivateMessage(resMsg, msg);
|
||||||
|
} else if (msg.chatType == ChatType.KCHATTYPETEMPC2CFROMGROUP) {
|
||||||
|
await this.handleTempGroupMessage(resMsg, msg);
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const validSegments = await this.parseMessageSegments(msg, parseMultMsg);
|
||||||
|
resMsg.message = validSegments;
|
||||||
|
resMsg.raw_message = validSegments.map(msg => encodeCQCode(msg)).join('').trim();
|
||||||
|
|
||||||
|
const stringMsg = await this.convertArrayToStringMessage(resMsg);
|
||||||
|
return { stringMsg, arrayMsg: resMsg };
|
||||||
|
}
|
||||||
|
|
||||||
|
private initializeMessage(msg: RawMessage): OB11Message {
|
||||||
|
return {
|
||||||
self_id: parseInt(this.core.selfInfo.uin),
|
self_id: parseInt(this.core.selfInfo.uin),
|
||||||
user_id: parseInt(msg.senderUin),
|
user_id: parseInt(msg.senderUin),
|
||||||
time: parseInt(msg.msgTime) || Date.now(),
|
time: parseInt(msg.msgTime) || Date.now(),
|
||||||
@@ -748,37 +773,40 @@ export class OneBotMsgApi {
|
|||||||
message_format: 'array',
|
message_format: 'array',
|
||||||
post_type: this.core.selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE,
|
post_type: this.core.selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE,
|
||||||
};
|
};
|
||||||
if (this.core.selfInfo.uin == msg.senderUin) {
|
}
|
||||||
resMsg.message_sent_type = 'self';
|
|
||||||
}
|
|
||||||
if (msg.chatType == ChatType.KCHATTYPEGROUP) {
|
|
||||||
resMsg.sub_type = 'normal'; // 这里go-cqhttp是group,而onebot11标准是normal, 蛋疼
|
|
||||||
resMsg.group_id = parseInt(msg.peerUin);
|
|
||||||
let member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
|
||||||
if (!member) member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
|
||||||
if (member) {
|
|
||||||
resMsg.sender.role = OB11Construct.groupMemberRole(member.role);
|
|
||||||
resMsg.sender.nickname = member.nick;
|
|
||||||
}
|
|
||||||
} else if (msg.chatType == ChatType.KCHATTYPEC2C) {
|
|
||||||
resMsg.sub_type = 'friend';
|
|
||||||
resMsg.sender.nickname = (await this.core.apis.UserApi.getUserDetailInfo(msg.senderUid)).nick;
|
|
||||||
} else if (msg.chatType == ChatType.KCHATTYPETEMPC2CFROMGROUP) {
|
|
||||||
resMsg.sub_type = 'group';
|
|
||||||
const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
|
|
||||||
if (ret.result === 0) {
|
|
||||||
const member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
|
||||||
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
|
|
||||||
resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话';
|
|
||||||
resMsg.temp_source = resMsg.group_id;
|
|
||||||
} else {
|
|
||||||
resMsg.group_id = 284840486; //兜底数据
|
|
||||||
resMsg.temp_source = resMsg.group_id;
|
|
||||||
resMsg.sender.nickname = '临时会话';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理消息段
|
private async handleGroupMessage(resMsg: OB11Message, msg: RawMessage) {
|
||||||
|
resMsg.sub_type = 'normal';
|
||||||
|
resMsg.group_id = parseInt(msg.peerUin);
|
||||||
|
let member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||||
|
if (!member) member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||||
|
if (member) {
|
||||||
|
resMsg.sender.role = OB11Construct.groupMemberRole(member.role);
|
||||||
|
resMsg.sender.nickname = member.nick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async handlePrivateMessage(resMsg: OB11Message, msg: RawMessage) {
|
||||||
|
resMsg.sub_type = 'friend';
|
||||||
|
resMsg.sender.nickname = (await this.core.apis.UserApi.getUserDetailInfo(msg.senderUid)).nick;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async handleTempGroupMessage(resMsg: OB11Message, msg: RawMessage) {
|
||||||
|
resMsg.sub_type = 'group';
|
||||||
|
const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
|
||||||
|
if (ret.result === 0) {
|
||||||
|
const member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||||
|
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
|
||||||
|
resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话';
|
||||||
|
resMsg.temp_source = resMsg.group_id;
|
||||||
|
} else {
|
||||||
|
resMsg.group_id = 284840486;
|
||||||
|
resMsg.temp_source = resMsg.group_id;
|
||||||
|
resMsg.sender.nickname = '临时会话';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async parseMessageSegments(msg: RawMessage, parseMultMsg: boolean): Promise<OB11MessageData[]> {
|
||||||
const msgSegments = await Promise.allSettled(msg.elements.map(
|
const msgSegments = await Promise.allSettled(msg.elements.map(
|
||||||
async (element) => {
|
async (element) => {
|
||||||
for (const key in element) {
|
for (const key in element) {
|
||||||
@@ -793,43 +821,41 @@ export class OneBotMsgApi {
|
|||||||
element[key],
|
element[key],
|
||||||
msg,
|
msg,
|
||||||
element,
|
element,
|
||||||
{
|
{ parseMultMsg }
|
||||||
parseMultMsg: parseMultMsg
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
// 对于 face 类型的消息,检查是否存在
|
|
||||||
if (key === 'faceElement' && !parsedElement) {
|
if (key === 'faceElement' && !parsedElement) {
|
||||||
return null; // 如果没有找到对应的表情,返回 null
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parsedElement;
|
return parsedElement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
|
||||||
// 过滤掉无效的消息段
|
return msgSegments.filter(entry => {
|
||||||
const validSegments = msgSegments.filter(entry => {
|
|
||||||
if (entry.status === 'fulfilled') {
|
if (entry.status === 'fulfilled') {
|
||||||
return !!entry.value;
|
return !!entry.value;
|
||||||
} else {
|
} else {
|
||||||
this.core.context.logger.logError.bind(this.core.context.logger)('消息段解析失败', entry.reason);
|
this.core.context.logger.logError('消息段解析失败', entry.reason);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}).map((entry) => (<PromiseFulfilledResult<OB11MessageData>>entry).value).filter(value => value != null);
|
}).map((entry) => (<PromiseFulfilledResult<OB11MessageData>>entry).value).filter(value => value != null);
|
||||||
|
|
||||||
const msgAsCQCode = validSegments.map(msg => encodeCQCode(msg)).join('').trim();
|
|
||||||
resMsg.message = validSegments;
|
|
||||||
resMsg.raw_message = msgAsCQCode;
|
|
||||||
let stringMsg = structuredClone(resMsg);
|
|
||||||
stringMsg = await this.importArrayTostringMsg(stringMsg);
|
|
||||||
return { stringMsg: stringMsg, arrayMsg: resMsg };
|
|
||||||
}
|
}
|
||||||
async importArrayTostringMsg(msg: OB11Message) {
|
|
||||||
|
private async convertArrayToStringMessage(originMsg: OB11Message): Promise<OB11Message> {
|
||||||
|
let msg = structuredClone(originMsg);
|
||||||
msg.message_format = 'string';
|
msg.message_format = 'string';
|
||||||
msg.message = msg.raw_message;
|
msg.message = msg.raw_message;
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async importArrayTostringMsg(originMsg: OB11Message) {
|
||||||
|
let msg = structuredClone(originMsg);
|
||||||
|
msg.message_format = 'string';
|
||||||
|
msg.message = msg.raw_message;
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
async createSendElements(
|
async createSendElements(
|
||||||
messageData: OB11MessageData[],
|
messageData: OB11MessageData[],
|
||||||
peer: Peer,
|
peer: Peer,
|
||||||
|
Reference in New Issue
Block a user