diff --git a/.vscode/settings.json b/.vscode/settings.json index ca143742..48eac328 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,5 +6,7 @@ "tsconfig.json": "tsconfig.*.json, env.d.ts, vite.config.ts", "package.json": "package-lock.json, eslint*, .prettier*, .editorconfig, manifest.json, logo.png, .gitignore, LICENSE" }, - "css.customData": [".vscode/tailwindcss.json"], + "css.customData": [ + ".vscode/tailwindcss.json" + ], } \ No newline at end of file diff --git a/manifest.json b/manifest.json index e49fc469..6ac5becc 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "4.7.6", + "version": "4.7.8", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 4502f0b1..1f65c42b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "4.7.6", + "version": "4.7.8", "scripts": { "build:universal": "npm run build:webui && vite build --mode universal || exit 1", "build:framework": "npm run build:webui && vite build --mode framework || exit 1", diff --git a/src/common/version.ts b/src/common/version.ts index a35d069b..4a8b1eff 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '4.7.6'; +export const napCatVersion = '4.7.8'; diff --git a/src/common/worker.ts b/src/common/worker.ts index f14ea3bb..55e55cd8 100644 --- a/src/common/worker.ts +++ b/src/common/worker.ts @@ -5,6 +5,9 @@ export async function runTask(workerScript: string, taskData: T): Promise< try { return await new Promise((resolve, reject) => { worker.on('message', (result: R) => { + if ((result as any)?.error) { + reject(new Error((result as { error: string }).error)); + } resolve(result); }); diff --git a/src/core/packet/client/nativeClient.ts b/src/core/packet/client/nativeClient.ts index 0804751c..527c61ab 100644 --- a/src/core/packet/client/nativeClient.ts +++ b/src/core/packet/client/nativeClient.ts @@ -39,12 +39,12 @@ export class NativePacketClient extends IPacketClient { return true; } - async init(pid: number, recv: string, send: string): Promise { + async init(_pid: number, recv: string, send: string): Promise { const platform = process.platform + '.' + process.arch; const moehoo_path = path.join(dirname(fileURLToPath(import.meta.url)), './moehoo/MoeHoo.' + platform + '.node'); process.dlopen(this.MoeHooExport, moehoo_path, constants.dlopen.RTLD_LAZY); - - this.MoeHooExport.exports.InitHook?.(send, recv, (type: number, uin: string, cmd: string, seq: number, hex_data: string) => { + + this.MoeHooExport.exports.InitHook?.(send, recv, (type: number, _uin: string, cmd: string, seq: number, hex_data: string) => { const trace_id = createHash('md5').update(Buffer.from(hex_data, 'hex')).digest('hex'); if (type === 0 && this.cb.get(trace_id + 'recv')) { //此时为send 提取seq diff --git a/src/core/packet/client/wsClient.ts b/src/core/packet/client/wsClient.ts deleted file mode 100644 index dc4d9929..00000000 --- a/src/core/packet/client/wsClient.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Data, WebSocket, ErrorEvent } from 'ws'; -import { IPacketClient, RecvPacket } from '@/core/packet/client/baseClient'; -import { LogStack } from '@/core/packet/context/clientContext'; -import { NapCoreContext } from '@/core/packet/context/napCoreContext'; -import { PacketLogger } from '@/core/packet/context/loggerContext'; - -export class WsPacketClient extends IPacketClient { - private websocket: WebSocket | null = null; - private reconnectAttempts: number = 0; - private readonly maxReconnectAttempts: number = 60; // 现在暂时不可配置 - private readonly clientUrl: string; - private readonly clientUrlWrap: (url: string) => string = (url: string) => `ws://${url}/ws`; - - private isInitialized: boolean = false; - private initPayload: { pid: number, recv: string, send: string } | null = null; - - constructor(napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack) { - super(napCore, logger, logStack); - this.clientUrl = this.napcore.config.packetServer - ? this.clientUrlWrap(this.napcore.config.packetServer) - : this.clientUrlWrap('127.0.0.1:8083'); - } - - check(): boolean { - if (!this.napcore.config.packetServer) { - this.logStack.pushLogWarn('wsPacketClient 未配置服务器地址'); - return false; - } - return true; - } - - async init(pid: number, recv: string, send: string): Promise { - this.initPayload = { pid, recv, send }; - await this.connectWithRetry(); - } - - sendCommandImpl(cmd: string, data: string, trace_id: string): void { - if (this.websocket && this.websocket.readyState === WebSocket.OPEN) { - this.websocket.send(JSON.stringify({ - action: 'send', - cmd, - data, - trace_id - })); - } else { - this.logStack.pushLogWarn(`WebSocket 未连接,无法发送命令: ${cmd}`); - } - } - - private async connectWithRetry(): Promise { - while (this.reconnectAttempts < this.maxReconnectAttempts) { - try { - await this.connect(); - return; - } catch { - this.reconnectAttempts++; - this.logStack.pushLogWarn(`第 ${this.reconnectAttempts}/${this.maxReconnectAttempts} 次尝试重连失败!`); - await this.delay(5000); - } - } - this.logStack.pushLogError(`wsPacketClient 在 ${this.clientUrl} 达到最大重连次数 (${this.maxReconnectAttempts})!`); - throw new Error(`无法连接到 WebSocket 服务器:${this.clientUrl}`); - } - - private connect(): Promise { - return new Promise((resolve, reject) => { - this.websocket = new WebSocket(this.clientUrl); - this.websocket.onopen = () => { - this.available = true; - this.reconnectAttempts = 0; - this.logger.info(`wsPacketClient 已连接到 ${this.clientUrl}`); - if (!this.isInitialized && this.initPayload) { - this.websocket!.send(JSON.stringify({ - action: 'init', - ...this.initPayload - })); - this.isInitialized = true; - } - resolve(); - }; - this.websocket.onclose = () => { - this.available = false; - this.logger.warn('WebSocket 连接关闭,尝试重连...'); - reject(new Error('WebSocket 连接关闭')); - }; - this.websocket.onmessage = (event) => this.handleMessage(event.data).catch(err => { - this.logger.error(`处理消息时出错: ${err}`); - }); - this.websocket.onerror = (event: ErrorEvent) => { - this.available = false; - this.logger.error(`WebSocket 出错: ${event.message}`); - this.websocket?.close(); - reject(new Error(`WebSocket 出错: ${event.message}`)); - }; - }); - } - - private delay(ms: number): Promise { - return new Promise(resolve => setTimeout(resolve, ms)); - } - - private async handleMessage(message: Data): Promise { - try { - const json: RecvPacket = JSON.parse(message.toString()); - const trace_id_md5 = json.trace_id_md5; - const action = json?.type ?? 'init'; - const event = this.cb.get(`${trace_id_md5}${action}`); - if (event) await event(json.data); - } catch (error) { - this.logger.error(`解析ws消息时出错: ${(error as Error).message}`); - } - } -} diff --git a/src/core/packet/context/clientContext.ts b/src/core/packet/context/clientContext.ts index 9e77bd7e..e4419139 100644 --- a/src/core/packet/context/clientContext.ts +++ b/src/core/packet/context/clientContext.ts @@ -1,6 +1,5 @@ import { IPacketClient } from '@/core/packet/client/baseClient'; import { NativePacketClient } from '@/core/packet/client/nativeClient'; -import { WsPacketClient } from '@/core/packet/client/wsClient'; import { OidbPacket } from '@/core/packet/transformer/base'; import { PacketLogger } from '@/core/packet/context/loggerContext'; import { NapCoreContext } from '@/core/packet/context/napCoreContext'; @@ -10,8 +9,7 @@ type clientPriorityType = { } const clientPriority: clientPriorityType = { - 10: (napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack) => new NativePacketClient(napCore, logger, logStack), - 1: (napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack) => new WsPacketClient(napCore, logger, logStack), + 10: (napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack) => new NativePacketClient(napCore, logger, logStack) }; export class LogStack { @@ -88,10 +86,6 @@ export class PacketClientContext { this.logger.info('使用指定的 NativePacketClient 作为后端'); client = new NativePacketClient(this.napCore, this.logger, this.logStack); break; - case 'frida': - this.logger.info('[Core] [Packet] 使用指定的 FridaPacketClient 作为后端'); - client = new WsPacketClient(this.napCore, this.logger, this.logStack); - break; case 'auto': case undefined: client = this.judgeClient(); diff --git a/src/native/packet/MoeHoo.linux.arm64.node b/src/native/packet/MoeHoo.linux.arm64.node index bd2c2eee..d4ebb90f 100644 Binary files a/src/native/packet/MoeHoo.linux.arm64.node and b/src/native/packet/MoeHoo.linux.arm64.node differ diff --git a/src/native/packet/MoeHoo.linux.x64.node b/src/native/packet/MoeHoo.linux.x64.node index 851dd577..121dde27 100644 Binary files a/src/native/packet/MoeHoo.linux.x64.node and b/src/native/packet/MoeHoo.linux.x64.node differ diff --git a/src/native/packet/MoeHoo.win32.x64.node b/src/native/packet/MoeHoo.win32.x64.node index 82bf80c2..0c5db04e 100644 Binary files a/src/native/packet/MoeHoo.win32.x64.node and b/src/native/packet/MoeHoo.win32.x64.node differ