diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index e0ad9836..783ea611 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -101,33 +101,40 @@ export class OB11Constructor { } } for (const element of msg.elements) { - const message_data: OB11MessageData | any = { - data: {}, - type: 'unknown' + let message_data: OB11MessageData = { + data: {} as any, + type: 'unknown' as any }; if (element.textElement && element.textElement?.atType !== AtType.notAt) { - message_data['type'] = OB11MessageDataType.at; + let qq: `${number}` | 'all'; + let name: string | undefined; if (element.textElement.atType == AtType.atAll) { - // message_data["data"]["mention"] = "all" - message_data['data']['qq'] = 'all'; + qq = 'all'; } else { - const atUid = element.textElement.atNtUid; + const { atNtUid, content } = element.textElement; let atQQ = element.textElement.atUid; if (!atQQ || atQQ === '0') { - const atMember = await getGroupMember(msg.peerUin, atUid); + const atMember = await getGroupMember(msg.peerUin, atNtUid); if (atMember) { atQQ = atMember.uin; } } if (atQQ) { - // message_data["data"]["mention"] = atQQ - message_data['data']['qq'] = atQQ; + qq = atQQ as `${number}`; + name = content.replace('@', ''); } } + message_data = { + type: OB11MessageDataType.at, + data: { + qq: qq!, + name + } + }; } else if (element.textElement) { - message_data['type'] = 'text'; + message_data['type'] = OB11MessageDataType.text; let text = element.textElement.content; if (!text.trim()) { @@ -140,7 +147,7 @@ export class OB11Constructor { message_data['data']['text'] = text; } else if (element.replyElement) { - message_data['type'] = 'reply'; + message_data['type'] = OB11MessageDataType.reply; //log("收到回复消息", element.replyElement); try { //做这么多都是因为NC速度太快 可能nt还没有写入数据库 @@ -163,14 +170,14 @@ export class OB11Constructor { message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgId)?.toString(); //log("找到回复消息", message_data['data']['id'], replyMsg.msgList[0].msgId) } catch (e: any) { - message_data['type'] = "unknown"; + message_data['type'] = 'unknown' as any; message_data['data'] = undefined; logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq); } } else if (element.picElement) { - message_data['type'] = 'image'; + message_data['type'] = OB11MessageDataType.image; // message_data["data"]["file"] = element.picElement.sourcePath message_data['data']['file'] = element.picElement.fileName; message_data['data']['subType'] = element.picElement.picSubType; @@ -199,13 +206,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - FileElement.fileSize, - FileElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + FileElement.fileSize, + FileElement.fileName ); } else if (element.videoElement) { @@ -246,13 +253,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - videoElement.fileSize || '0', - videoElement.fileName + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + videoElement.fileSize || '0', + videoElement.fileName ); } else if (element.pttElement) { @@ -267,13 +274,13 @@ export class OB11Constructor { chatType: msg.chatType, guildId: '', }, - msg.msgId, - msg.msgSeq, - msg.senderUid, - element.elementId, - element.elementType.toString(), - element.pttElement.fileSize || '0', - element.pttElement.fileUuid || '' + msg.msgId, + msg.msgSeq, + msg.senderUid, + element.elementId, + element.elementType.toString(), + element.pttElement.fileSize || '0', + element.pttElement.fileUuid || '' ); //以uuid作为文件名 } @@ -319,7 +326,7 @@ export class OB11Constructor { message_data['type'] = OB11MessageDataType.forward; message_data['data']['id'] = msg.msgId; } - if (message_data.type !== 'unknown' && message_data.data) { + if ((message_data.type as string) !== 'unknown' && message_data.data) { const cqCode = encodeCQCode(message_data); if (messagePostFormat === 'string') { diff --git a/src/onebot11/cqcode.ts b/src/onebot11/cqcode.ts index f8fdee0e..c5a837d5 100644 --- a/src/onebot11/cqcode.ts +++ b/src/onebot11/cqcode.ts @@ -66,16 +66,16 @@ export function encodeCQCode(data: OB11MessageData) { let result = '[CQ:' + data.type; for (const name in data.data) { - let value = data.data[name]; - try { - // Check if the value can be converted to a string - value = value.toString(); - } catch (error) { - // If it can't be converted, skip this name-value pair - // console.warn(`Skipping problematic name-value pair. Name: ${name}, Value: ${value}`); + const value = data.data[name]; + if (value === undefined) { continue; } - result += `,${name}=${CQCodeEscape(value)}`; + try { + const text = value.toString(); + result += `,${name}=${CQCodeEscape(text)}`; + } catch (error) { + // If it can't be converted, skip this name-value pair + } } result += ']'; return result; diff --git a/src/onebot11/types/message.ts b/src/onebot11/types/message.ts index 6cf19cff..4ac77859 100644 --- a/src/onebot11/types/message.ts +++ b/src/onebot11/types/message.ts @@ -114,6 +114,7 @@ export interface OB11MessageAt { type: OB11MessageDataType.at data: { qq: `${number}` | 'all' + name?: string } } @@ -177,13 +178,20 @@ export interface OB11MessageMarkdown { } } +export interface OB11MessageForward { + type: OB11MessageDataType.forward + data: { + id: string + } +} + export type OB11MessageData = OB11MessageText | OB11MessageFace | OB11MessageMFace | OB11MessageAt | OB11MessageReply | OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo | OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson | - OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown + OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward export interface OB11PostSendMsg { message_type?: 'private' | 'group'