From 2eb0ad589aba6e4f995e7e60a3066abaaa1c4be9 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Fri, 23 Feb 2024 19:57:20 +0800 Subject: [PATCH 1/4] chore: ver 3.7.0 --- manifest.json | 2 +- src/common/data.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 9b5d439..147aa38 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "LLOneBot", "slug": "LLOneBot", "description": "LiteLoaderQQNT的OneBotApi", - "version": "3.6.0", + "version": "3.7.0", "thumbnail": "./icon.png", "authors": [ { diff --git a/src/common/data.ts b/src/common/data.ts index 7c5e35d..b30ec1b 100644 --- a/src/common/data.ts +++ b/src/common/data.ts @@ -86,6 +86,6 @@ export function getUidByUin(uin: string) { } } -export const version = "3.6.0" +export const version = "3.7.0" export let groupNotifies: Map = new Map(); \ No newline at end of file From 66de0076d428c7d9c2e32fb122cefb95459fc87c Mon Sep 17 00:00:00 2001 From: Misa Liu Date: Fri, 23 Feb 2024 21:48:36 +0800 Subject: [PATCH 2/4] feat: Add `message_format` to message event --- src/onebot11/constructor.ts | 1 + src/onebot11/types.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index c5c77e4..5b74381 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -45,6 +45,7 @@ export class OB11Constructor { font: 14, sub_type: "friend", message: [], + message_format: 'array', post_type: selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE, } if (msg.chatType == ChatType.group) { diff --git a/src/onebot11/types.ts b/src/onebot11/types.ts index 1919dac..6aacea2 100644 --- a/src/onebot11/types.ts +++ b/src/onebot11/types.ts @@ -65,7 +65,8 @@ export interface OB11Message { message_type: "private" | "group", sub_type?: "friend" | "group" | "normal", sender: OB11Sender, - message: OB11MessageData[], + message: OB11MessageData[] | string, + message_format: 'array' | 'string', raw_message: string, font: number, post_type?: EventType, From ffdec86209d30a427091344072e4443ec9f054ad Mon Sep 17 00:00:00 2001 From: Misa Liu Date: Sat, 24 Feb 2024 00:40:45 +0800 Subject: [PATCH 3/4] feat: Add setting section of `messagePostFormat` --- src/common/config.ts | 1 + src/common/types.ts | 1 + src/global.d.ts | 7 +++++++ src/renderer.ts | 16 ++++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/src/common/config.ts b/src/common/config.ts index 8829fa7..de9e0cb 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -35,6 +35,7 @@ export class ConfigUtil { ob11: ob11Default, heartInterval: 60000, token: "", + messagePostFormat: "array", enableLocalFile2Url: false, debug: false, log: false, diff --git a/src/common/types.ts b/src/common/types.ts index 0cc5a35..11aa8b1 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -13,6 +13,7 @@ export interface Config { ob11: OB11Config token?: string heartInterval?: number // ms + messagePostFormat?: 'array' | 'string' enableLocalFile2Url?: boolean // 开启后,本地文件路径图片会转成http链接, 语音会转成base64 debug?: boolean reportSelfMessage?: boolean diff --git a/src/global.d.ts b/src/global.d.ts index 000cd50..02e92a8 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -7,4 +7,11 @@ declare global { llonebot: typeof llonebot; LiteLoader: any; } + + interface Event { + detail?: { + name: string; + value: string; + } + } } \ No newline at end of file diff --git a/src/renderer.ts b/src/renderer.ts index 36e9f0a..38e1e01 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -4,6 +4,7 @@ // 打开设置界面时触发 async function onSettingWindowCreated(view: Element) { window.llonebot.log("setting window created"); + const isEmpty = (value: any) => value === undefined || value === null || value === ''; let config = await window.llonebot.getConfig() const httpClass = "http"; const httpPostClass = "http-post"; @@ -106,6 +107,16 @@ async function onSettingWindowCreated(view: Element) { + +
+ 消息上报数据类型 + 如客户端无特殊需求推荐保持默认设置,两者的详细差异可参考 OneBot v11 文档 +
+ + Array + String + +
上报文件不采用本地路径
@@ -174,6 +185,11 @@ async function onSettingWindowCreated(view: Element) { doc.getElementById("addHttpHost").addEventListener("click", () => addHostEle("http")) doc.getElementById("addWsHost").addEventListener("click", () => addHostEle("ws")) + doc.getElementById("messagePostFormat").addEventListener("selected", (e) => { + const _config = config || {}; + _config.messagePostFormat = e.detail && !isEmpty(e.detail.value) ? e.detail.value : 'array'; + window.llonebot.setConfig(_config); + }) function switchClick(eleId: string, configKey: string, _config=null) { if (!_config){ From f9ec7eddf21a90f0ca469b919bb14ea334fe4ee0 Mon Sep 17 00:00:00 2001 From: Misa Liu Date: Sat, 24 Feb 2024 01:06:41 +0800 Subject: [PATCH 4/4] feat: Support CQCode message format --- src/onebot11/constructor.ts | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 5b74381..02a6a34 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -27,7 +27,7 @@ import {EventType} from "./event/OB11BaseEvent"; export class OB11Constructor { static async message(msg: RawMessage): Promise { - const {enableLocalFile2Url} = getConfigUtil().getConfig() + const {enableLocalFile2Url, messagePostFormat} = getConfigUtil().getConfig() const message_type = msg.chatType == ChatType.group ? "group" : "private"; const resMsg: OB11Message = { self_id: parseInt(selfInfo.uin), @@ -44,8 +44,8 @@ export class OB11Constructor { raw_message: "", font: 14, sub_type: "friend", - message: [], - message_format: 'array', + message: messagePostFormat === 'string' ? '' : [], + message_format: messagePostFormat === 'string' ? 'string' : 'array', post_type: selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE, } if (msg.chatType == ChatType.group) { @@ -154,8 +154,10 @@ export class OB11Constructor { } } } + if (message_data.type !== "unknown" && message_data.data) { - resMsg.message.push(message_data); + if (messagePostFormat === 'string') (resMsg.message as string) += CQCodeBuilder(message_data); + else (resMsg.message as OB11MessageData[]).push(message_data); } } resMsg.raw_message = resMsg.raw_message.trim(); @@ -217,4 +219,25 @@ export class OB11Constructor { static groups(groups: Group[]): OB11Group[] { return groups.map(OB11Constructor.group) } -} \ No newline at end of file +} + +function CQCodeBuilder(data: OB11MessageData) { + const CQCodeEscape = (text: string) => { + return text.replace(/\[/g, '[') + .replace(/\]/g, ']') + .replace(/\&/g, '&') + .replace(/,/g, ','); + }; + + if (data.type === 'text') { + return CQCodeEscape(data.data.text); + } + + let result = '[CQ:' + data.type; + for (const name in data.data) { + const value = data.data[name]; + result += `,${name}=${CQCodeEscape(value)}`; + } + result += ']'; + return result; +}