telegraf
Version:
Modern Telegram Bot Framework
53 lines (44 loc) • 1.28 kB
text/typescript
import { Middleware, MiddlewareFn } from '../middleware'
import Composer from '../composer'
import Context from '../context'
const { compose } = Composer
export interface SceneOptions<C extends Context> {
ttl?: number
handlers: ReadonlyArray<MiddlewareFn<C>>
enterHandlers: ReadonlyArray<MiddlewareFn<C>>
leaveHandlers: ReadonlyArray<MiddlewareFn<C>>
}
export class BaseScene<C extends Context = Context> extends Composer<C> {
id: string
ttl?: number
enterHandler: MiddlewareFn<C>
leaveHandler: MiddlewareFn<C>
constructor(id: string, options?: SceneOptions<C>) {
const opts: SceneOptions<C> = {
handlers: [],
enterHandlers: [],
leaveHandlers: [],
...options,
}
super(...opts.handlers)
this.id = id
this.ttl = opts.ttl
this.enterHandler = compose(opts.enterHandlers)
this.leaveHandler = compose(opts.leaveHandlers)
}
enter(...fns: Array<Middleware<C>>) {
this.enterHandler = compose([this.enterHandler, ...fns])
return this
}
leave(...fns: Array<Middleware<C>>) {
this.leaveHandler = compose([this.leaveHandler, ...fns])
return this
}
enterMiddleware() {
return this.enterHandler
}
leaveMiddleware() {
return this.leaveHandler
}
}
export default BaseScene