mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
134 lines
5.8 KiB
TypeScript
134 lines
5.8 KiB
TypeScript
import {OB11MessageDataType, OB11GroupMemberRole, OB11Message, OB11MessageData} from "./types";
|
|
import {AtType, ChatType, RawMessage} from "../common/types";
|
|
import {getFriend, getGroupMember, getHistoryMsgBySeq, msgHistory, selfInfo} from "../common/data";
|
|
import {file2base64, getConfigUtil} from "../common/utils";
|
|
|
|
|
|
export class OB11Construct {
|
|
static async constructMessage(msg: RawMessage): Promise<OB11Message> {
|
|
const {debug, enableBase64} = getConfigUtil().getConfig()
|
|
const message_type = msg.chatType == ChatType.group ? "group" : "private";
|
|
const resMsg: OB11Message = {
|
|
self_id: selfInfo.user_id,
|
|
user_id: msg.senderUin,
|
|
time: parseInt(msg.msgTime) || 0,
|
|
message_id: msg.msgId,
|
|
real_id: msg.msgId,
|
|
message_type: msg.chatType == ChatType.group ? "group" : "private",
|
|
sender: {
|
|
user_id: msg.senderUin,
|
|
nickname: msg.sendNickName,
|
|
card: msg.sendMemberName || "",
|
|
},
|
|
raw_message: "",
|
|
font: 14,
|
|
sub_type: "friend",
|
|
message: [],
|
|
post_type: "message",
|
|
}
|
|
if (msg.chatType == ChatType.group) {
|
|
resMsg.group_id = msg.peerUin
|
|
const member = getGroupMember(msg.peerUin, msg.senderUin);
|
|
if (member) {
|
|
resMsg.sender.role = OB11Construct.constructGroupMemberRole(member.role);
|
|
}
|
|
} else if (msg.chatType == ChatType.friend) {
|
|
resMsg.sub_type = "friend"
|
|
const friend = getFriend(msg.senderUin);
|
|
if (friend) {
|
|
resMsg.sender.nickname = friend.nickName;
|
|
}
|
|
} else if (msg.chatType == ChatType.temp) {
|
|
resMsg.sub_type = "group"
|
|
}
|
|
|
|
|
|
if (debug) {
|
|
resMsg.raw = msg
|
|
}
|
|
|
|
for (let element of msg.elements) {
|
|
let message_data: any = {
|
|
data: {},
|
|
type: "unknown"
|
|
}
|
|
if (element.textElement && element.textElement?.atType !== AtType.notAt) {
|
|
message_data["type"] = OB11MessageDataType.at
|
|
if (element.textElement.atType == AtType.atAll) {
|
|
message_data["data"]["mention"] = "all"
|
|
message_data["data"]["qq"] = "all"
|
|
} else {
|
|
let uid = element.textElement.atNtUid
|
|
let atMember = getGroupMember(msg.peerUin, uid)
|
|
message_data["data"]["mention"] = atMember!.uin
|
|
message_data["data"]["qq"] = atMember!.uin
|
|
}
|
|
} else if (element.textElement) {
|
|
message_data["type"] = "text"
|
|
message_data["data"]["text"] = element.textElement.content
|
|
} else if (element.picElement) {
|
|
message_data["type"] = "image"
|
|
message_data["data"]["file_id"] = element.picElement.fileUuid
|
|
message_data["data"]["path"] = element.picElement.sourcePath
|
|
message_data["data"]["file"] = element.picElement.sourcePath
|
|
} else if (element.replyElement) {
|
|
message_data["type"] = "reply"
|
|
const replyMsg = getHistoryMsgBySeq(element.replyElement.replayMsgSeq)
|
|
if (replyMsg) {
|
|
message_data["data"]["id"] = replyMsg.msgId
|
|
}
|
|
else{
|
|
continue
|
|
}
|
|
} else if (element.pttElement) {
|
|
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)
|
|
// window.LLAPI.Ptt2Text(message.raw.msgId, message.peer, messages).then(text => {
|
|
// console.log("语音转文字结果", text);
|
|
// }).catch(err => {
|
|
// console.log("语音转文字失败", err);
|
|
// })
|
|
} else if (element.arkElement) {
|
|
message_data["type"] = OB11MessageDataType.json;
|
|
message_data["data"]["data"] = element.arkElement.bytesData;
|
|
}
|
|
if (message_data.data.file) {
|
|
let filePath: string = message_data.data.file;
|
|
message_data.data.file = "file://" + filePath
|
|
if (enableBase64) {
|
|
// filePath = filePath.replace("\\Ori\\", "\\Thumb\\")
|
|
let {err, data} = await file2base64(filePath);
|
|
if (err) {
|
|
console.log("文件转base64失败", err)
|
|
} else {
|
|
message_data.data.file = "base64://" + data
|
|
}
|
|
}
|
|
}
|
|
if (message_data.type !== "unknown" && message_data.data) {
|
|
resMsg.message.push(message_data);
|
|
}
|
|
}
|
|
// if (msgHistory.length > 10000) {
|
|
// msgHistory.splice(0, 100)
|
|
// }
|
|
// msgHistory.push(message)
|
|
// if (!reportSelfMessage && onebot_message_data["user_id"] == self_qq) {
|
|
// console.log("开启了不上传自己发送的消息,进行拦截 ", onebot_message_data);
|
|
// } else {
|
|
// console.log("发送上传消息给ipc main", onebot_message_data);
|
|
// window.llonebot.postData(onebot_message_data);
|
|
// }
|
|
return resMsg;
|
|
}
|
|
|
|
static constructGroupMemberRole(role: number): OB11GroupMemberRole {
|
|
return {
|
|
4: OB11GroupMemberRole.owner,
|
|
3: OB11GroupMemberRole.admin,
|
|
2: OB11GroupMemberRole.member
|
|
}[role]
|
|
}
|
|
} |