mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix: new server
This commit is contained in:
@@ -2,6 +2,7 @@ import { InstanceContext, NapCatCore } from '..';
|
||||
import { RequestUtil } from '@/common/request';
|
||||
import offset from '@/core/external/offset.json';
|
||||
import * as crypto from 'crypto';
|
||||
import { PacketClient } from '../helper/packet';
|
||||
|
||||
interface OffsetType {
|
||||
[key: string]: {
|
||||
@@ -17,30 +18,26 @@ export class NTQQPacketApi {
|
||||
serverUrl: string | undefined;
|
||||
qqversion: string | undefined;
|
||||
isInit: boolean = false;
|
||||
PacketClient: PacketClient | undefined;
|
||||
constructor(context: InstanceContext, core: NapCatCore) {
|
||||
this.context = context;
|
||||
this.core = core;
|
||||
this.InitSendPacket('127.0.0.1:8086', '9.9.15-28418', '1001').then().catch();
|
||||
this.InitSendPacket('127.0.0.1:8086', '9.9.15-28418', '1001').then().catch(this.core.context.logger.logError.bind(this.core.context.logger));
|
||||
}
|
||||
async InitSendPacket(serverUrl: string, qqversion: string, uin: string) {
|
||||
this.serverUrl = serverUrl;
|
||||
this.qqversion = qqversion;
|
||||
let offsetTable: OffsetType = offset;
|
||||
if (!offsetTable[qqversion]) return false;
|
||||
let url = 'http://' + this.serverUrl + '/init';
|
||||
let postdata = { recv: offsetTable[qqversion].recv, send: offsetTable[qqversion].send, qqver: qqversion, uin: uin, pid: process.pid };
|
||||
try {
|
||||
let ret = await RequestUtil.HttpGetJson<any>(url, 'POST', postdata, { 'Content-Type': 'application/json' }, true, true);
|
||||
if (ret.status !== 'ok') throw new Error('InitSendPacket failed' + JSON.stringify(ret, null, 2));
|
||||
} catch (error) {
|
||||
let logger = this.core.context.logger;
|
||||
logger.logError.bind(logger)('InitSendPacket', error);
|
||||
return false;
|
||||
}
|
||||
let url = 'ws://' + this.serverUrl + '/ws';
|
||||
// let postdata = { recv: offsetTable[qqversion].recv, send: offsetTable[qqversion].send, qqver: qqversion, uin: uin, pid: process.pid };
|
||||
this.PacketClient = new PacketClient(url, this.core.context.logger);
|
||||
await this.PacketClient.connect();
|
||||
await this.PacketClient.init(process.pid, offsetTable[qqversion].recv, offsetTable[qqversion].send);
|
||||
this.isInit = true;
|
||||
return this.isInit;
|
||||
}
|
||||
async randText(len: number) {
|
||||
randText(len: number) {
|
||||
let text = '';
|
||||
let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
for (let i = 0; i < len; i++) {
|
||||
@@ -48,25 +45,13 @@ export class NTQQPacketApi {
|
||||
}
|
||||
return text;
|
||||
}
|
||||
async sendPacket(cmd: string, data: string, rep = false) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
//获取data的HASH
|
||||
async sendPacket(cmd: string, data: string, rsp = false) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let md5 = crypto.createHash('md5').update(data).digest('hex');
|
||||
let url = 'http://' + this.serverUrl + '/send';
|
||||
let geturl = 'http://' + this.serverUrl + '/get';
|
||||
let trace_id = (await this.randText(4) + md5 + data).slice(0, data.length / 2);
|
||||
let postdata = { data: data, trace_id: trace_id, cmd: cmd };
|
||||
|
||||
RequestUtil.HttpGetJson<any>(url, 'POST', postdata, { 'Content-Type': 'application/json' }, true, true).then((res) => {
|
||||
if (!rep) {
|
||||
this.core.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id).then(e => resolve(res)).catch(e => reject(e))
|
||||
} else {
|
||||
let getpostdata = { data: data, trace_id: trace_id, cmd: cmd };
|
||||
RequestUtil.HttpGetJson<any>(geturl, 'POST', getpostdata, { 'Content-Type': 'application/json' }, true, true).then((rsp) => {
|
||||
resolve(rsp)
|
||||
}).catch((e) => reject(e));
|
||||
}
|
||||
}).catch((e) => reject(e));
|
||||
let trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
|
||||
this.PacketClient?.sendCommand(cmd, data, trace_id, rsp, 5000, async () => {
|
||||
await this.core.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
|
||||
}).then((res) => resolve(res)).catch((e) => reject(e));
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user