From 03d4a68c33341081a7c0d5da0a3a961a891f0733 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Wed, 21 Feb 2024 05:48:37 +0800 Subject: [PATCH] feat: post image http url --- README.md | 2 +- src/common/config.ts | 2 +- src/common/types.ts | 2 +- src/main/main.ts | 6 +++--- src/onebot11/constructor.ts | 42 ++++++++++++++++++++++++------------- src/onebot11/types.ts | 3 ++- src/renderer.ts | 8 +++---- 7 files changed, 39 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index cdee148..6e1bb6e 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ LiteLoaderQQNT的OneBot11协议插件 - [x] 图片 - [x] 引用消息 - [x] @群成员 -- [x] 语音 +- [x] 语音(支持mp3、wav等多种音频格式直接发送) - [x] json消息(只上报) - [x] 转发消息记录(目前只能发不能收) - [ ] 红包 diff --git a/src/common/config.ts b/src/common/config.ts index 9356999..366011c 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -33,7 +33,7 @@ export class ConfigUtil { ob11: ob11Default, heartInterval: 60000, token: "", - enableBase64: false, + enableLocalFile2Url: false, debug: false, log: false, reportSelfMessage: false diff --git a/src/common/types.ts b/src/common/types.ts index 1952099..0cc5a35 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -13,7 +13,7 @@ export interface Config { ob11: OB11Config token?: string heartInterval?: number // ms - enableBase64?: boolean + enableLocalFile2Url?: boolean // 开启后,本地文件路径图片会转成http链接, 语音会转成base64 debug?: boolean reportSelfMessage?: boolean log?: boolean diff --git a/src/main/main.ts b/src/main/main.ts index 1b955fd..be20be2 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -82,7 +82,7 @@ function onLoad() { }) - function postRawMsg(msgList: RawMessage[]) { + function postReceiveMsg(msgList: RawMessage[]) { const {debug, reportSelfMessage} = getConfigUtil().getConfig(); for (let message of msgList) { // log("收到新消息", message) @@ -107,7 +107,7 @@ function onLoad() { async function start() { registerReceiveHook<{ msgList: Array }>(ReceiveCmd.NEW_MSG, (payload) => { try { - postRawMsg(payload.msgList); + postReceiveMsg(payload.msgList); } catch (e) { log("report message error: ", e.toString()); } @@ -152,7 +152,7 @@ function onLoad() { } // log("reportSelfMessage", payload) try { - postRawMsg([payload.msgRecord]); + postReceiveMsg([payload.msgRecord]); } catch (e) { log("report self message error: ", e.toString()); } diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 70d90cb..9628427 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -1,4 +1,12 @@ -import {OB11Group, OB11GroupMember, OB11GroupMemberRole, OB11Message, OB11MessageDataType, OB11User} from "./types"; +import { + OB11Group, + OB11GroupMember, + OB11GroupMemberRole, + OB11Message, + OB11MessageData, + OB11MessageDataType, + OB11User +} from "./types"; import {AtType, ChatType, Group, GroupMember, IMAGE_HTTP_HOST, RawMessage, SelfInfo, User} from '../ntqqapi/types'; import {getFriend, getGroupMember, getHistoryMsgBySeq, selfInfo} from '../common/data'; import {file2base64, getConfigUtil, log} from "../common/utils"; @@ -8,7 +16,7 @@ import {NTQQApi} from "../ntqqapi/ntcall"; export class OB11Constructor { static async message(msg: RawMessage): Promise { - const {enableBase64} = getConfigUtil().getConfig() + const {enableLocalFile2Url} = getConfigUtil().getConfig() const message_type = msg.chatType == ChatType.group ? "group" : "private"; const resMsg: OB11Message = { self_id: parseInt(selfInfo.uin), @@ -47,7 +55,7 @@ export class OB11Constructor { } for (let element of msg.elements) { - let message_data: any = { + let message_data: OB11MessageData | any = { data: {}, type: "unknown" } @@ -78,11 +86,11 @@ export class OB11Constructor { message_data["data"]["file_id"] = element.picElement.fileUuid message_data["data"]["path"] = element.picElement.sourcePath message_data["data"]["file"] = element.picElement.sourcePath + message_data["data"]["http_file"] = IMAGE_HTTP_HOST + element.picElement.originImageUrl try { await NTQQApi.downloadMedia(msg.msgId, msg.chatType, msg.peerUid, element.elementId, element.picElement.thumbPath.get(0), element.picElement.sourcePath) } catch (e) { - message_data["data"]["http_file"] = IMAGE_HTTP_HOST + element.picElement.originImageUrl } } else if (element.replyElement) { message_data["type"] = "reply" @@ -96,7 +104,8 @@ export class OB11Constructor { message_data["type"] = OB11MessageDataType.voice; message_data["data"]["file"] = element.pttElement.filePath message_data["data"]["file_id"] = element.pttElement.fileUuid - // console.log("收到语音消息", message.raw.msgId, message.peer, element.pttElement) + + // log("收到语音消息", msg) // window.LLAPI.Ptt2Text(message.raw.msgId, message.peer, messages).then(text => { // console.log("语音转文字结果", text); // }).catch(err => { @@ -105,21 +114,24 @@ export class OB11Constructor { } else if (element.arkElement) { message_data["type"] = OB11MessageDataType.json; message_data["data"]["data"] = element.arkElement.bytesData; - } else if (element.faceElement){ + } else if (element.faceElement) { message_data["type"] = OB11MessageDataType.face; message_data["data"]["id"] = element.faceElement.faceIndex.toString(); } - if (message_data.data.http_file) { - message_data.data.file = message_data.data.http_file - } else if (message_data.data.file) { + if (message_data.data.file) { let filePath: string = message_data.data.file; - message_data.data.file = "file://" + filePath - if (enableBase64) { - let {err, data} = await file2base64(filePath); - if (err) { - console.log("文件转base64失败", err) + if (!enableLocalFile2Url) { + message_data.data.file = "file://" + filePath + } else { // 不使用本地路径 + if (message_data.data.http_file) { + message_data.data.file = message_data.data.http_file } else { - message_data.data.file = "base64://" + data + let {err, data} = await file2base64(filePath); + if (err) { + log("文件转base64失败", filePath, err) + } else { + message_data.data.file = "base64://" + data + } } } } diff --git a/src/onebot11/types.ts b/src/onebot11/types.ts index f20c6f8..4ed879b 100644 --- a/src/onebot11/types.ts +++ b/src/onebot11/types.ts @@ -102,7 +102,8 @@ export interface OB11MessageText { interface OB11MessageFileBase { data: { - file: string + file: string, + http_file?: string; } } diff --git a/src/renderer.ts b/src/renderer.ts index b1a01fa..4814403 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -108,10 +108,10 @@ async function onSettingWindowCreated(view: Element) {
-
上报文件进行base64编码
-
不开启时,上报文件将以本地路径形式发送
+
上报文件不采用本地路径
+
开启后,上报图片为http连接,语音为base64编码
- +
@@ -208,7 +208,7 @@ async function onSettingWindowCreated(view: Element) { switchClick("websocket", "enableWs", config.ob11); switchClick("websocketReverse", "enableWsReverse", config.ob11); switchClick("debug", "debug"); - switchClick("switchBase64", "enableBase64"); + switchClick("switchFileUrl", "enableLocalFile2Url"); switchClick("reportSelfMessage", "reportSelfMessage"); switchClick("log", "log");