From bede517f7eff23a68fb003e4c532179d3476c20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:27:10 +0800 Subject: [PATCH 01/12] refactor: package --- package.json | 6 +++--- src/core/services/NodeIKernelGroupService.ts | 2 +- src/core/wrapper.ts | 5 +---- vite.config.ts | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index f7be4610..70949b4b 100644 --- a/package.json +++ b/package.json @@ -44,12 +44,12 @@ "vite": "^5.2.6", "vite-plugin-cp": "^4.0.8", "vite-tsconfig-paths": "^5.1.0", - "winston": "^3.17.0" + "winston": "^3.17.0", + "fluent-ffmpeg": "^2.1.2", + "qrcode-terminal": "^0.12.0" }, "dependencies": { "express": "^5.0.0", - "fluent-ffmpeg": "^2.1.2", - "qrcode-terminal": "^0.12.0", "silk-wasm": "^3.6.1", "ws": "^8.18.0" } diff --git a/src/core/services/NodeIKernelGroupService.ts b/src/core/services/NodeIKernelGroupService.ts index dcc3ebab..b9eba01b 100644 --- a/src/core/services/NodeIKernelGroupService.ts +++ b/src/core/services/NodeIKernelGroupService.ts @@ -89,7 +89,7 @@ export interface NodeIKernelGroupService { isEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise; - queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise; + queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<{items:Array}>; fetchGroupEssenceList(req: { groupCode: string, diff --git a/src/core/wrapper.ts b/src/core/wrapper.ts index 63978b0c..1fd448a0 100644 --- a/src/core/wrapper.ts +++ b/src/core/wrapper.ts @@ -29,10 +29,7 @@ import { NodeIKernelECDHService } from './services/NodeIKernelECDHService'; import { NodeIO3MiscService } from './services/NodeIO3MiscService'; export interface NodeQQNTWrapperUtil { - get(): unknown; - - // eslint-disable-next-line @typescript-eslint/no-misused-new - new(): NodeQQNTWrapperUtil; + get(): NodeQQNTWrapperUtil; getNTUserDataInfoConfig(): string; diff --git a/vite.config.ts b/vite.config.ts index aa4c0df8..261801fe 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import { resolve } from 'path'; import nodeResolve from '@rollup/plugin-node-resolve'; import { builtinModules } from 'module'; //依赖排除 -const external = ['silk-wasm', 'ws', 'express', 'fluent-ffmpeg', 'qrcode-terminal']; +const external = ['silk-wasm', 'ws', 'express']; const nodeModules = [...builtinModules, builtinModules.map(m => `node:${m}`)].flat(); function genCpModule(module: string) { return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false }; From 636d1103e3973be805db5156896ccda1da4875ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:30:01 +0800 Subject: [PATCH 02/12] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E5=8F=8D?= =?UTF-8?q?=E6=92=A4=E5=9B=9E=E6=A8=A1=E5=9D=97=20=E6=9C=AA=E6=9D=A5?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=88=B0MoeHoo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/native/external/MoeHoo.win32.node | Bin 267776 -> 0 bytes src/onebot/index.ts | 33 -------------------------- 2 files changed, 33 deletions(-) delete mode 100644 src/native/external/MoeHoo.win32.node diff --git a/src/native/external/MoeHoo.win32.node b/src/native/external/MoeHoo.win32.node deleted file mode 100644 index 89703140fed140988787c2b0bd60c9d6479103cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267776 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 aiNj&WSdS5Af8(jo!+ELx|F8dJ9{3NYvJHj+ diff --git a/src/onebot/index.ts b/src/onebot/index.ts index 712a1e01..6221d434 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -45,8 +45,6 @@ import { OB11FriendRecallNoticeEvent } from '@/onebot/event/notice/OB11FriendRec import { OB11GroupRecallNoticeEvent } from '@/onebot/event/notice/OB11GroupRecallNoticeEvent'; import { LRUCache } from '@/common/lru-cache'; import { NodeIKernelRecentContactListener } from '@/core/listeners/NodeIKernelRecentContactListener'; -import { Native } from '@/native'; -import { decodeMessage, decodeRecallGroup } from "@/core/helper/adaptSysMessageDecoder"; import { BotOfflineEvent } from './event/notice/BotOfflineEvent'; //OneBot实现类 @@ -58,7 +56,6 @@ export class NapCatOneBot11Adapter { apis: StableOneBotApiWrapper; networkManager: OB11NetworkManager; actions: ActionMap; - nativeCore: Native | undefined; private bootTime = Date.now() / 1000; recallMsgCache = new LRUCache(100); @@ -80,36 +77,6 @@ export class NapCatOneBot11Adapter { .catch(e => this.context.logger.logError.bind(this.context.logger)('初始化OneBot失败', e)); } - async registerNative(core: NapCatCore, context: InstanceContext) { - try { - this.nativeCore = new Native(context.pathWrapper.binaryPath); - if (!this.nativeCore.inited) throw new Error('Native Not Init'); - // this.nativeCore.registerRecallCallback(async (hex: string) => { - // try { - // const data = decodeMessage(Buffer.from(hex, 'hex')); - // //data.MsgHead.BodyInner.MsgType SubType - // const bodyInner = data.msgHead?.bodyInner; - // //context.logger.log("[appNative] Parse MsgType:" + bodyInner.msgType + " / SubType:" + bodyInner.subType); - // if (bodyInner && bodyInner.msgType == 732 && bodyInner.subType == 17 && data?.msgHead?.noifyData?.innerData) { - // const RecallData = Buffer.from(data?.msgHead?.noifyData?.innerData); - // //跳过 4字节 群号 + 不知道的1字节 +2字节 长度 - // const uid = RecallData.readUint32BE(); - // const buffer = Buffer.from(RecallData.toString('hex').slice(14), 'hex'); - // const seq: number = decodeRecallGroup(buffer).recallDetails.subDetail.msgSeq; - // const peer: Peer = { chatType: ChatType.KCHATTYPEGROUP, peerUid: uid.toString() }; - // context.logger.log("[Native] 群消息撤回 Peer: " + uid.toString() + " / MsgSeq:" + seq); - // const msgs = await core.apis.MsgApi.queryMsgsWithFilterExWithSeq(peer, seq.toString()); - // this.recallMsgCache.put(msgs.msgList[0].msgId, msgs.msgList[0]); - // } - // } catch (error: any) { - // context.logger.logWarn("[Native] Error:", (error as Error).message, ' HEX:', hex); - // } - // }); - } catch (error) { - context.logger.logWarn("[Native] Error:", (error as Error).message); - return; - } - } async InitOneBot() { const selfInfo = this.core.selfInfo; const ob11Config = this.configLoader.configData; From f6067b002fa5b4a6f0dd8c8e0d97019ef3f9a34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:34:38 +0800 Subject: [PATCH 03/12] refactor: Shell Init --- src/onebot/index.ts | 5 +---- src/shell/napcat.ts | 10 +++++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/onebot/index.ts b/src/onebot/index.ts index 6221d434..1cd65819 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -72,11 +72,8 @@ export class NapCatOneBot11Adapter { }; this.actions = createActionMap(this, core); this.networkManager = new OB11NetworkManager(); - // this.registerNative(core, context).catch(e => this.context.logger.logWarn.bind(this.context.logger)('初始化Native失败', e)).then(); - this.InitOneBot() - .catch(e => this.context.logger.logError.bind(this.context.logger)('初始化OneBot失败', e)); - } + async InitOneBot() { const selfInfo = this.core.selfInfo; const ob11Config = this.configLoader.configData; diff --git a/src/shell/napcat.ts b/src/shell/napcat.ts index ff5f59d3..93655418 100644 --- a/src/shell/napcat.ts +++ b/src/shell/napcat.ts @@ -232,7 +232,7 @@ export async function NCoreInitShell() { logger.log(`可用于快速登录的 QQ:\n${historyLoginList .map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`) .join('\n') - }`); + }`); } loginService.getQRCodePicture(); } @@ -327,8 +327,12 @@ export class NapCatShell { }; this.core = new NapCatCore(this.context, selfInfo); - // TODO: complete ob11 adapter initialization logic - new NapCatOneBot11Adapter(this.core, this.context, pathWrapper); + + + } + async InitNapCat() { + new NapCatOneBot11Adapter(this.core, this.context, this.context.pathWrapper).InitOneBot() + .catch(e => this.context.logger.logError.bind(this.context.logger)('初始化OneBot失败', e)); } } From cbf98ffb89695ad7dc1493f503f772a42ab5fe67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:36:51 +0800 Subject: [PATCH 04/12] refactor: async Init --- src/framework/napcat.ts | 2 +- src/shell/napcat.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/framework/napcat.ts b/src/framework/napcat.ts index 9c947594..b38369da 100644 --- a/src/framework/napcat.ts +++ b/src/framework/napcat.ts @@ -59,7 +59,7 @@ export async function NCoreInitFramework( //启动WebUi InitWebUi(logger, pathWrapper).then().catch(logger.logError.bind(logger)); //初始化LLNC的Onebot实现 - new NapCatOneBot11Adapter(loaderObject.core, loaderObject.context, pathWrapper); + new NapCatOneBot11Adapter(loaderObject.core, loaderObject.context, pathWrapper).InitOneBot(); } export class NapCatFramework { diff --git a/src/shell/napcat.ts b/src/shell/napcat.ts index 93655418..33253015 100644 --- a/src/shell/napcat.ts +++ b/src/shell/napcat.ts @@ -300,7 +300,7 @@ export async function NCoreInitShell() { selfInfo, basicInfoWrapper, pathWrapper, - ); + ).InitNapCat(); } export class NapCatShell { From f228129c19846135785f7a8d22d24eafd0871240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:43:37 +0800 Subject: [PATCH 05/12] refactor: Init Core --- src/core/index.ts | 10 +++++----- src/framework/napcat.ts | 3 ++- src/shell/napcat.ts | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/core/index.ts b/src/core/index.ts index a9f11647..1135546a 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -84,11 +84,10 @@ export function getMajorPath(QQVersion: string): string { } export class NapCatCore { readonly context: InstanceContext; - readonly apis: StableNTApiWrapper; readonly eventWrapper: NTEventWrapper; - // readonly eventChannel: NTEventChannel; - NapCatDataPath: string; - NapCatTempPath: string; + NapCatDataPath: string = ''; + NapCatTempPath: string = ''; + apis: StableNTApiWrapper; // runtime info, not readonly selfInfo: SelfInfo; util: NodeQQNTWrapperUtil; @@ -112,6 +111,8 @@ export class NapCatCore { UserApi: new NTQQUserApi(this.context, this), GroupApi: new NTQQGroupApi(this.context, this), }; + } + async initCore() { this.NapCatDataPath = path.join(this.dataPath, 'NapCat'); fs.mkdirSync(this.NapCatDataPath, { recursive: true }); this.NapCatTempPath = path.join(this.NapCatDataPath, 'temp'); @@ -133,7 +134,6 @@ export class NapCatCore { this.configLoader.configData.consoleLogLevel as LogLevel, ); } - get dataPath(): string { let result = this.context.wrapper.NodeQQNTWrapperUtil.getNTUserDataInfoConfig(); if (!result) { diff --git a/src/framework/napcat.ts b/src/framework/napcat.ts index b38369da..d5a65353 100644 --- a/src/framework/napcat.ts +++ b/src/framework/napcat.ts @@ -55,11 +55,12 @@ export async function NCoreInitFramework( // await sleep(2500); // 初始化 NapCatFramework const loaderObject = new NapCatFramework(wrapper, session, logger, loginService, selfInfo, basicInfoWrapper, pathWrapper); + await loaderObject.core.initCore(); //启动WebUi InitWebUi(logger, pathWrapper).then().catch(logger.logError.bind(logger)); //初始化LLNC的Onebot实现 - new NapCatOneBot11Adapter(loaderObject.core, loaderObject.context, pathWrapper).InitOneBot(); + await new NapCatOneBot11Adapter(loaderObject.core, loaderObject.context, pathWrapper).InitOneBot(); } export class NapCatFramework { diff --git a/src/shell/napcat.ts b/src/shell/napcat.ts index 33253015..c4cf1d28 100644 --- a/src/shell/napcat.ts +++ b/src/shell/napcat.ts @@ -292,7 +292,7 @@ export async function NCoreInitShell() { fs.mkdirSync(dataPath, { recursive: true }); logger.logDebug('本账号数据/缓存目录:', accountDataPath); - new NapCatShell( + await new NapCatShell( wrapper, session, logger, @@ -331,6 +331,7 @@ export class NapCatShell { } async InitNapCat() { + await this.core.initCore(); new NapCatOneBot11Adapter(this.core, this.context, this.context.pathWrapper).InitOneBot() .catch(e => this.context.logger.logError.bind(this.context.logger)('初始化OneBot失败', e)); } From e8bf6fa0a6d91e056000b40fa803f92a4faf9a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:45:16 +0800 Subject: [PATCH 06/12] style: lint --- src/framework/napcat.ts | 2 +- src/shell/napcat.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/framework/napcat.ts b/src/framework/napcat.ts index d5a65353..a01397ba 100644 --- a/src/framework/napcat.ts +++ b/src/framework/napcat.ts @@ -23,7 +23,7 @@ export async function NCoreInitFramework( ) { //在进入本层前是否登录未进行判断 console.log('NapCat Framework App Loading...'); - + process.on('uncaughtException', (err) => { console.log('[NapCat] [Error] Unhandled Exception:', err.message); }); diff --git a/src/shell/napcat.ts b/src/shell/napcat.ts index c4cf1d28..9d1a8abd 100644 --- a/src/shell/napcat.ts +++ b/src/shell/napcat.ts @@ -232,7 +232,7 @@ export async function NCoreInitShell() { logger.log(`可用于快速登录的 QQ:\n${historyLoginList .map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`) .join('\n') - }`); + }`); } loginService.getQRCodePicture(); } From c893ec6030f6ac372533223cbe9e827d85803313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:52:03 +0800 Subject: [PATCH 07/12] refactor: apiInit Refactor --- src/core/apis/file.ts | 16 ++++++++-------- src/core/apis/group.ts | 5 +++-- src/core/apis/packet.ts | 5 +++-- src/core/index.ts | 8 +++++++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/core/apis/file.ts b/src/core/apis/file.ts index a3a34c77..be6a1da3 100644 --- a/src/core/apis/file.ts +++ b/src/core/apis/file.ts @@ -300,18 +300,18 @@ export class NTQQFileApi { element.elementType === ElementType.FILE ) { switch (element.elementType) { - case ElementType.PIC: + case ElementType.PIC: element.picElement!.sourcePath = elementResults[elementIndex]; - break; - case ElementType.VIDEO: + break; + case ElementType.VIDEO: element.videoElement!.filePath = elementResults[elementIndex]; - break; - case ElementType.PTT: + break; + case ElementType.PTT: element.pttElement!.filePath = elementResults[elementIndex]; - break; - case ElementType.FILE: + break; + case ElementType.FILE: element.fileElement!.filePath = elementResults[elementIndex]; - break; + break; } elementIndex++; } diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 711b864e..93fb792d 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -25,9 +25,10 @@ export class NTQQGroupApi { constructor(context: InstanceContext, core: NapCatCore) { this.context = context; this.core = core; - this.initCache().then().catch(context.logger.logError.bind(context.logger)); } - + async initApi() { + this.initCache().then().catch(this.context.logger.logError.bind(this.context.logger)); + } async initCache() { this.groups = await this.getGroups(); for (const group of this.groups) { diff --git a/src/core/apis/packet.ts b/src/core/apis/packet.ts index c8c65021..e29dcee9 100644 --- a/src/core/apis/packet.ts +++ b/src/core/apis/packet.ts @@ -26,14 +26,15 @@ export class NTQQPacketApi { this.context = context; this.core = core; this.logger = core.context.logger; - this.InitSendPacket(this.context.basicInfoWrapper.getFullQQVesion()) + } + async initApi() { + await this.InitSendPacket(this.context.basicInfoWrapper.getFullQQVesion()) .then() .catch((err) => { this.logger.logError.bind(this.core.context.logger); this.errStack.push(err); }); } - get available(): boolean { return this.pkt?.available ?? false; } diff --git a/src/core/index.ts b/src/core/index.ts index 1135546a..81ef2947 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -120,7 +120,13 @@ export class NapCatCore { if (!fs.existsSync(this.NapCatTempPath)) { fs.mkdirSync(this.NapCatTempPath, { recursive: true }); } - + //遍历this.apis[i].initApi 如果存在该函数进行async 调用 + for (const apiKey in this.apis) { + const api = this.apis[apiKey as keyof StableNTApiWrapper]; + if ('initApi' in api && typeof api.initApi === 'function') { + await api.initApi(); + } + } this.initNapCatCoreListeners().then().catch(this.context.logger.logError.bind(this.context.logger)); this.context.logger.setFileLogEnabled( From 8435375810a52888217206fc83a092bb14d8f23b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:53:50 +0800 Subject: [PATCH 08/12] style: lint --- src/core/services/NodeIKernelGroupService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/services/NodeIKernelGroupService.ts b/src/core/services/NodeIKernelGroupService.ts index b9eba01b..d5684800 100644 --- a/src/core/services/NodeIKernelGroupService.ts +++ b/src/core/services/NodeIKernelGroupService.ts @@ -89,7 +89,7 @@ export interface NodeIKernelGroupService { isEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise; - queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<{items:Array}>; + queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<{ items: Array }>; fetchGroupEssenceList(req: { groupCode: string, From 7a4805b4647a351586617c67201dc9f0abee7a74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 10:57:57 +0800 Subject: [PATCH 09/12] refactor: registerListen --- src/common/event.ts | 8 ++++---- src/core/apis/group.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/event.ts b/src/common/event.ts index 98686a5b..8a501b4b 100644 --- a/src/common/event.ts +++ b/src/common/event.ts @@ -21,9 +21,9 @@ type FuncKeys = Extract< export type ListenerClassBase = Record; export class NTEventWrapper { - private WrapperSession: NodeIQQNTWrapperSession | undefined; //WrapperSession - private listenerManager: Map = new Map(); //ListenerName-Unique -> Listener实例 - private EventTask = new Map>>(); //tasks ListenerMainName -> ListenerSubName-> uuid -> {timeout,createtime,func} + private readonly WrapperSession: NodeIQQNTWrapperSession | undefined; //WrapperSession + private readonly listenerManager: Map = new Map(); //ListenerName-Unique -> Listener实例 + private readonly EventTask = new Map>>(); //tasks ListenerMainName -> ListenerSubName-> uuid -> {timeout,createtime,func} constructor( wrapperSession: NodeIQQNTWrapperSession, @@ -120,9 +120,9 @@ export class NTEventWrapper { ListenerType extends (...args: any) => any = EnsureFunc, >( listenerAndMethod: `${Listener}/${ListenerMethod}`, + checker: (...args: Parameters) => boolean, waitTimes = 1, timeout = 5000, - checker: (...args: Parameters) => boolean, ) { return new Promise>((resolve, reject) => { const ListenerNameList = listenerAndMethod.split('/'); diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 93fb792d..596d2003 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -55,7 +55,7 @@ export class NTQQGroupApi { }, pskey); } async getGroupShutUpMemberList(groupCode: string) { - const data = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onShutUpMemberListChanged', 1, 1000, (group_id) => group_id === groupCode); + const data = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onShutUpMemberListChanged', (group_id) => group_id === groupCode, 1, 1000); this.context.session.getGroupService().getGroupShutUpMemberList(groupCode); return (await data)[1]; } @@ -259,9 +259,9 @@ export class NTQQGroupApi { async getGroupMemberV2(GroupCode: string, uid: string, forced = false) { const Listener = this.core.eventWrapper.registerListen( 'NodeIKernelGroupListener/onMemberInfoChange', + (params, _, members) => params === GroupCode && members.size > 0, 1, forced ? 5000 : 250, - (params, _, members) => params === GroupCode && members.size > 0, ); const retData = await ( this.core.eventWrapper @@ -325,7 +325,7 @@ export class NTQQGroupApi { hasNext: boolean | undefined; }> { const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); - const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', 0, timeout, (params) => params.sceneId === sceneId) + const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) .catch(() => { }); const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); if (result.errCode !== 0) { @@ -353,7 +353,7 @@ export class NTQQGroupApi { listenerMode: boolean; }> { const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); - const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', 0, timeout, (params) => params.sceneId === sceneId) + const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) .catch(() => { }); const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); if (result.errCode !== 0) { From 5494ff0553e532325f978d4ee68865d9ab23d444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 11:03:11 +0800 Subject: [PATCH 10/12] refactor: build --- package.json | 8 ++-- src/common/event.ts | 95 +++++++++++++++++++++++---------------------- vite.config.ts | 3 +- 3 files changed, 54 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index 70949b4b..3928e3cc 100644 --- a/package.json +++ b/package.json @@ -45,12 +45,12 @@ "vite-plugin-cp": "^4.0.8", "vite-tsconfig-paths": "^5.1.0", "winston": "^3.17.0", - "fluent-ffmpeg": "^2.1.2", - "qrcode-terminal": "^0.12.0" + "fluent-ffmpeg": "^2.1.2" }, "dependencies": { "express": "^5.0.0", "silk-wasm": "^3.6.1", - "ws": "^8.18.0" + "ws": "^8.18.0", + "qrcode-terminal": "^0.12.0" } -} +} \ No newline at end of file diff --git a/src/common/event.ts b/src/common/event.ts index 8a501b4b..821b0eb2 100644 --- a/src/common/event.ts +++ b/src/common/event.ts @@ -181,36 +181,36 @@ export class NTEventWrapper { callbackTimesToWait = 1, timeout = 5000, ) { + const id = randomUUID(); + let complete = 0; + let retData: Parameters | undefined = undefined; + let retEvent: any = {}; + + function sendDataCallback(resolve: any, reject: any) { + if (complete == 0) { + reject( + new Error( + 'Timeout: NTEvent serviceAndMethod:' + + serviceAndMethod + + ' ListenerName:' + + listenerAndMethod + + ' EventRet:\n' + + JSON.stringify(retEvent, null, 4) + + '\n', + ), + ); + } else { + resolve([retEvent as Awaited>, ...retData!]); + } + } + + const ListenerNameList = listenerAndMethod.split('/'); + const ListenerMainName = ListenerNameList[0]; + const ListenerSubName = ListenerNameList[1]; + return new Promise<[EventRet: Awaited>, ...Parameters]>( - async (resolve, reject) => { - const id = randomUUID(); - let complete = 0; - let retData: Parameters | undefined = undefined; - let retEvent: any = {}; - - function sendDataCallback() { - if (complete == 0) { - reject( - new Error( - 'Timeout: NTEvent serviceAndMethod:' + - serviceAndMethod + - ' ListenerName:' + - listenerAndMethod + - ' EventRet:\n' + - JSON.stringify(retEvent, null, 4) + - '\n', - ), - ); - } else { - resolve([retEvent as Awaited>, ...retData!]); - } - } - - const ListenerNameList = listenerAndMethod.split('/'); - const ListenerMainName = ListenerNameList[0]; - const ListenerSubName = ListenerNameList[1]; - - const timeoutRef = setTimeout(sendDataCallback, timeout); + (resolve, reject) => { + const timeoutRef = setTimeout(() => sendDataCallback(resolve, reject), timeout); const eventCallback = { timeout: timeout, @@ -221,7 +221,7 @@ export class NTEventWrapper { retData = args as Parameters; if (complete >= callbackTimesToWait) { clearTimeout(timeoutRef); - sendDataCallback(); + sendDataCallback(resolve, reject); } }, }; @@ -233,23 +233,26 @@ export class NTEventWrapper { } this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.set(id, eventCallback); this.createListenerFunction(ListenerMainName); - const eventFunction = this.createEventFunction(serviceAndMethod); - retEvent = await eventFunction!(...(args)); - if (!checkerEvent(retEvent) && timeoutRef.hasRef()) { - clearTimeout(timeoutRef); - reject( - new Error( - 'EventChecker Failed: NTEvent serviceAndMethod:' + - serviceAndMethod + - ' ListenerName:' + - listenerAndMethod + - ' EventRet:\n' + - JSON.stringify(retEvent, null, 4) + - '\n', - ), - ); - } + this.createEventFunction(serviceAndMethod)!(...(args)) + .then((eventResult: any) => { + retEvent = eventResult; + if (!checkerEvent(retEvent) && timeoutRef.hasRef()) { + clearTimeout(timeoutRef); + reject( + new Error( + 'EventChecker Failed: NTEvent serviceAndMethod:' + + serviceAndMethod + + ' ListenerName:' + + listenerAndMethod + + ' EventRet:\n' + + JSON.stringify(retEvent, null, 4) + + '\n', + ), + ); + } + }) + .catch(reject); }, ); } diff --git a/vite.config.ts b/vite.config.ts index 261801fe..794278d3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import { resolve } from 'path'; import nodeResolve from '@rollup/plugin-node-resolve'; import { builtinModules } from 'module'; //依赖排除 -const external = ['silk-wasm', 'ws', 'express']; +const external = ['silk-wasm', 'ws', 'express', 'qrcode-terminal']; const nodeModules = [...builtinModules, builtinModules.map(m => `node:${m}`)].flat(); function genCpModule(module: string) { return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false }; @@ -42,7 +42,6 @@ const FrameworkBaseConfigPlugin: PluginOption[] = [ const ShellBaseConfigPlugin: PluginOption[] = [ cp({ targets: [ - { src: './src/native/external', dest: 'dist/native', flatten: false }, { src: './src/native/packet', dest: 'dist/moehoo', flatten: false }, { src: './static/', dest: 'dist/static/', flatten: false }, { src: './src/core/external/napcat.json', dest: 'dist/config/' }, From 8f5baa47ecffc75c3a6ae02d3b21c6c46a83b8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 11:10:26 +0800 Subject: [PATCH 11/12] =?UTF-8?q?refactor:=20log=E6=9C=80=E4=BD=B3?= =?UTF-8?q?=E5=AE=9E=E8=B7=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/forward-msg-builder.ts | 8 +- src/common/log.ts | 185 ++++++++++++++++-------------- 2 files changed, 101 insertions(+), 92 deletions(-) diff --git a/src/common/forward-msg-builder.ts b/src/common/forward-msg-builder.ts index 55ecd65f..c091c542 100644 --- a/src/common/forward-msg-builder.ts +++ b/src/common/forward-msg-builder.ts @@ -54,11 +54,7 @@ export class ForwardMsgBuilder { const id = crypto.randomUUID(); const isGroupMsg = msg.some(m => m.isGroupMsg); if (!source) { - source = isGroupMsg ? "群聊的聊天记录" : - msg.length - ? Array.from(new Set(msg.slice(0, 4).map(m => m.senderName))) - .join('和') + '的聊天记录' - : '聊天记录'; + source = isGroupMsg ? "群聊的聊天记录" : msg.map(m => m.senderName).filter((v, i, a) => a.indexOf(v) === i).slice(0, 4).join('和') + '的聊天记录'; } if (!news) { news = msg.length === 0 ? [{ @@ -111,7 +107,7 @@ export class ForwardMsgBuilder { senderName: msg.senderName, isGroupMsg: msg.groupId !== undefined, msg: msg.msg.map(m => ({ - preview: m.valid? m.toPreview() : "[该消息类型暂不支持查看]", + preview: m.valid ? m.toPreview() : "[该消息类型暂不支持查看]", })) })), source, news, summary, prompt); } diff --git a/src/common/log.ts b/src/common/log.ts index 346baaed..569d8200 100644 --- a/src/common/log.ts +++ b/src/common/log.ts @@ -74,26 +74,30 @@ export class LogWrapper { } files.forEach(file => { const filePath = path.join(logDir, file); - fs.stat(filePath, (err, stats) => { + this.deleteOldLogFile(filePath, oneWeekAgo); + }); + }); + } + + private deleteOldLogFile(filePath: string, oneWeekAgo: number) { + fs.stat(filePath, (err, stats) => { + if (err) { + this.logger.error('Failed to get file stats', err); + return; + } + if (stats.mtime.getTime() < oneWeekAgo) { + fs.unlink(filePath, err => { if (err) { - this.logger.error('Failed to get file stats', err); - return; - } - if (stats.mtime.getTime() < oneWeekAgo) { - fs.unlink(filePath, err => { - if (err) { - if (err.code === 'ENOENT') { - this.logger.warn(`File already deleted: ${file}`); - } else { - this.logger.error('Failed to delete old log file', err); - } - } else { - this.logger.info(`Deleted old log file: ${file}`); - } - }); + if (err.code === 'ENOENT') { + this.logger.warn(`File already deleted: ${filePath}`); + } else { + this.logger.error('Failed to delete old log file', err); + } + } else { + this.logger.info(`Deleted old log file: ${filePath}`); } }); - }); + } }); } @@ -198,7 +202,7 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { tokens.push(`群聊 [${msg.peerName}(${msg.peerUin})]`); } if (msg.senderUin !== '0') { - tokens.push(`[${msg.sendMemberName || msg.sendRemarkName || msg.sendNickName}(${msg.senderUin})]`); + tokens.push(`[${msg.sendMemberName ?? msg.sendRemarkName ?? msg.sendNickName}(${msg.senderUin})]`); } } else if (msg.chatType == ChatType.KCHATTYPEDATALINE) { tokens.push('移动设备'); @@ -206,76 +210,85 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { tokens.push(`临时消息 (${msg.peerUin})`); } - function msgElementToText(element: MessageElement) { - if (element.textElement) { - if (element.textElement.atType === AtType.notAt) { - const originalContentLines = element.textElement.content.split('\n'); - return `${originalContentLines[0]}${originalContentLines.length > 1 ? ' ...' : ''}`; - } else if (element.textElement.atType === AtType.atAll) { - return `@全体成员`; - } else if (element.textElement.atType === AtType.atUser) { - return `${element.textElement.content} (${element.textElement.atUid})`; - } - } - - if (element.replyElement) { - const recordMsgOrNull = msg.records.find( - record => element.replyElement!.sourceMsgIdInRecords === record.msgId, - ); - return `[回复消息 ${recordMsgOrNull && - recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020' - ? - rawMessageToText(recordMsgOrNull, recursiveLevel + 1) : - `未找到消息记录 (MsgId = ${element.replyElement.sourceMsgIdInRecords})` - }]`; - } - - if (element.picElement) { - return '[图片]'; - } - - if (element.fileElement) { - return `[文件 ${element.fileElement.fileName}]`; - } - - if (element.videoElement) { - return '[视频]'; - } - - if (element.pttElement) { - return `[语音 ${element.pttElement.duration}s]`; - } - - if (element.arkElement) { - return '[卡片消息]'; - } - - if (element.faceElement) { - return `[表情 ${element.faceElement.faceText ?? ''}]`; - } - - if (element.marketFaceElement) { - return element.marketFaceElement.faceName; - } - - if (element.markdownElement) { - return '[Markdown 消息]'; - } - - if (element.multiForwardMsgElement) { - return '[转发消息]'; - } - - if (element.elementType === ElementType.GreyTip) { - return '[灰条消息]'; - } - - return `[未实现 (ElementType = ${element.elementType})]`; - } - for (const element of msg.elements) { - tokens.push(msgElementToText(element)); + tokens.push(msgElementToText(element, msg, recursiveLevel)); } return tokens.join(' '); } + +function msgElementToText(element: MessageElement, msg: RawMessage, recursiveLevel: number): string { + if (element.textElement) { + return textElementToText(element.textElement); + } + + if (element.replyElement) { + return replyElementToText(element.replyElement, msg, recursiveLevel); + } + + if (element.picElement) { + return '[图片]'; + } + + if (element.fileElement) { + return `[文件 ${element.fileElement.fileName}]`; + } + + if (element.videoElement) { + return '[视频]'; + } + + if (element.pttElement) { + return `[语音 ${element.pttElement.duration}s]`; + } + + if (element.arkElement) { + return '[卡片消息]'; + } + + if (element.faceElement) { + return `[表情 ${element.faceElement.faceText ?? ''}]`; + } + + if (element.marketFaceElement) { + return element.marketFaceElement.faceName; + } + + if (element.markdownElement) { + return '[Markdown 消息]'; + } + + if (element.multiForwardMsgElement) { + return '[转发消息]'; + } + + if (element.elementType === ElementType.GreyTip) { + return '[灰条消息]'; + } + + return `[未实现 (ElementType = ${element.elementType})]`; +} + +function textElementToText(textElement: any): string { + if (textElement.atType === AtType.notAt) { + const originalContentLines = textElement.content.split('\n'); + return `${originalContentLines[0]}${originalContentLines.length > 1 ? ' ...' : ''}`; + } else if (textElement.atType === AtType.atAll) { + return `@全体成员`; + } else if (textElement.atType === AtType.atUser) { + return `${textElement.content} (${textElement.atUid})`; + } + return ''; +} + +function replyElementToText(replyElement: any, msg: RawMessage, recursiveLevel: number): string { + const recordMsgOrNull = msg.records.find( + record => replyElement.sourceMsgIdInRecords === record.msgId, + ); + return `[回复消息 ${recordMsgOrNull && + recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020' + ? + rawMessageToText(recordMsgOrNull, recursiveLevel + 1) : + `未找到消息记录 (MsgId = ${replyElement.sourceMsgIdInRecords})` + }]`; +} \ No newline at end of file From 6b377416da5a48a9a0da7e591b778b229f51ed7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 14 Nov 2024 11:24:00 +0800 Subject: [PATCH 12/12] refactor: fix --- src/common/lru-cache.ts | 9 ++++++ src/common/message-unique.ts | 8 ++--- src/common/request.ts | 61 ++++++++++++++++++------------------ src/core/apis/file.ts | 12 +++---- src/core/apis/friend.ts | 4 +-- src/core/apis/group.ts | 4 +-- src/core/apis/msg.ts | 4 +-- 7 files changed, 54 insertions(+), 48 deletions(-) diff --git a/src/common/lru-cache.ts b/src/common/lru-cache.ts index 39c879f0..ba2cef1d 100644 --- a/src/common/lru-cache.ts +++ b/src/common/lru-cache.ts @@ -30,4 +30,13 @@ export class LRUCache { } this.cache.set(key, value); } + public resetCapacity(newCapacity: number): void { + this.capacity = newCapacity; + while (this.cache.size > this.capacity) { + const firstKey = this.cache.keys().next().value; + if (firstKey !== undefined) { + this.cache.delete(firstKey); + } + } + } } \ No newline at end of file diff --git a/src/common/message-unique.ts b/src/common/message-unique.ts index db980a94..d6ca43fc 100644 --- a/src/common/message-unique.ts +++ b/src/common/message-unique.ts @@ -2,8 +2,8 @@ import { Peer } from '@/core'; import crypto from 'crypto'; export class LimitedHashTable { - private keyToValue: Map = new Map(); - private valueToKey: Map = new Map(); + private readonly keyToValue: Map = new Map(); + private readonly valueToKey: Map = new Map(); private maxSize: number; constructor(maxSize: number) { @@ -75,8 +75,8 @@ export class LimitedHashTable { } class MessageUniqueWrapper { - private msgDataMap: LimitedHashTable; - private msgIdMap: LimitedHashTable; + private readonly msgDataMap: LimitedHashTable; + private readonly msgIdMap: LimitedHashTable; constructor(maxMap: number = 1000) { this.msgIdMap = new LimitedHashTable(maxMap); diff --git a/src/common/request.ts b/src/common/request.ts index f3e1cebe..344feced 100644 --- a/src/common/request.ts +++ b/src/common/request.ts @@ -9,48 +9,47 @@ export class RequestUtil { return new Promise((resolve, reject) => { const req = client.get(url, (res) => { let cookies: { [key: string]: string } = {}; - const handleRedirect = (res: http.IncomingMessage) => { - //console.log(res.headers.location); - if (res.statusCode === 301 || res.statusCode === 302) { - if (res.headers.location) { - const redirectUrl = new URL(res.headers.location, url); - RequestUtil.HttpsGetCookies(redirectUrl.href).then((redirectCookies) => { - // 合并重定向过程中的cookies - cookies = { ...cookies, ...redirectCookies }; - resolve(cookies); - }).catch((err) => { - reject(err); - }); - } else { - resolve(cookies); - } - } else { - resolve(cookies); - } - }; - res.on('data', () => { - }); // Necessary to consume the stream + + res.on('data', () => { }); // Necessary to consume the stream res.on('end', () => { - handleRedirect(res); + this.handleRedirect(res, url, cookies) + .then(resolve) + .catch(reject); }); + if (res.headers['set-cookie']) { - //console.log(res.headers['set-cookie']); - res.headers['set-cookie'].forEach((cookie) => { - const parts = cookie.split(';')[0].split('='); - const key = parts[0]; - const value = parts[1]; - if (key && value && key.length > 0 && value.length > 0) { - cookies[key] = value; - } - }); + this.extractCookies(res.headers['set-cookie'], cookies); } }); + req.on('error', (error: any) => { reject(error); }); }); } + private static async handleRedirect(res: http.IncomingMessage, url: string, cookies: { [key: string]: string }): Promise<{ [key: string]: string }> { + if (res.statusCode === 301 || res.statusCode === 302) { + if (res.headers.location) { + const redirectUrl = new URL(res.headers.location, url); + const redirectCookies = await this.HttpsGetCookies(redirectUrl.href); + // 合并重定向过程中的cookies + return { ...cookies, ...redirectCookies }; + } + } + return cookies; + } + + private static extractCookies(setCookieHeaders: string[], cookies: { [key: string]: string }) { + setCookieHeaders.forEach((cookie) => { + const parts = cookie.split(';')[0].split('='); + const key = parts[0]; + const value = parts[1]; + if (key && value && key.length > 0 && value.length > 0) { + cookies[key] = value; + } + }); + } // 请求和回复都是JSON data传原始内容 自动编码json static async HttpGetJson(url: string, method: string = 'GET', data?: any, headers: { diff --git a/src/core/apis/file.ts b/src/core/apis/file.ts index be6a1da3..652897ff 100644 --- a/src/core/apis/file.ts +++ b/src/core/apis/file.ts @@ -357,15 +357,13 @@ export class NTQQFileApi { async getImageSize(filePath: string): Promise { return new Promise((resolve, reject) => { - imageSize(filePath, (err, dimensions) => { + imageSize(filePath, (err: Error | null, dimensions) => { if (err) { - reject(err); + reject(new Error(err.message)); + } else if (!dimensions) { + reject(new Error('获取图片尺寸失败')); } else { - if (!dimensions) { - reject(new Error('获取图片尺寸失败')); - } else { - resolve(dimensions); - } + resolve(dimensions); } }); }); diff --git a/src/core/apis/friend.ts b/src/core/apis/friend.ts index b805c729..7e852dd0 100644 --- a/src/core/apis/friend.ts +++ b/src/core/apis/friend.ts @@ -15,7 +15,7 @@ export class NTQQFriendApi { } async getBuddyV2SimpleInfoMap(refresh = false) { const buddyService = this.context.session.getBuddyService(); - const buddyListV2 = refresh ? await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL) : await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL); + const buddyListV2 = await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL); const uids = buddyListV2.data.flatMap(item => item.buddyUids); return await this.core.eventWrapper.callNoListenerEvent( 'NodeIKernelProfileService/getCoreAndBaseInfo', @@ -44,7 +44,7 @@ export class NTQQFriendApi { async getBuddyV2ExWithCate(refresh = false) { const categoryMap: Map = new Map(); const buddyService = this.context.session.getBuddyService(); - const buddyListV2 = refresh ? (await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL)).data : (await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL)).data; + const buddyListV2 = (await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL)).data; const uids = buddyListV2.flatMap(item => { item.buddyUids.forEach(uid => { categoryMap.set(uid, { categoryId: item.categoryId, categoryName: item.categroyName }); diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 596d2003..0380186c 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -319,7 +319,7 @@ export class NTQQGroupApi { return undefined; } - async tryGetGroupMembersV2(modeListener = false, groupQQ: string, num = 30, timeout = 100): Promise<{ + async tryGetGroupMembersV2(groupQQ: string, modeListener = false, num = 30, timeout = 100): Promise<{ infos: Map; finish: boolean; hasNext: boolean | undefined; @@ -372,7 +372,7 @@ export class NTQQGroupApi { infos: new Map([...(resMode2?.infos ?? []), ...result.result.infos]), finish: result.result.finish, hasNext: resMode2?.hasNext, - listenerMode: resMode2?.hasNext !== undefined ? true : false + listenerMode: resMode2?.hasNext !== undefined }; } diff --git a/src/core/apis/msg.ts b/src/core/apis/msg.ts index 37041dd4..120d3351 100644 --- a/src/core/apis/msg.ts +++ b/src/core/apis/msg.ts @@ -144,7 +144,7 @@ export class NTQQMsgApi { params, ], () => true, - () => true, // Todo: 应当通过 groupFileListResult 判断 + () => true, // 应当通过 groupFileListResult 判断 1, 5000, ); @@ -194,7 +194,7 @@ export class NTQQMsgApi { async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { //唉?!我有个想法 if (peer.chatType === ChatType.KCHATTYPETEMPC2CFROMGROUP && peer.guildId && peer.guildId !== '') { - const member = await this.core.apis.GroupApi.getGroupMember(peer.guildId, peer.peerUid!); + const member = await this.core.apis.GroupApi.getGroupMember(peer.guildId, peer.peerUid); if (member) { await this.PrepareTempChat(peer.peerUid, peer.guildId, member.nick); }