From 71aedca4c65f4240537a48111f5c287249b469c8 Mon Sep 17 00:00:00 2001 From: idranme <96647698+idranme@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:23:48 +0000 Subject: [PATCH 1/4] feat: the name attribute of the at message segment --- src/onebot11/constructor.ts | 39 +++++++++++++++++++++++-------------- src/onebot11/cqcode.ts | 10 +++++----- src/onebot11/types.ts | 17 ++++++++++++++++ 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index addc4fb..544f657 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -109,33 +109,42 @@ export class OB11Constructor { } for (let element of msg.elements) { - let 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: string + let name: string | undefined if (element.textElement.atType == AtType.atAll) { // message_data["data"]["mention"] = "all" - message_data['data']['qq'] = 'all' + qq = 'all' } else { - let 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 + name = content.replace('@', '') + } + } + message_data = { + type: OB11MessageDataType.at, + data: { + qq, + name } } } else if (element.textElement) { - message_data['type'] = 'text' + message_data['type'] = OB11MessageDataType.text let text = element.textElement.content if (!text.trim()) { continue @@ -143,7 +152,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.replayMsgSeq) try { const replyMsg = await dbUtil.getMsgBySeqId(element.replyElement.replayMsgSeq) @@ -159,7 +168,7 @@ export class OB11Constructor { } } else if (element.picElement) { - message_data['type'] = 'image' + message_data['type'] = OB11MessageDataType.image // message_data["data"]["file"] = element.picElement.sourcePath let fileName = element.picElement.fileName const sourcePath = element.picElement.sourcePath @@ -204,9 +213,9 @@ export class OB11Constructor { message_data['data']['file_size'] = videoOrFileElement.fileSize if (element.videoElement) { message_data['data']['url'] = await NTQQFileApi.getVideoUrl({ - chatType: msg.chatType, - peerUid: msg.peerUid, - }, msg.msgId, element.elementId, + chatType: msg.chatType, + peerUid: msg.peerUid, + }, msg.msgId, element.elementId, ) } dbUtil @@ -296,7 +305,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') { (resMsg.message as string) += cqCode diff --git a/src/onebot11/cqcode.ts b/src/onebot11/cqcode.ts index 6b61160..3e9bfc5 100644 --- a/src/onebot11/cqcode.ts +++ b/src/onebot11/cqcode.ts @@ -61,15 +61,15 @@ export function encodeCQCode(data: OB11MessageData) { let result = '[CQ:' + data.type for (const name in data.data) { const value = data.data[name] + if (value === undefined) { + continue + } try { - // Check if the value can be converted to a string - value.toString(); + result += `,${name}=${CQCodeEscape(value)}` } catch (error) { // If it can't be converted, skip this name-value pair - // console.warn(`Skipping problematic name-value pair. Name: ${name}, Value: ${value}`); - continue; + continue } - result += `,${name}=${CQCodeEscape(value)}` } result += ']' return result diff --git a/src/onebot11/types.ts b/src/onebot11/types.ts index de9c2ed..90a9f3c 100644 --- a/src/onebot11/types.ts +++ b/src/onebot11/types.ts @@ -195,6 +195,7 @@ export interface OB11MessageAt { type: OB11MessageDataType.at data: { qq: string | 'all' + name?: string } } @@ -241,6 +242,20 @@ export interface OB11MessageJson { data: { data: string /* , config: { token: string } */ } } +export interface OB11MessageMarkdown { + type: OB11MessageDataType.markdown + data: { + data: string + } +} + +export interface OB11MessageForward { + type: OB11MessageDataType.forward + data: { + id: string + } +} + export type OB11MessageData = | OB11MessageText | OB11MessageFace @@ -258,6 +273,8 @@ export type OB11MessageData = | OB11MessagePoke | OB11MessageDice | OB11MessageRPS + | OB11MessageMarkdown + | OB11MessageForward export interface OB11PostSendMsg { message_type?: 'private' | 'group' From 6e8389e833ded6e2d5c5a549981dbfc6aaf8b345 Mon Sep 17 00:00:00 2001 From: idranme <96647698+idranme@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:26:18 +0000 Subject: [PATCH 2/4] chore --- src/onebot11/constructor.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 544f657..59f2c93 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -117,7 +117,6 @@ export class OB11Constructor { let qq: string let name: string | undefined if (element.textElement.atType == AtType.atAll) { - // message_data["data"]["mention"] = "all" qq = 'all' } else { @@ -130,7 +129,6 @@ export class OB11Constructor { } } if (atQQ) { - // message_data["data"]["mention"] = atQQ qq = atQQ name = content.replace('@', '') } From 3f5ca8ebfab58d3585c4516a5156e1a73e73f073 Mon Sep 17 00:00:00 2001 From: idranme <96647698+idranme@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:31:37 +0000 Subject: [PATCH 3/4] chore --- src/onebot11/cqcode.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/onebot11/cqcode.ts b/src/onebot11/cqcode.ts index 3e9bfc5..1cfdd04 100644 --- a/src/onebot11/cqcode.ts +++ b/src/onebot11/cqcode.ts @@ -68,7 +68,6 @@ export function encodeCQCode(data: OB11MessageData) { result += `,${name}=${CQCodeEscape(value)}` } catch (error) { // If it can't be converted, skip this name-value pair - continue } } result += ']' From 406e3c7e6b0c1b8555727b4f2598156d89aee076 Mon Sep 17 00:00:00 2001 From: idranme <96647698+idranme@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:49:30 +0000 Subject: [PATCH 4/4] opt --- src/onebot11/cqcode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/onebot11/cqcode.ts b/src/onebot11/cqcode.ts index 1cfdd04..6ffcddb 100644 --- a/src/onebot11/cqcode.ts +++ b/src/onebot11/cqcode.ts @@ -50,7 +50,6 @@ export function encodeCQCode(data: OB11MessageData) { } const CQCodeEscape = (text: string) => { - text = text.toString() return text.replace(/\&/g, '&').replace(/\[/g, '[').replace(/\]/g, ']').replace(/,/g, ',') } @@ -65,7 +64,8 @@ export function encodeCQCode(data: OB11MessageData) { continue } try { - result += `,${name}=${CQCodeEscape(value)}` + const text = value.toString() + result += `,${name}=${CQCodeEscape(text)}` } catch (error) { // If it can't be converted, skip this name-value pair }