diff --git a/src/onebot/action/extends/GetFriendWithCategory.ts b/src/onebot/action/extends/GetFriendWithCategory.ts index 181d06c3..79ec2a15 100644 --- a/src/onebot/action/extends/GetFriendWithCategory.ts +++ b/src/onebot/action/extends/GetFriendWithCategory.ts @@ -1,6 +1,6 @@ +import { OB11Constructor } from '@/onebot/helper/data'; import BaseAction from '../BaseAction'; import { ActionName } from '../types'; -import { OB11Constructor } from '@/onebot/helper/data'; export class GetFriendWithCategory extends BaseAction { actionName = ActionName.GetFriendsWithCategory; diff --git a/src/onebot/main.ts b/src/onebot/main.ts index 1156c0fe..c462b422 100644 --- a/src/onebot/main.ts +++ b/src/onebot/main.ts @@ -3,12 +3,13 @@ import { OB11Config } from './helper/config'; import { NapCatPathWrapper } from '@/common/framework/napcat'; import { OneBotApiContextType } from './types/adapter'; import { OneBotFriendApi, OneBotGroupApi, OneBotUserApi } from './api'; -import { OB11NetworkManager } from '@/onebot/network'; +import { OB11NetworkManager, OB11PassiveHttpAdapter } from '@/onebot/network'; import { OB11InputStatusEvent } from '@/onebot/event/notice/OB11InputStatusEvent'; import { MessageUnique } from '@/common/utils/MessageUnique'; import { OB11Constructor } from '@/onebot/helper/data'; import { logOB11Message } from '@/onebot/helper/log'; import { proxiedListenerOf } from '@/common/utils/proxy-handler'; +import { createActionMap } from './action'; //OneBot实现类 export class NapCatOneBot11Adapter { @@ -50,6 +51,11 @@ export class NapCatOneBot11Adapter { this.context.logger.setLogSelfInfo(selfInfo); }).catch(this.context.logger.logError); this.context.logger.log(`[Notice] [OneBot11] ${serviceInfo}`); + let actions = createActionMap(this, this.core); + let OB11NetworkManagerWrap = new OB11NetworkManager(); + OB11NetworkManagerWrap.registerAdapter(new OB11PassiveHttpAdapter(ob11Config.http.port, ob11Config.token, this.core, this)); + OB11NetworkManagerWrap.registerAllActions(actions); + OB11NetworkManagerWrap.openAllAdapters(); // Todo 开始启动NetWork await this.initMsgListener(); diff --git a/src/onebot/network/active-http.ts b/src/onebot/network/active-http.ts index 36986081..ad4dfbae 100644 --- a/src/onebot/network/active-http.ts +++ b/src/onebot/network/active-http.ts @@ -28,7 +28,8 @@ export class OB11ActiveHttpAdapter implements IOB11NetworkAdapter { registerHeartBeat() { // HttpPost 心跳 } - + registerActionMap(actionMap: Map>) { + } registerAction, P, R>(action: T) { // Passive http adapter does not need to register actions } diff --git a/src/onebot/network/active-websocket.ts b/src/onebot/network/active-websocket.ts index d394c0db..856626be 100644 --- a/src/onebot/network/active-websocket.ts +++ b/src/onebot/network/active-websocket.ts @@ -24,7 +24,9 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { this.coreContext = coreContext; this.onebotContext = onebotContext; } - + registerActionMap(actionMap: Map>) { + this.actionMap = actionMap; + } registerHeartBeat() { if (this.connection) { this.heartbeatTimer = setInterval(() => { diff --git a/src/onebot/network/index.ts b/src/onebot/network/index.ts index d056c5c3..c31c9f62 100644 --- a/src/onebot/network/index.ts +++ b/src/onebot/network/index.ts @@ -7,6 +7,8 @@ export type OB11EmitEventContent = OB11BaseEvent | OB11Message; export interface IOB11NetworkAdapter { registerAction, P, R>(action: T): void; + registerActionMap(actionMap: Map>): void; + onEvent(event: T): void; open(): void | Promise; @@ -16,11 +18,15 @@ export interface IOB11NetworkAdapter { export class OB11NetworkManager { adapters: IOB11NetworkAdapter[] = []; - async getAllAdapters() { return this.adapters; } - + async openAllAdapters() { + return Promise.all(this.adapters.map(adapter => adapter.open())); + } + async registerAllActions(actions: Map>) { + return Promise.all(this.adapters.map(adapter => adapter.registerActionMap(actions))); + } async emitEvent(event: OB11EmitEventContent) { // Mlikiowa V2.0.0 Refactor Todo return Promise.all(this.adapters.map(adapter => adapter.onEvent(event))); diff --git a/src/onebot/network/passive-http.ts b/src/onebot/network/passive-http.ts index feecbfe9..3051cf28 100644 --- a/src/onebot/network/passive-http.ts +++ b/src/onebot/network/passive-http.ts @@ -3,6 +3,8 @@ import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent'; import BaseAction from '@/onebot/action/BaseAction'; import express, { Express, Request, Response } from 'express'; import http from 'http'; +import { NapCatCore } from '@/core'; +import { NapCatOneBot11Adapter } from '../main'; export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { private app: Express | undefined; @@ -12,16 +14,22 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { private actionMap: Map> = new Map(); private port: number; token: string; + coreContext: NapCatCore; + onebotContext: NapCatOneBot11Adapter; - constructor(port: number, token: string) { + constructor(port: number, token: string, coreContext: NapCatCore, onebotContext: NapCatOneBot11Adapter) { this.port = port; this.token = token; + this.coreContext = coreContext; + this.onebotContext = onebotContext; } registerAction, P, R>(action: T) { this.actionMap.set(action.actionName, action); } - + registerActionMap(actionMap: Map>) { + this.actionMap = actionMap; + } registerHeartBeat() { //空心跳 } @@ -32,7 +40,7 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { open() { if (this.hasBeenClosed) { - throw new Error('Cannot open a closed HTTP server'); + this.coreContext.context.logger.logError('Cannot open a closed HTTP server'); } if (!this.isOpen) { this.initializeServer(); @@ -46,10 +54,10 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { this.app.use(express.json()); - this.app.all('*', this.handleRequest.bind(this)); + this.app.all('/*', this.handleRequest.bind(this)); this.server.listen(this.port, () => { - console.log(`HTTP server listening on port ${this.port}`); + this.coreContext.context.logger.log(`HTTP server listening on port ${this.port}`); }); } diff --git a/src/onebot/network/passive-websocket.ts b/src/onebot/network/passive-websocket.ts index 75c6f9fd..5e2e9934 100644 --- a/src/onebot/network/passive-websocket.ts +++ b/src/onebot/network/passive-websocket.ts @@ -44,7 +44,9 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { }); }); } - + registerActionMap(actionMap: Map>) { + this.actionMap = actionMap; + } registerAction, P, R>(action: T) { this.actionMap.set(action.actionName, action); }