mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
21 Commits
e46d274a75
...
v3.4.11
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0f427375cb | ||
![]() |
4001270b93 | ||
![]() |
e7f5ed3bcc | ||
![]() |
05cdc37d0a | ||
![]() |
27920e0bee | ||
![]() |
ae409b7249 | ||
![]() |
8276258348 | ||
![]() |
1bf96a97a5 | ||
![]() |
d672680c4c | ||
![]() |
b89f2805e7 | ||
![]() |
78b4aa9295 | ||
![]() |
0a06637e78 | ||
![]() |
13afa2c7ab | ||
![]() |
51d34d17cc | ||
![]() |
18a99341d5 | ||
![]() |
f01c8f0110 | ||
![]() |
d8070eee2a | ||
![]() |
8519b7f4df | ||
![]() |
591ab1b1df | ||
![]() |
393815b11e | ||
![]() |
341a397bc4 |
BIN
external/LiteLoaderWrapper.zip
vendored
BIN
external/LiteLoaderWrapper.zip
vendored
Binary file not shown.
@@ -4,7 +4,7 @@
|
|||||||
"name": "NapCatQQ",
|
"name": "NapCatQQ",
|
||||||
"slug": "NapCat.Framework",
|
"slug": "NapCat.Framework",
|
||||||
"description": "高性能的 OneBot 11 协议实现",
|
"description": "高性能的 OneBot 11 协议实现",
|
||||||
"version": "3.4.7",
|
"version": "3.4.10",
|
||||||
"icon": "./logo.png",
|
"icon": "./logo.png",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"name": "napcat",
|
"name": "napcat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.4.7",
|
"version": "3.4.10",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:framework": "vite build --mode framework",
|
"build:framework": "vite build --mode framework",
|
||||||
"build:shell": "vite build --mode shell",
|
"build:shell": "vite build --mode shell",
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
"typescript": "^5.3.3",
|
"typescript": "^5.3.3",
|
||||||
"vite": "^5.2.6",
|
"vite": "^5.2.6",
|
||||||
"vite-plugin-cp": "^4.0.8",
|
"vite-plugin-cp": "^4.0.8",
|
||||||
"vite-tsconfig-paths": "^4.3.2"
|
"vite-tsconfig-paths": "^5.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^5.0.0",
|
"express": "^5.0.0",
|
||||||
|
@@ -1 +1 @@
|
|||||||
export const napCatVersion = '3.4.7';
|
export const napCatVersion = '3.4.10';
|
||||||
|
@@ -53,18 +53,14 @@ export abstract class PacketClient {
|
|||||||
|
|
||||||
private async registerCallback(trace_id: string, type: string, callback: (json: RecvPacketData) => Promise<void>): Promise<void> {
|
private async registerCallback(trace_id: string, type: string, callback: (json: RecvPacketData) => Promise<void>): Promise<void> {
|
||||||
this.cb.put(createHash('md5').update(trace_id).digest('hex') + type, callback);
|
this.cb.put(createHash('md5').update(trace_id).digest('hex') + type, callback);
|
||||||
console.log(this.cb.cache);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async sendCommand(cmd: string, data: string, trace_id: string, rsp: boolean = false, timeout: number = 20000, sendcb: (json: RecvPacketData) => void = () => {
|
private async sendCommand(cmd: string, data: string, trace_id: string, rsp: boolean = false, timeout: number = 20000, sendcb: (json: RecvPacketData) => void = () => {
|
||||||
}): Promise<RecvPacketData> {
|
}): Promise<RecvPacketData> {
|
||||||
return new Promise<RecvPacketData>((resolve, reject) => {
|
return new Promise<RecvPacketData>((resolve, reject) => {
|
||||||
if (rsp) {
|
const timeoutHandle = setTimeout(() => {
|
||||||
this.registerCallback(trace_id, 'recv', async (json: RecvPacketData) => {
|
reject(new Error(`sendCommand timed out after ${timeout} ms for ${cmd} with trace_id ${trace_id}`));
|
||||||
clearTimeout(timeoutHandle);
|
}, timeout);
|
||||||
resolve(json);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.registerCallback(trace_id, 'send', async (json: RecvPacketData) => {
|
this.registerCallback(trace_id, 'send', async (json: RecvPacketData) => {
|
||||||
sendcb(json);
|
sendcb(json);
|
||||||
if (!rsp) {
|
if (!rsp) {
|
||||||
@@ -72,10 +68,13 @@ export abstract class PacketClient {
|
|||||||
resolve(json);
|
resolve(json);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (rsp) {
|
||||||
|
this.registerCallback(trace_id, 'recv', async (json: RecvPacketData) => {
|
||||||
|
clearTimeout(timeoutHandle);
|
||||||
|
resolve(json);
|
||||||
|
});
|
||||||
|
}
|
||||||
this.sendCommandImpl(cmd, data, trace_id);
|
this.sendCommandImpl(cmd, data, trace_id);
|
||||||
const timeoutHandle = setTimeout(() => {
|
|
||||||
reject(new Error(`sendCommand timed out after ${timeout} ms for ${cmd} with trace_id ${trace_id}`));
|
|
||||||
}, timeout);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +89,7 @@ export abstract class PacketClient {
|
|||||||
const trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
|
const trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
|
||||||
|
|
||||||
this.sendCommand(cmd, data, trace_id, rsp, 20000, async () => {
|
this.sendCommand(cmd, data, trace_id, rsp, 20000, async () => {
|
||||||
console.log('sendPacket:', cmd, data, trace_id);
|
//console.log('sendPacket:', cmd, data, trace_id);
|
||||||
await this.napCatCore.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
|
await this.napCatCore.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
|
||||||
}).then((res) => resolve(res)).catch((e: Error) => reject(e));
|
}).then((res) => resolve(res)).catch((e: Error) => reject(e));
|
||||||
});
|
});
|
||||||
|
@@ -12,7 +12,7 @@ export interface NativePacketExportType {
|
|||||||
SendPacket?: (cmd: string, data: string, trace_id: string) => void;
|
SendPacket?: (cmd: string, data: string, trace_id: string) => void;
|
||||||
}
|
}
|
||||||
export class NativePacketClient extends PacketClient {
|
export class NativePacketClient extends PacketClient {
|
||||||
private readonly supportedPlatforms = ['win32.x64'];
|
private readonly supportedPlatforms = ['win32.x64', 'linux.x64', 'linux.arm64'];
|
||||||
private MoeHooExport: { exports: NativePacketExportType } = { exports: {} };
|
private MoeHooExport: { exports: NativePacketExportType } = { exports: {} };
|
||||||
private sendEvent = new LRUCache<number, string>(500);//seq->trace_id
|
private sendEvent = new LRUCache<number, string>(500);//seq->trace_id
|
||||||
constructor(core: NapCatCore) {
|
constructor(core: NapCatCore) {
|
||||||
@@ -41,8 +41,6 @@ export class NativePacketClient extends PacketClient {
|
|||||||
const platform = process.platform + '.' + process.arch;
|
const platform = process.platform + '.' + process.arch;
|
||||||
const moehoo_path = path.join(dirname(fileURLToPath(import.meta.url)), './moehoo/MoeHoo.' + platform + '.node');
|
const moehoo_path = path.join(dirname(fileURLToPath(import.meta.url)), './moehoo/MoeHoo.' + platform + '.node');
|
||||||
process.dlopen(this.MoeHooExport, moehoo_path, constants.dlopen.RTLD_LAZY);
|
process.dlopen(this.MoeHooExport, moehoo_path, constants.dlopen.RTLD_LAZY);
|
||||||
console.log('MoeHooExport:', this.MoeHooExport);
|
|
||||||
console.log('recv:', recv, 'send:',);
|
|
||||||
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');
|
const trace_id = createHash('md5').update(Buffer.from(hex_data, 'hex')).digest('hex');
|
||||||
if (type === 0 && this.cb.get(trace_id + 'recv')) {
|
if (type === 0 && this.cb.get(trace_id + 'recv')) {
|
||||||
@@ -63,14 +61,14 @@ export class NativePacketClient extends PacketClient {
|
|||||||
// } else {
|
// } else {
|
||||||
// this.logger.logError(`Callback not found for hex_data: ${hex_data}`);
|
// this.logger.logError(`Callback not found for hex_data: ${hex_data}`);
|
||||||
// }
|
// }
|
||||||
console.log('type:', type, 'cmd:', cmd, 'trace_id:', trace_id);
|
//console.log('type:', type, 'cmd:', cmd, 'trace_id:', trace_id);
|
||||||
});
|
});
|
||||||
this.isAvailable = true;
|
this.isAvailable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
sendCommandImpl(cmd: string, data: string, trace_id: string): void {
|
sendCommandImpl(cmd: string, data: string, trace_id: string): void {
|
||||||
const trace_id_md5 = createHash('md5').update(trace_id).digest('hex');
|
const trace_id_md5 = createHash('md5').update(trace_id).digest('hex');
|
||||||
console.log('sendCommandImpl:', cmd, data, trace_id_md5);
|
//console.log('sendCommandImpl:', cmd, data, trace_id_md5);
|
||||||
this.MoeHooExport.exports.SendPacket?.(cmd, data, trace_id_md5);
|
this.MoeHooExport.exports.SendPacket?.(cmd, data, trace_id_md5);
|
||||||
this.cb.get(trace_id_md5 + 'send')?.({ seq: 0, cmd, hex_data: '' });
|
this.cb.get(trace_id_md5 + 'send')?.({ seq: 0, cmd, hex_data: '' });
|
||||||
}
|
}
|
||||||
|
@@ -31,15 +31,15 @@ export class PacketSession {
|
|||||||
private newClient(core: NapCatCore): PacketClient {
|
private newClient(core: NapCatCore): PacketClient {
|
||||||
const prefer = core.configLoader.configData.packetBackend;
|
const prefer = core.configLoader.configData.packetBackend;
|
||||||
switch (prefer) {
|
switch (prefer) {
|
||||||
case "native":
|
case "native":
|
||||||
return new NativePacketClient(core);
|
return new NativePacketClient(core);
|
||||||
case "frida":
|
case "frida":
|
||||||
return new wsPacketClient(core);
|
return new wsPacketClient(core);
|
||||||
case "auto":
|
case "auto":
|
||||||
case undefined:
|
case undefined:
|
||||||
return this.judgeClient(core);
|
return this.judgeClient(core);
|
||||||
default:
|
default:
|
||||||
throw new Error(`[Core] [Packet] 未知的Packet后端类型 ${prefer},请检查配置文件!`);
|
throw new Error(`[Core] [Packet] 未知的Packet后端类型 ${prefer},请检查配置文件!`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
src/native/packet/MoeHoo.linux.arm64.node
Normal file
BIN
src/native/packet/MoeHoo.linux.arm64.node
Normal file
Binary file not shown.
BIN
src/native/packet/MoeHoo.linux.x64.node
Normal file
BIN
src/native/packet/MoeHoo.linux.x64.node
Normal file
Binary file not shown.
Binary file not shown.
@@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) {
|
|||||||
SettingItem(
|
SettingItem(
|
||||||
'<span id="napcat-update-title">Napcat</span>',
|
'<span id="napcat-update-title">Napcat</span>',
|
||||||
void 0,
|
void 0,
|
||||||
SettingButton("V3.4.7", "napcat-update-button", "secondary")
|
SettingButton("V3.4.10", "napcat-update-button", "secondary")
|
||||||
)
|
)
|
||||||
]),
|
]),
|
||||||
SettingList([
|
SettingList([
|
||||||
|
Reference in New Issue
Block a user