mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
fix: rkey v2
This commit is contained in:
parent
871add3071
commit
c32db4a881
@ -365,22 +365,41 @@ export class NTQQFileApi {
|
|||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
const parsedUrl = new URL(IMAGE_HTTP_HOST + url);
|
const parsedUrl = new URL(IMAGE_HTTP_HOST + url);
|
||||||
|
const urlRkey = parsedUrl.searchParams.get('rkey');
|
||||||
const imageAppid = parsedUrl.searchParams.get('appid');
|
const imageAppid = parsedUrl.searchParams.get('appid');
|
||||||
const isNTV2 = imageAppid && ['1406', '1407'].includes(imageAppid);
|
const isNTV2 = imageAppid && ['1406', '1407'].includes(imageAppid);
|
||||||
if (isNTV2) {
|
const imageFileId = parsedUrl.searchParams.get('fileid');
|
||||||
let rkey = parsedUrl.searchParams.get('rkey');
|
|
||||||
if (rkey) {
|
let rkeyData = {
|
||||||
return IMAGE_HTTP_HOST_NT + url;
|
private_rkey: 'CAQSKAB6JWENi5LM_xp9vumLbuThJSaYf-yzMrbZsuq7Uz2qEc3Rbib9LP4',
|
||||||
}
|
group_rkey: 'CAQSKAB6JWENi5LM_xp9vumLbuThJSaYf-yzMrbZsuq7Uz2qffcqm614gds',
|
||||||
const rkeyData = await this.rkeyManager.getRkey();
|
online_rkey: false
|
||||||
rkey = imageAppid === '1406' ? rkeyData.private_rkey : rkeyData.group_rkey;
|
};
|
||||||
return IMAGE_HTTP_HOST_NT + url + `${rkey}`;
|
|
||||||
} else {
|
try {
|
||||||
return IMAGE_HTTP_HOST + url;
|
let tempRkeyData = await this.rkeyManager.getRkey();
|
||||||
|
rkeyData.group_rkey = tempRkeyData.group_rkey;
|
||||||
|
rkeyData.private_rkey = tempRkeyData.private_rkey;
|
||||||
|
rkeyData.online_rkey = tempRkeyData.expired_time > Date.now() / 1000;
|
||||||
|
} catch (e) {
|
||||||
|
this.context.logger.logError.bind(this.context.logger)('获取rkey失败 Fallback Old Mode', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isNTV2 && urlRkey) {
|
||||||
|
return IMAGE_HTTP_HOST_NT + urlRkey;
|
||||||
|
} else if (isNTV2 && rkeyData.online_rkey) {
|
||||||
|
let rkey = imageAppid === '1406' ? rkeyData.private_rkey : rkeyData.group_rkey;
|
||||||
|
return IMAGE_HTTP_HOST_NT + url + `&rkey=${rkey}`;
|
||||||
|
} else if (isNTV2 && imageFileId) {
|
||||||
|
let rkey = imageAppid === '1406' ? rkeyData.private_rkey : rkeyData.group_rkey;
|
||||||
|
return IMAGE_HTTP_HOST + `/download?appid=${imageAppid}&fileid=${imageFileId}&rkey=${rkey}`;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (fileMd5 || md5HexStr) {
|
} else if (fileMd5 || md5HexStr) {
|
||||||
return `${IMAGE_HTTP_HOST}/gchatpic_new/0/0-0-${(fileMd5 ?? md5HexStr)!.toUpperCase()}/0`;
|
return `${IMAGE_HTTP_HOST}/gchatpic_new/0/0-0-${(fileMd5 ?? md5HexStr)!.toUpperCase()}/0`;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.context.logger.logDebug('图片url获取失败', element);
|
this.context.logger.logDebug('图片url获取失败', element);
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,8 @@ export class RkeyManager {
|
|||||||
try {
|
try {
|
||||||
await this.refreshRkey();
|
await this.refreshRkey();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.logError.bind(this.logger)('获取rkey失败', e);
|
throw new Error(`获取rkey失败: ${e}`);//外抛
|
||||||
|
//this.logger.logError.bind(this.logger)('获取rkey失败', e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.rkeyData;
|
return this.rkeyData;
|
||||||
@ -42,9 +43,18 @@ export class RkeyManager {
|
|||||||
//刷新rkey
|
//刷新rkey
|
||||||
for (const url of this.serverUrl) {
|
for (const url of this.serverUrl) {
|
||||||
try {
|
try {
|
||||||
this.rkeyData = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET');
|
let temp = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET');
|
||||||
|
this.rkeyData = {
|
||||||
|
group_rkey: temp.group_rkey.slice(6),
|
||||||
|
private_rkey: temp.private_rkey.slice(6),
|
||||||
|
expired_time: temp.expired_time
|
||||||
|
};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.logError.bind(this.logger)(`[Rkey] Get Rkey ${url} Error `, e);
|
this.logger.logError.bind(this.logger)(`[Rkey] Get Rkey ${url} Error `, e);
|
||||||
|
//是否为最后一个url
|
||||||
|
if (url === this.serverUrl[this.serverUrl.length - 1]) {
|
||||||
|
throw new Error(`获取rkey失败: ${e}`);//外抛
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
src/core/proto/ImageFileId.ts
Normal file
21
src/core/proto/ImageFileId.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { MessageType, BinaryReader, ScalarType, BinaryWriter } from '@protobuf-ts/runtime';
|
||||||
|
|
||||||
|
export const FileId = new MessageType("FileId", [
|
||||||
|
{ no: 2, name: "sha1", kind: "scalar", T: ScalarType.BYTES },
|
||||||
|
{ no: 4, name: "appid", kind: "scalar", T: ScalarType.UINT32 },
|
||||||
|
]);
|
||||||
|
|
||||||
|
export function encodePBFileId(message: any) {
|
||||||
|
return FileId.internalBinaryWrite(message, new BinaryWriter(), {
|
||||||
|
writerFactory: () => new BinaryWriter(),
|
||||||
|
writeUnknownFields: false
|
||||||
|
}).finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function decodePBFileId(buffer: Uint8Array): any {
|
||||||
|
const reader = new BinaryReader(buffer);
|
||||||
|
return FileId.internalBinaryRead(reader, reader.len, {
|
||||||
|
readUnknownField: true,
|
||||||
|
readerFactory: () => new BinaryReader(buffer)
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user