mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
feat: adjust FileNapCatOneBotUUID
to support encode fileUUID
This commit is contained in:
@@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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),
|
||||||
|
@@ -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: {
|
||||||
|
Reference in New Issue
Block a user