diff --git a/src/onebot/action/OneBotAction.ts b/src/onebot/action/OneBotAction.ts index 818169e2..e2a66a61 100644 --- a/src/onebot/action/OneBotAction.ts +++ b/src/onebot/action/OneBotAction.ts @@ -4,7 +4,9 @@ import { NapCatCore } from '@/core'; import { NapCatOneBot11Adapter, OB11Return } from '@/onebot'; import { NetworkAdapterConfig } from '../config/config'; import { TSchema } from '@sinclair/typebox'; - +export interface OneBotRuntimeContext { + protocol_new: boolean; +} export class OB11Response { private static createResponse(data: T, status: string, retcode: number, message: string = '', echo: unknown = null): OB11Return { return { @@ -57,13 +59,18 @@ export abstract class OneBotAction { return { valid: true }; } - public async handle(payload: PayloadType, adaptername: string, config: NetworkAdapterConfig): Promise> { + public async handle( + payload: PayloadType, + adaptername: string, + config: NetworkAdapterConfig, + runtime: OneBotRuntimeContext = { protocol_new: false } + ): Promise> { const result = await this.check(payload); if (!result.valid) { return OB11Response.error(result.message, 400); } try { - const resData = await this._handle(payload, adaptername, config); + const resData = await this._handle(payload, adaptername, config, runtime); return OB11Response.ok(resData); } catch (e: unknown) { this.core.context.logger.logError('发生错误', e); @@ -71,13 +78,19 @@ export abstract class OneBotAction { } } - public async websocketHandle(payload: PayloadType, echo: unknown, adaptername: string, config: NetworkAdapterConfig): Promise> { + public async websocketHandle( + payload: PayloadType, + echo: unknown, + adaptername: string, + config: NetworkAdapterConfig, + runtime: OneBotRuntimeContext + ): Promise> { const result = await this.check(payload); if (!result.valid) { return OB11Response.error(result.message, 1400, echo); } try { - const resData = await this._handle(payload, adaptername, config); + const resData = await this._handle(payload, adaptername, config, runtime); return OB11Response.ok(resData, echo); } catch (e: unknown) { this.core.context.logger.logError('发生错误', e); @@ -85,5 +98,5 @@ export abstract class OneBotAction { } } - abstract _handle(payload: PayloadType, adaptername: string, config: NetworkAdapterConfig): Promise; + abstract _handle(payload: PayloadType, adaptername: string, config: NetworkAdapterConfig, runtime: OneBotRuntimeContext): Promise; } diff --git a/src/onebot/network/http-server.ts b/src/onebot/network/http-server.ts index 6fe19e7f..2ed8caa7 100644 --- a/src/onebot/network/http-server.ts +++ b/src/onebot/network/http-server.ts @@ -116,12 +116,16 @@ export class OB11HttpServerAdapter extends IOB11NetworkAdapter hello.message = 'NapCat4 Is Running'; return res.json(hello); } - const actionName = req.path.split('/')[1]; + let actionName = req.path.split('/')[1]; + const isV2 = actionName === 'v2' + actionName = isV2 ? actionName = req.path.split('/')[2] : actionName; // eslint-disable-next-line @typescript-eslint/no-explicit-any const action = this.actions.get(actionName as any); if (action) { try { - const result = await action.handle(payload, this.name, this.config); + const result = await action.handle(payload, this.name, this.config, { + protocol_new: isV2 + }); return res.json(result); } catch (error: unknown) { return res.json(OB11Response.error((error as Error)?.stack?.toString() || (error as Error)?.message || 'Error Handle', 200)); @@ -131,6 +135,7 @@ export class OB11HttpServerAdapter extends IOB11NetworkAdapter } } + async handleRequest(req: Request, res: Response) { if (!this.isEnable) { this.core.context.logger.log('[OneBot] [HTTP Server Adapter] Server is closed');