feat: adjust FileNapCatOneBotUUID to support encode fileUUID

This commit is contained in:
pk5ls20
2024-10-19 01:39:14 +08:00
parent 0f337a8d8c
commit 34e797270f
3 changed files with 21 additions and 17 deletions

View File

@@ -25,8 +25,8 @@ export async function solveAsyncProblem<T extends (...args: any[]) => Promise<an
} }
export class FileNapCatOneBotUUID { export class FileNapCatOneBotUUID {
static encodeModelId(peer: Peer, modelId: string, fileId: string, endString: string = ""): string { static encodeModelId(peer: Peer, modelId: string, fileId: string, fileUUID: string = "", endString: string = ""): string {
const data = `NapCatOneBot|ModelIdFile|${peer.chatType}|${peer.peerUid}|${modelId}|${fileId}`; const data = `NapCatOneBot|ModelIdFile|${peer.chatType}|${peer.peerUid}|${modelId}|${fileId}|${fileUUID}`;
//前四个字节塞data长度 //前四个字节塞data长度
const length = Buffer.alloc(4 + data.length); const length = Buffer.alloc(4 + data.length);
length.writeUInt32BE(data.length * 2, 0);//储存data的hex长度 length.writeUInt32BE(data.length * 2, 0);//储存data的hex长度
@@ -37,7 +37,8 @@ export class FileNapCatOneBotUUID {
static decodeModelId(uuid: string): undefined | { static decodeModelId(uuid: string): undefined | {
peer: Peer, peer: Peer,
modelId: string, modelId: string,
fileId: string fileId: string,
fileUUID?: string
} { } {
//前四个字节是data长度 //前四个字节是data长度
const length = Buffer.from(uuid.slice(0, 8), 'hex').readUInt32BE(0); const length = Buffer.from(uuid.slice(0, 8), 'hex').readUInt32BE(0);
@@ -47,20 +48,21 @@ export class FileNapCatOneBotUUID {
const realData = Buffer.from(dataId, 'hex').toString(); const realData = Buffer.from(dataId, 'hex').toString();
if (!realData.startsWith('NapCatOneBot|ModelIdFile|')) return undefined; if (!realData.startsWith('NapCatOneBot|ModelIdFile|')) return undefined;
const data = realData.split('|'); const data = realData.split('|');
if (data.length !== 6) return undefined; if (data.length < 6) return undefined; // compatibility requirement
const [, , chatType, peerUid, modelId, fileId] = data; const [, , chatType, peerUid, modelId, fileId, fileUUID = undefined] = data;
return { return {
peer: { peer: {
chatType: chatType as any, chatType: chatType as any,
peerUid: peerUid, peerUid: peerUid,
}, },
modelId, modelId,
fileId fileId,
fileUUID
}; };
} }
static encode(peer: Peer, msgId: string, elementId: string, endString: string = ""): string { static encode(peer: Peer, msgId: string, elementId: string, fileUUID: string = "", endString: string = ""): string {
const data = `NapCatOneBot|MsgFile|${peer.chatType}|${peer.peerUid}|${msgId}|${elementId}`; const data = `NapCatOneBot|MsgFile|${peer.chatType}|${peer.peerUid}|${msgId}|${elementId}|${fileUUID}`;
//前四个字节塞data长度 //前四个字节塞data长度
//一个字节8位 一个ascii字符1字节 一个hex字符4位 表示一个ascii字符需要两个hex字符 //一个字节8位 一个ascii字符1字节 一个hex字符4位 表示一个ascii字符需要两个hex字符
const length = Buffer.alloc(4 + data.length); const length = Buffer.alloc(4 + data.length);
@@ -72,7 +74,8 @@ export class FileNapCatOneBotUUID {
static decode(uuid: string): undefined | { static decode(uuid: string): undefined | {
peer: Peer, peer: Peer,
msgId: string, msgId: string,
elementId: string elementId: string,
fileUUID?: string
} { } {
//前四个字节是data长度 //前四个字节是data长度
const length = Buffer.from(uuid.slice(0, 8), 'hex').readUInt32BE(0); const length = Buffer.from(uuid.slice(0, 8), 'hex').readUInt32BE(0);
@@ -82,8 +85,8 @@ export class FileNapCatOneBotUUID {
const realData = Buffer.from(dataId, 'hex').toString(); const realData = Buffer.from(dataId, 'hex').toString();
if (!realData.startsWith('NapCatOneBot|MsgFile|')) return undefined; if (!realData.startsWith('NapCatOneBot|MsgFile|')) return undefined;
const data = realData.split('|'); const data = realData.split('|');
if (data.length !== 6) return undefined; if (data.length < 6) return undefined; // compatibility requirement
const [, , chatType, peerUid, msgId, elementId] = data; const [, , chatType, peerUid, msgId, elementId, fileUUID = undefined] = data;
return { return {
peer: { peer: {
chatType: chatType as any, chatType: chatType as any,
@@ -91,6 +94,7 @@ export class FileNapCatOneBotUUID {
}, },
msgId, msgId,
elementId, elementId,
fileUUID
}; };
} }
} }

View File

@@ -79,7 +79,7 @@ export class OneBotGroupApi {
id: FileNapCatOneBotUUID.encode({ id: FileNapCatOneBotUUID.encode({
chatType: ChatType.KCHATTYPEGROUP, chatType: ChatType.KCHATTYPEGROUP,
peerUid: msg.peerUid, peerUid: msg.peerUid,
}, msg.msgId, element.elementId, "." + element.fileElement.fileName), }, msg.msgId, element.elementId, element.fileElement.fileUuid, "." + element.fileElement.fileName),
url: pathToFileURL(element.fileElement.filePath).href, url: pathToFileURL(element.fileElement.filePath).href,
name: element.fileElement.fileName, name: element.fileElement.fileName,
size: parseInt(element.fileElement.fileSize), size: parseInt(element.fileElement.fileSize),

View File

@@ -108,7 +108,7 @@ export class OneBotMsgApi {
peerUid: msg.peerUid, peerUid: msg.peerUid,
guildId: '', guildId: '',
}; };
const encodedFileId = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "." + element.fileName); const encodedFileId = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, element.fileUuid, "." + element.fileName);
return { return {
type: OB11MessageDataType.image, type: OB11MessageDataType.image,
data: { data: {
@@ -140,7 +140,7 @@ export class OneBotMsgApi {
file: element.fileName, file: element.fileName,
path: element.filePath, path: element.filePath,
url: pathToFileURL(element.filePath).href, url: pathToFileURL(element.filePath).href,
file_id: FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "." + element.fileName), file_id: FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, element.fileUuid,"." + element.fileName),
file_size: element.fileSize, file_size: element.fileSize,
file_unique: element.fileName, file_unique: element.fileName,
}, },
@@ -187,7 +187,7 @@ export class OneBotMsgApi {
data: { data: {
summary: _.faceName, // 商城表情名称 summary: _.faceName, // 商城表情名称
file: 'marketface', file: 'marketface',
file_id: FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "." + _.key + ".jpg"), file_id: FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "", "." + _.key + ".jpg"),
path: url, path: url,
url: url, url: url,
file_unique: _.key file_unique: _.key
@@ -275,7 +275,7 @@ export class OneBotMsgApi {
if (!videoDownUrl) { if (!videoDownUrl) {
videoDownUrl = element.filePath; videoDownUrl = element.filePath;
} }
const fileCode = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "." + element.fileName); const fileCode = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "", "." + element.fileName);
return { return {
type: OB11MessageDataType.video, type: OB11MessageDataType.video,
data: { data: {
@@ -295,7 +295,7 @@ export class OneBotMsgApi {
peerUid: msg.peerUid, peerUid: msg.peerUid,
guildId: '', guildId: '',
}; };
const fileCode = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "." + element.fileName); const fileCode = FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "", "." + element.fileName);
return { return {
type: OB11MessageDataType.voice, type: OB11MessageDataType.voice,
data: { data: {