From 04f27aef7052b1baf6f10d4d65ac608aa754ffdd Mon Sep 17 00:00:00 2001 From: Shigma Date: Sun, 9 Jul 2023 22:13:51 +0800 Subject: [PATCH] feat(core): add simple middleware decorator --- packages/core/src/middleware.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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()