import { Botist, IAdapter } from '../Botist'; import { Response } from '../Response'; import { ITextMessage, IImageMessage, IPollMessage, IMessage, MessageType } from '../Message.t'; import { IScene } from '../MainScene'; import { SceneContext } from '../SceneContext'; export declare type ISubscriberMatcher = (this: SceneContext, msg: M) => boolean; export declare type ISubscriberCallback = (this: SceneContext, msg: M, res: Response, next: () => void) => void; interface ISubscriberOptions { labels?: string[]; } interface IMessageInnerOptions extends Required { type: T; } export interface ITextSubscriber { matcher: ISubscriberMatcher | string | RegExp; callback: ISubscriberCallback; options: IMessageInnerOptions; } export interface IImageSubscriber { matcher: ISubscriberMatcher; callback: ISubscriberCallback; options: IMessageInnerOptions; } export interface IPollSubscriber { matcher: ISubscriberMatcher; callback: ISubscriberCallback; options: IMessageInnerOptions; } export declare type ISubscriber = ITextSubscriber | IImageSubscriber | IPollSubscriber; export interface ISubscribers { text: ITextSubscriber[]; image: IImageSubscriber[]; poll: IPollSubscriber[]; } export interface IMessageMiddleware { subscribers: ISubscribers; guard(scene: IScene, msg: IMessage): boolean; continue(scene: IScene, msg: IMessage): boolean; onMessage(adapter: IAdapter, scene: IScene, msg: IMessage, startHandlerIndex?: number): Promise; } export declare abstract class MessageMiddleware implements IMessageMiddleware { private botist; protected _subscribers: ISubscribers; get subscribers(): ISubscribers; constructor(botist: Botist); abstract subscribe(): void; text(matcher: ISubscriberMatcher | string | RegExp, callback: ISubscriberCallback, options?: ISubscriberOptions): void; poll(matcher: ISubscriberMatcher, callback: ISubscriberCallback, options?: ISubscriberOptions): void; /** * Determines the need to applying this middleware for scene and message. */ guard(_scene: IScene, _msg: IMessage): boolean; /** * Determines the need to call handlers of the next middleware. */ continue(_scene: IScene, _msg: IMessage): boolean; onMessage(adapter: IAdapter, scene: IScene, msg: IMessage, startSubscriberIndex?: number): Promise; private subscriber; } export {};