feat: post image http url

This commit is contained in:
linyuchen 2024-02-21 05:48:37 +08:00
parent 0f84e82d74
commit 03d4a68c33
7 changed files with 39 additions and 26 deletions

View File

@ -41,7 +41,7 @@ LiteLoaderQQNT的OneBot11协议插件
- [x] 图片
- [x] 引用消息
- [x] @群成员
- [x] 语音
- [x] 语音(支持mp3、wav等多种音频格式直接发送)
- [x] json消息(只上报)
- [x] 转发消息记录(目前只能发不能收)
- [ ] 红包

View File

@ -33,7 +33,7 @@ export class ConfigUtil {
ob11: ob11Default,
heartInterval: 60000,
token: "",
enableBase64: false,
enableLocalFile2Url: false,
debug: false,
log: false,
reportSelfMessage: false

View File

@ -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

View File

@ -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<RawMessage> }>(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());
}

View File

@ -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<OB11Message> {
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 => {
@ -109,20 +118,23 @@ export class OB11Constructor {
message_data["type"] = OB11MessageDataType.face;
message_data["data"]["id"] = element.faceElement.faceIndex.toString();
}
if (message_data.data.file) {
let filePath: string = message_data.data.file;
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 if (message_data.data.file) {
let filePath: string = message_data.data.file;
message_data.data.file = "file://" + filePath
if (enableBase64) {
} else {
let {err, data} = await file2base64(filePath);
if (err) {
console.log("文件转base64失败", err)
log("文件转base64失败", filePath, err)
} else {
message_data.data.file = "base64://" + data
}
}
}
}
if (message_data.type !== "unknown" && message_data.data) {
resMsg.message.push(message_data);
}

View File

@ -102,7 +102,8 @@ export interface OB11MessageText {
interface OB11MessageFileBase {
data: {
file: string
file: string,
http_file?: string;
}
}

View File

@ -108,10 +108,10 @@ async function onSettingWindowCreated(view: Element) {
<setting-panel>
<setting-item data-direction="row" class="hostItem vertical-list-item">
<div>
<div>base64编码</div>
<div class="tips"></div>
<div></div>
<div class="tips">http连接base64编码</div>
</div>
<setting-switch id="switchBase64" ${config.enableBase64 ? "is-active" : ""}></setting-switch>
<setting-switch id="switchFileUrl" ${config.enableLocalFile2Url ? "is-active" : ""}></setting-switch>
</setting-item>
<setting-item data-direction="row" class="hostItem vertical-list-item">
<div>
@ -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");