chore: 可读性提高 优化代码

This commit is contained in:
手瓜一十雪
2024-11-25 21:44:22 +08:00
parent 4e6af0a655
commit 6d0020533c

View File

@@ -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,11 +773,10 @@ 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, 蛋疼 private async handleGroupMessage(resMsg: OB11Message, msg: RawMessage) {
resMsg.sub_type = 'normal';
resMsg.group_id = parseInt(msg.peerUin); resMsg.group_id = parseInt(msg.peerUin);
let member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin); 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) member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
@@ -760,10 +784,14 @@ export class OneBotMsgApi {
resMsg.sender.role = OB11Construct.groupMemberRole(member.role); resMsg.sender.role = OB11Construct.groupMemberRole(member.role);
resMsg.sender.nickname = member.nick; resMsg.sender.nickname = member.nick;
} }
} else if (msg.chatType == ChatType.KCHATTYPEC2C) { }
private async handlePrivateMessage(resMsg: OB11Message, msg: RawMessage) {
resMsg.sub_type = 'friend'; resMsg.sub_type = 'friend';
resMsg.sender.nickname = (await this.core.apis.UserApi.getUserDetailInfo(msg.senderUid)).nick; resMsg.sender.nickname = (await this.core.apis.UserApi.getUserDetailInfo(msg.senderUid)).nick;
} else if (msg.chatType == ChatType.KCHATTYPETEMPC2CFROMGROUP) { }
private async handleTempGroupMessage(resMsg: OB11Message, msg: RawMessage) {
resMsg.sub_type = 'group'; resMsg.sub_type = 'group';
const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid); const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
if (ret.result === 0) { if (ret.result === 0) {
@@ -772,13 +800,13 @@ export class OneBotMsgApi {
resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话'; resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话';
resMsg.temp_source = resMsg.group_id; resMsg.temp_source = resMsg.group_id;
} else { } else {
resMsg.group_id = 284840486; //兜底数据 resMsg.group_id = 284840486;
resMsg.temp_source = resMsg.group_id; resMsg.temp_source = resMsg.group_id;
resMsg.sender.nickname = '临时会话'; 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,