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.context = context;
this.core = core; this.core = core;
this.rkeyManager = new RkeyManager(['https://llob.linyuchen.net/rkey', 'http://napcat-sign.wumiao.wang:2082/rkey'], this.context.logger); 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) { async copyFile(filePath: string, destPath: string) {
@ -375,14 +376,9 @@ export class NTQQFileApi {
group_rkey: 'CAQSKAB6JWENi5LM_xp9vumLbuThJSaYf-yzMrbZsuq7Uz2qffcqm614gds', group_rkey: 'CAQSKAB6JWENi5LM_xp9vumLbuThJSaYf-yzMrbZsuq7Uz2qffcqm614gds',
online_rkey: false 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) { if (!rkeyData.online_rkey) {
try { try {
let tempRkeyData = await this.rkeyManager.getRkey(); let tempRkeyData = await this.rkeyManager.getRkey();

View File

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

View File

@ -10,6 +10,7 @@ interface ServerRkeyData {
export class RkeyManager { export class RkeyManager {
serverUrl: string[] = []; serverUrl: string[] = [];
logger: LogWrapper; logger: LogWrapper;
rkeyGetCb: any;
private rkeyData: ServerRkeyData = { private rkeyData: ServerRkeyData = {
group_rkey: '', group_rkey: '',
private_rkey: '', private_rkey: '',
@ -38,9 +39,23 @@ export class RkeyManager {
// console.log(`now: ${now}, expired_time: ${this.rkeyData.expired_time}`); // console.log(`now: ${now}, expired_time: ${this.rkeyData.expired_time}`);
return now > this.rkeyData.expired_time; return now > this.rkeyData.expired_time;
} }
regOutputRkey(cb: any) {
this.rkeyGetCb = cb;
}
async refreshRkey(): Promise<any> { async refreshRkey(): Promise<any> {
//刷新rkey //刷新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) { for (const url of this.serverUrl) {
try { try {
let temp = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET'); let temp = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET');