NapCatQQ/src/core/core.ts
2024-08-08 21:23:14 +08:00

48 lines
1.7 KiB
TypeScript

import { WrapperNodeApi } from "./wrapper/wrapper";
import path from "node:path";
import fs from "node:fs";
import { InstanceContext } from "./wrapper";
import { NTEventChannel } from "@/common/framework/event";
import { proxiedListenerOf } from "@/common/utils/proxy-handler";
import { MsgListener } from "./listeners";
import { sleep } from "@/common/utils/helper";
export enum NapCatCoreWorkingEnv {
Unknown = 0,
Shell = 1,
LiteLoader = 2,
}
export function loadQQWrapper(QQVersion: string): WrapperNodeApi {
let wrapperNodePath = path.resolve(path.dirname(process.execPath), './resources/app/wrapper.node');
if (!fs.existsSync(wrapperNodePath)) {
wrapperNodePath = path.join(path.dirname(process.execPath), `resources/app/versions/${QQVersion}/wrapper.node`);
}
const nativemodule: any = { exports: {} };
process.dlopen(nativemodule, wrapperNodePath);
return nativemodule.exports;
}
export class NapCatCore {
readonly context: InstanceContext;
readonly eventChannel: NTEventChannel;
constructor(context: InstanceContext) {
this.context = context;
this.eventChannel = new NTEventChannel(context.wrapper, context.session);
this.initNapCatCoreListeners().then().catch(console.error);
}
// Renamed from 'InitDataListener'
async initNapCatCoreListeners() {
let msg = new MsgListener();
msg.onRecvMsg = (msg) => {
console.log("RecvMsg", msg);
}
await sleep(2500);
this.context.session.getMsgService().addKernelMsgListener(
new this.context.wrapper.NodeIKernelMsgListener(proxiedListenerOf(msg, this.context.logger))
);
}
}