mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-19 05:05:44 +08:00
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import * as os from 'os';
|
||
import offset from '@/napcat-core/external/napi2native.json';
|
||
import { InstanceContext, NapCatCore } from '@/napcat-core/index';
|
||
import { PacketClientSession } from '@/napcat-core/packet/clientSession';
|
||
import { napCatVersion } from 'napcat-common/src/version';
|
||
import { LogWrapper } from '../helper/log';
|
||
|
||
interface OffsetType {
|
||
[key: string]: {
|
||
recv: string;
|
||
send: string;
|
||
};
|
||
}
|
||
|
||
const typedOffset: OffsetType = offset;
|
||
|
||
export class NTQQPacketApi {
|
||
context: InstanceContext;
|
||
core: NapCatCore;
|
||
logger: LogWrapper;
|
||
qqVersion: string | undefined;
|
||
pkt!: PacketClientSession;
|
||
errStack: string[] = [];
|
||
packetStatus: boolean = false;
|
||
|
||
constructor (context: InstanceContext, core: NapCatCore) {
|
||
this.context = context;
|
||
this.core = core;
|
||
this.logger = core.context.logger;
|
||
}
|
||
|
||
async initApi () {
|
||
this.packetStatus = (await this.InitSendPacket(this.context.basicInfoWrapper.getFullQQVersion())
|
||
.then((result) => {
|
||
return result;
|
||
})
|
||
.catch((err) => {
|
||
this.logger.logError(err);
|
||
this.errStack.push(err);
|
||
return false;
|
||
})) && this.pkt?.available;
|
||
}
|
||
|
||
get available (): boolean {
|
||
return this.pkt?.available ?? false;
|
||
}
|
||
|
||
get clientLogStack () {
|
||
return this.pkt?.clientLogStack + '\n' + this.errStack.join('\n');
|
||
}
|
||
|
||
async InitSendPacket (qqVer: string) {
|
||
this.qqVersion = qqVer;
|
||
const table = typedOffset[qqVer + '-' + os.arch()];
|
||
if (!table) {
|
||
const err = `[Core] [Packet] PacketBackend 不支持当前QQ版本架构:${qqVer}-${os.arch()},
|
||
请参照 https://github.com/NapNeko/NapCatQQ/releases/tag/${napCatVersion} 配置正确的QQ版本!`;
|
||
this.logger.logError(err);
|
||
this.errStack.push(err);
|
||
return false;
|
||
}
|
||
if (this.core.configLoader.configData.packetBackend === 'disable') {
|
||
const err = '[Core] [Packet] 已禁用PacketBackend,NapCat.Packet将不会加载!';
|
||
this.logger.logError(err);
|
||
this.errStack.push(err);
|
||
return false;
|
||
}
|
||
this.pkt = new PacketClientSession(this.core);
|
||
await this.pkt.init(process.pid, table.recv, table.send);
|
||
try {
|
||
await this.pkt.operation.FetchRkey(1500);
|
||
} catch (error) {
|
||
this.logger.logError('测试Packet状态异常', error);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|