mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-12 07:50:25 +00:00
refactor: make parseMessage an instance method
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
export * from './config';
|
||||
export * from './parseMessage';
|
||||
export * from './converter';
|
||||
export * from './quick';
|
||||
export * from './genMessage';
|
||||
export * from './event';
|
||||
export * from './event';
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
import { NapCatOneBot11Adapter, OB11Message, OB11MessageData, OB11MessageDataType } from '..';
|
||||
import { AtType, ChatType, NapCatCore, RawMessage } from '@/core';
|
||||
import { EventType } from '../event/OB11BaseEvent';
|
||||
import { OB11Constructor } from './converter';
|
||||
import { encodeCQCode } from './cqcode';
|
||||
|
||||
|
||||
export async function RawNTMsg2Onebot(
|
||||
core: NapCatCore,
|
||||
obcore: NapCatOneBot11Adapter,
|
||||
msg: RawMessage,
|
||||
messagePostFormat: string = obcore.configLoader.configData.messagePostFormat
|
||||
): Promise<OB11Message | undefined> {
|
||||
if (msg.senderUin == "0" || msg.senderUin == "") return;
|
||||
if (msg.peerUin == "0" || msg.peerUin == "") return;
|
||||
//跳过空消息
|
||||
const NTQQGroupApi = core.apis.GroupApi;
|
||||
const NTQQUserApi = core.apis.UserApi;
|
||||
const NTQQMsgApi = core.apis.MsgApi;
|
||||
const resMsg: OB11Message = {
|
||||
self_id: parseInt(core.selfInfo.uin),
|
||||
user_id: parseInt(msg.senderUin!),
|
||||
time: parseInt(msg.msgTime) || Date.now(),
|
||||
message_id: msg.id!,
|
||||
message_seq: msg.id!,
|
||||
real_id: msg.id!,
|
||||
message_type: msg.chatType == ChatType.KCHATTYPEGROUP ? 'group' : 'private',
|
||||
sender: {
|
||||
user_id: parseInt(msg.senderUin || '0'),
|
||||
nickname: msg.sendNickName,
|
||||
card: msg.sendMemberName || '',
|
||||
},
|
||||
raw_message: '',
|
||||
font: 14,
|
||||
sub_type: 'friend',
|
||||
message: messagePostFormat === 'string' ? '' : [],
|
||||
message_format: messagePostFormat === 'string' ? 'string' : 'array',
|
||||
post_type: core.selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE,
|
||||
};
|
||||
if (msg.chatType == ChatType.KCHATTYPEGROUP) {
|
||||
resMsg.sub_type = 'normal'; // 这里go-cqhttp是group,而onebot11标准是normal, 蛋疼
|
||||
resMsg.group_id = parseInt(msg.peerUin);
|
||||
let member = await NTQQGroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||
if (!member) member = await NTQQGroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||
if (member) {
|
||||
resMsg.sender.role = OB11Constructor.groupMemberRole(member.role);
|
||||
resMsg.sender.nickname = member.nick;
|
||||
}
|
||||
} else if (msg.chatType == ChatType.KCHATTYPEC2C) {
|
||||
resMsg.sub_type = 'friend';
|
||||
resMsg.sender.nickname = (await NTQQUserApi.getUserDetailInfo(msg.senderUid)).nick;
|
||||
} else if (msg.chatType == ChatType.KCHATTYPETEMPC2CFROMGROUP) {
|
||||
resMsg.sub_type = 'group';
|
||||
const ret = await NTQQMsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
|
||||
if (ret.result === 0) {
|
||||
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
|
||||
resMsg.sender.nickname = ret.tmpChatInfo!.fromNick;
|
||||
} else {
|
||||
resMsg.group_id = 284840486; //兜底数据
|
||||
resMsg.sender.nickname = "临时会话";
|
||||
}
|
||||
}
|
||||
for (const element of msg.elements) {
|
||||
let message_data: OB11MessageData = {
|
||||
data: {} as any,
|
||||
type: 'unknown' as any,
|
||||
};
|
||||
if (element.textElement && element.textElement?.atType !== AtType.notAt) {
|
||||
let textAtMsgData = await obcore.apiContext.MsgApi.parseTextElemntWithAt(msg, element);
|
||||
if (textAtMsgData) message_data = textAtMsgData
|
||||
} else if (element.textElement) {
|
||||
let textMsgData = await obcore.apiContext.MsgApi.parseTextElement(msg, element);
|
||||
if (textMsgData) message_data = textMsgData;
|
||||
} else if (element.replyElement) {
|
||||
let replyMsgData = await obcore.apiContext.MsgApi.parseReplyElement(msg, element);
|
||||
if (replyMsgData) message_data = replyMsgData;
|
||||
} else if (element.picElement) {
|
||||
let PicMsgData = await obcore.apiContext.MsgApi.parsePicElement(msg, element);
|
||||
if (PicMsgData) message_data = PicMsgData;
|
||||
} else if (element.fileElement) {
|
||||
let FileMsgData = await obcore.apiContext.MsgApi.parseFileElement(msg, element);
|
||||
if (FileMsgData) message_data = FileMsgData;
|
||||
} else if (element.videoElement) {
|
||||
let videoMsgData = await obcore.apiContext.MsgApi.parseVideoElement(msg, element);
|
||||
if (videoMsgData) message_data = videoMsgData;
|
||||
} else if (element.pttElement) {
|
||||
let pttMsgData = await obcore.apiContext.MsgApi.parsePTTElement(msg, element);
|
||||
if (pttMsgData) message_data = pttMsgData;
|
||||
} else if (element.arkElement) {
|
||||
let arkMsgData = await obcore.apiContext.MsgApi.parseArkElement(msg, element);
|
||||
if (arkMsgData) message_data = arkMsgData;
|
||||
} else if (element.faceElement) {
|
||||
let faceMsgData = await obcore.apiContext.MsgApi.parseFaceElement(msg, element);
|
||||
if (faceMsgData) message_data = faceMsgData;
|
||||
} else if (element.marketFaceElement) {
|
||||
let marketFaceMsgData = await obcore.apiContext.MsgApi.parseMarketFaceElement(msg, element);
|
||||
if (marketFaceMsgData) message_data = marketFaceMsgData;
|
||||
} else if (element.markdownElement) {
|
||||
message_data['type'] = OB11MessageDataType.markdown;
|
||||
message_data['data']['data'] = element.markdownElement.content;
|
||||
} else if (element.multiForwardMsgElement) {
|
||||
let multiForwardMsgData = await obcore.apiContext.MsgApi.parseMultForwardElement(msg, element, messagePostFormat);
|
||||
if (multiForwardMsgData) message_data = multiForwardMsgData;
|
||||
}
|
||||
if ((message_data.type as string) !== 'unknown' && message_data.data) {
|
||||
const cqCode = encodeCQCode(message_data);
|
||||
|
||||
if (messagePostFormat === 'string') {
|
||||
(resMsg.message as string) += cqCode;
|
||||
} else (resMsg.message as OB11MessageData[]).push(message_data);
|
||||
resMsg.raw_message += cqCode;
|
||||
}
|
||||
|
||||
}
|
||||
resMsg.raw_message = resMsg.raw_message.trim();
|
||||
return resMsg;
|
||||
}
|
||||
Reference in New Issue
Block a user