From 5cc3719125a651e0dcbc212e14226607eec36b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Tue, 22 Oct 2024 12:42:24 +0800 Subject: [PATCH] fix: rkey --- src/core/apis/file.ts | 8 +++++--- src/core/packet/proto/oidb/Oidb.0x9067_202.ts | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/apis/file.ts b/src/core/apis/file.ts index 3ce58117..64a325bd 100644 --- a/src/core/apis/file.ts +++ b/src/core/apis/file.ts @@ -30,7 +30,7 @@ export class NTQQFileApi { context: InstanceContext; core: NapCatCore; rkeyManager: RkeyManager; - packetRkey: Array<{ rkey: string; time: number; type: number; }> | undefined; + packetRkey: Array<{ rkey: string; time: number; type: number; ttl: bigint }> | undefined; constructor(context: InstanceContext, core: NapCatCore) { this.context = context; @@ -378,10 +378,12 @@ export class NTQQFileApi { }; try { if (this.core.apis.PacketApi.available) { - if ((!this.packetRkey || this.packetRkey[0].time > Date.now() / 1000)) { + let rkey_expired_private = !this.packetRkey || this.packetRkey[0].time + Number(this.packetRkey[0].ttl) < Date.now() / 1000; + let rkey_expired_group = !this.packetRkey || this.packetRkey[0].time + Number(this.packetRkey[0].ttl) < Date.now() / 1000; + if (rkey_expired_private || rkey_expired_group) { this.packetRkey = await this.core.apis.PacketApi.sendRkeyPacket(); } - if (this.packetRkey.length > 0) { + if (this.packetRkey && this.packetRkey.length > 0) { rkeyData.group_rkey = this.packetRkey[1].rkey.slice(6); rkeyData.private_rkey = this.packetRkey[0].rkey.slice(6); rkeyData.online_rkey = true; diff --git a/src/core/packet/proto/oidb/Oidb.0x9067_202.ts b/src/core/packet/proto/oidb/Oidb.0x9067_202.ts index ca52561a..2ee31688 100644 --- a/src/core/packet/proto/oidb/Oidb.0x9067_202.ts +++ b/src/core/packet/proto/oidb/Oidb.0x9067_202.ts @@ -14,6 +14,7 @@ export const OidbSvcTrpcTcp0X9067_202Key = { //Rsp export const OidbSvcTrpcTcp0X9067_202_RkeyList = { rkey: ProtoField(1, ScalarType.STRING), + ttl: ProtoField(2, ScalarType.UINT64), time: ProtoField(4, ScalarType.UINT32), type: ProtoField(5, ScalarType.UINT32),