diff --git a/packages/core/src/middleware.ts b/packages/core/src/middleware.ts index c9635cdde4..28b804291b 100644 --- a/packages/core/src/middleware.ts +++ b/packages/core/src/middleware.ts @@ -32,6 +32,14 @@ export class SessionError extends Error { export type Next = (next?: Next.Callback) => Promise export type Middleware = (session: Session, next: Next) => Awaitable +export const Middleware = (prepend?: boolean) => (value: T, meta: ClassMethodDecoratorContext, ...args) => { + if (meta.kind !== 'method') return value + meta.addInitializer(function () { + (this[Context.current] as Context).middleware(value.bind(this), prepend) + }) + return value +} + export namespace Next { export const MAX_DEPTH = 64 @@ -80,7 +88,6 @@ export class Processor { defineProperty(this, Context.current, ctx) // bind built-in event listeners - this.middleware(this._process.bind(this), true) ctx.on('message', this._handleMessage.bind(this)) ctx.on('interaction/command', (session) => { @@ -219,6 +226,7 @@ export class Processor { } } + @Middleware(true) private async _process(session: Session, next: Next) { let atSelf = false, appel = false let content = session.content.trim()