This commit is contained in:
手瓜一十雪 2024-10-13 17:05:19 +08:00
parent 1cdb93baa2
commit d79e91fc1e
3 changed files with 33 additions and 11 deletions

View File

@ -35,6 +35,7 @@ export class NTQQFileApi {
this.context = context;
this.core = core;
this.rkeyManager = new RkeyManager(['https://llob.linyuchen.net/rkey', 'http://napcat-sign.wumiao.wang:2082/rkey'], this.context.logger);
}
async copyFile(filePath: string, destPath: string) {
@ -375,14 +376,9 @@ export class NTQQFileApi {
group_rkey: 'CAQSKAB6JWENi5LM_xp9vumLbuThJSaYf-yzMrbZsuq7Uz2qffcqm614gds',
online_rkey: false
};
if (this.core.apis.PacketApi.PacketClient?.isConnected) {
let rkeylist = await this.core.apis.PacketApi.sendRkeyPacket();
if (rkeylist.length > 0) {
rkeyData.group_rkey = rkeylist[0].rkey;
rkeyData.private_rkey = rkeylist[1].rkey;
rkeyData.online_rkey = true;
}
}
if (!rkeyData.online_rkey) {
try {
let tempRkeyData = await this.rkeyManager.getRkey();

View File

@ -46,8 +46,19 @@ export class NTQQPacketApi {
await this.PacketClient.connect();
await this.PacketClient.init(process.pid, table.recv, table.send);
this.isInit = true;
this.InitOtherServer()
return this.isInit;
}
async InitOtherServer() {
this.core.apis.FileApi.rkeyManager.regOutputRkey(
async () => {
let rkeylist = await this.core.apis.PacketApi.sendRkeyPacket();
if (rkeylist.length > 0) {
return rkeylist;
}
return undefined;
});
}
randText(len: number) {
let text = '';
let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@ -74,8 +85,8 @@ export class NTQQPacketApi {
async sendRkeyPacket() {
let u8 = await this.core.apis.PacketApi.buildRkeyPacket()
let ret = await this.core.apis.PacketApi.sendPacket('OidbSvcTrpcTcp.0x9067_202', Buffer.from(u8).toString('hex'), true);
if(!ret?.hex_data) return []
let body = new NapProtoMsg(OidbSvcTrpcTcpBaseRsp).decode(Buffer.from(ret.hex_data,'hex')).body;
if (!ret?.hex_data) return []
let body = new NapProtoMsg(OidbSvcTrpcTcpBaseRsp).decode(Buffer.from(ret.hex_data, 'hex')).body;
//console.log('ret: ', Buffer.from(body).toString('hex'));
let retdata = new NapProtoMsg(OidbSvcTrpcTcp0X9067_202_Rsp_Body).decode(body)
//console.log('ret: ', JSON.stringify(retdata.data.rkeyList));

View File

@ -10,6 +10,7 @@ interface ServerRkeyData {
export class RkeyManager {
serverUrl: string[] = [];
logger: LogWrapper;
rkeyGetCb: any;
private rkeyData: ServerRkeyData = {
group_rkey: '',
private_rkey: '',
@ -38,9 +39,23 @@ export class RkeyManager {
// console.log(`now: ${now}, expired_time: ${this.rkeyData.expired_time}`);
return now > this.rkeyData.expired_time;
}
regOutputRkey(cb: any) {
this.rkeyGetCb = cb;
}
async refreshRkey(): Promise<any> {
//刷新rkey
try {
if (this.rkeyGetCb) {
let data = await this.rkeyGetCb();
this.rkeyData = {
group_rkey: data.group_rkey.slice(6),
private_rkey: data.private_rkey.slice(6),
expired_time: data.time
};
}
} catch (error) {
this.logger.logError.bind(this.logger)('Packet Server 获取rkey失败', error);
}
for (const url of this.serverUrl) {
try {
let temp = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET');