@mtcute/dispatcher 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -74,5 +74,5 @@ export declare class MessageContext extends Message implements UpdateContext<Mes
74
74
  /** Send a copy of this message (message group) */
75
75
  copy(params: SendCopyParams & SendCopyGroupParams): Promise<Message> | Promise<Message[]>;
76
76
  /** React to this message */
77
- react(params: OmitInputMessageId<Parameters<TelegramClient['sendReaction']>[0]>): Promise<Message>;
77
+ react(params: OmitInputMessageId<Parameters<TelegramClient['sendReaction']>[0]>): Promise<Message | null>;
78
78
  }
@@ -1,8 +1,8 @@
1
- import { BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, ParsedUpdate, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
1
+ import { BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, ParsedUpdate, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
2
2
  import { UpdateContext } from './context/base.js';
3
3
  import { CallbackQueryContext, ChatJoinRequestUpdateContext, ChosenInlineResultContext, InlineCallbackQueryContext, InlineQueryContext, MessageContext, PreCheckoutQueryContext } from './context/index.js';
4
4
  import { filters, UpdateFilter } from './filters/index.js';
5
- import { BotChatJoinRequestHandler, BotStoppedHandler, CallbackQueryHandler, ChatJoinRequestHandler, ChatMemberUpdateHandler, ChosenInlineResultHandler, DeleteMessageHandler, DeleteStoryHandler, EditMessageHandler, HistoryReadHandler, InlineCallbackQueryHandler, InlineQueryHandler, MessageGroupHandler, NewMessageHandler, PollUpdateHandler, PollVoteHandler, PreCheckoutQueryHandler, RawUpdateHandler, StoryUpdateHandler, UpdateHandler, UserStatusUpdateHandler, UserTypingHandler } from './handler.js';
5
+ import { BotChatJoinRequestHandler, BotReactionCountUpdateHandler, BotReactionUpdateHandler, BotStoppedHandler, CallbackQueryHandler, ChatJoinRequestHandler, ChatMemberUpdateHandler, ChosenInlineResultHandler, DeleteMessageHandler, DeleteStoryHandler, EditMessageHandler, HistoryReadHandler, InlineCallbackQueryHandler, InlineQueryHandler, MessageGroupHandler, NewMessageHandler, PollUpdateHandler, PollVoteHandler, PreCheckoutQueryHandler, RawUpdateHandler, StoryUpdateHandler, UpdateHandler, UserStatusUpdateHandler, UserTypingHandler } from './handler.js';
6
6
  import { PropagationAction } from './propagation.js';
7
7
  import { IStateStorage, StateKeyDelegate, UpdateState } from './state/index.js';
8
8
  export interface DispatcherParams {
@@ -654,4 +654,34 @@ export declare class Dispatcher<State extends object = never> {
654
654
  * @param group Handler group index
655
655
  */
656
656
  onDeleteStory<Mod>(filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>, handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'], group?: number): void;
657
+ /**
658
+ * Register a bot reaction update handler without any filters
659
+ *
660
+ * @param handler Bot reaction update handler
661
+ * @param group Handler group index
662
+ */
663
+ onBotReactionUpdate(handler: BotReactionUpdateHandler['callback'], group?: number): void;
664
+ /**
665
+ * Register a bot reaction update handler with a filter
666
+ *
667
+ * @param filter Update filter
668
+ * @param handler Bot reaction update handler
669
+ * @param group Handler group index
670
+ */
671
+ onBotReactionUpdate<Mod>(filter: UpdateFilter<UpdateContext<BotReactionUpdate>, Mod>, handler: BotReactionUpdateHandler<filters.Modify<UpdateContext<BotReactionUpdate>, Mod>>['callback'], group?: number): void;
672
+ /**
673
+ * Register a bot reaction count update handler without any filters
674
+ *
675
+ * @param handler Bot reaction count update handler
676
+ * @param group Handler group index
677
+ */
678
+ onBotReactionCountUpdate(handler: BotReactionCountUpdateHandler['callback'], group?: number): void;
679
+ /**
680
+ * Register a bot reaction count update handler with a filter
681
+ *
682
+ * @param filter Update filter
683
+ * @param handler Bot reaction count update handler
684
+ * @param group Handler group index
685
+ */
686
+ onBotReactionCountUpdate<Mod>(filter: UpdateFilter<UpdateContext<BotReactionCountUpdate>, Mod>, handler: BotReactionCountUpdateHandler<filters.Modify<UpdateContext<BotReactionCountUpdate>, Mod>>['callback'], group?: number): void;
657
687
  }
package/cjs/dispatcher.js CHANGED
@@ -813,6 +813,14 @@ class Dispatcher {
813
813
  onDeleteStory(filter, handler, group) {
814
814
  this._addKnownHandler('delete_story', filter, handler, group);
815
815
  }
816
+ /** @internal */
817
+ onBotReactionUpdate(filter, handler, group) {
818
+ this._addKnownHandler('bot_reaction', filter, handler, group);
819
+ }
820
+ /** @internal */
821
+ onBotReactionCountUpdate(filter, handler, group) {
822
+ this._addKnownHandler('bot_reaction_count', filter, handler, group);
823
+ }
816
824
  }
817
825
  exports.Dispatcher = Dispatcher;
818
826
  //# sourceMappingURL=dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/unified-signatures,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,max-depth,dot-notation */\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types */\n// ^^ will be looked into in MTQ-29\n\nimport {\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n MtArgumentError,\n ParsedUpdate,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { _parsedUpdateToContext, UpdateContextType } from './context/parse.js'\nimport { filters, UpdateFilter } from './filters/index.js'\n// begin-codegen-imports\nimport {\n BotChatJoinRequestHandler,\n BotStoppedHandler,\n CallbackQueryHandler,\n ChatJoinRequestHandler,\n ChatMemberUpdateHandler,\n ChosenInlineResultHandler,\n DeleteMessageHandler,\n DeleteStoryHandler,\n EditMessageHandler,\n HistoryReadHandler,\n InlineCallbackQueryHandler,\n InlineQueryHandler,\n MessageGroupHandler,\n NewMessageHandler,\n PollUpdateHandler,\n PollVoteHandler,\n PreCheckoutQueryHandler,\n RawUpdateHandler,\n StoryUpdateHandler,\n UpdateHandler,\n UserStatusUpdateHandler,\n UserTypingHandler,\n} from './handler.js'\n// end-codegen-imports\nimport { PropagationAction } from './propagation.js'\nimport {\n defaultStateKeyDelegate,\n isCompatibleStorage,\n IStateStorage,\n StateKeyDelegate,\n UpdateState,\n} from './state/index.js'\n\nexport interface DispatcherParams {\n /**\n * If this dispatcher can be used as a scene, its unique name.\n *\n * Should not be set manually, use {@link Dispatcher.scene} instead\n */\n sceneName?: string\n\n /**\n * Custom storage for this dispatcher and its children.\n *\n * @default Client's storage\n */\n storage?: IStateStorage\n\n /**\n * Custom key delegate for the dispatcher.\n */\n key?: StateKeyDelegate\n}\n\n/**\n * Updates dispatcher\n */\nexport class Dispatcher<State extends object = never> {\n private _groups: Map<number, Map<UpdateHandler['name'], UpdateHandler[]>> = new Map()\n private _groupsOrder: number[] = []\n\n private _client?: TelegramClient\n\n private _parent?: Dispatcher<any>\n private _children: Dispatcher<any>[] = []\n\n private _scenes?: Map<string, Dispatcher<any>>\n private _scene?: string\n private _sceneScoped?: boolean\n\n private _storage?: State extends never ? undefined : IStateStorage\n private _stateKeyDelegate?: State extends never ? undefined : StateKeyDelegate\n\n private _customStateKeyDelegate?: StateKeyDelegate\n private _customStorage?: IStateStorage\n\n private _errorHandler?: <T = {}>(\n err: Error,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<boolean>\n\n private _preUpdateHandler?: <T = {}>(\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<PropagationAction | void>\n\n private _postUpdateHandler?: <T = {}>(\n handled: boolean,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<void>\n\n protected constructor(client?: TelegramClient, params?: DispatcherParams) {\n this.dispatchRawUpdate = this.dispatchRawUpdate.bind(this)\n this.dispatchUpdate = this.dispatchUpdate.bind(this)\n this._onClientBeforeConnect = this._onClientBeforeConnect.bind(this)\n this._onClientBeforeClose = this._onClientBeforeClose.bind(this)\n\n // eslint-disable-next-line prefer-const\n let { storage, key, sceneName } = params ?? {}\n\n if (client) {\n this.bindToClient(client)\n\n if (!storage) {\n const _storage = client.storage\n\n if (!isCompatibleStorage(_storage)) {\n throw new MtArgumentError(\n 'Storage used by the client is not compatible with the dispatcher. Please provide a compatible storage manually',\n )\n }\n\n storage = _storage\n }\n\n if (storage) {\n this._storage = storage as any\n this._stateKeyDelegate = (key ?? defaultStateKeyDelegate) as any\n }\n } else {\n // child dispatcher without client\n\n if (storage) {\n this._customStorage = storage as any\n }\n\n if (key) {\n this._customStateKeyDelegate = key as any\n }\n\n if (sceneName) {\n if (sceneName[0] === '$') {\n throw new MtArgumentError('Scene name cannot start with $')\n }\n\n this._scene = sceneName\n }\n }\n }\n\n /**\n * Create a new dispatcher and bind it to the client.\n */\n static for<State extends object = never>(client: TelegramClient, params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(client, params)\n }\n\n /**\n * Create a new child dispatcher.\n */\n static child<State extends object = never>(params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(undefined, params)\n }\n\n /**\n * Create a new scene dispatcher\n */\n static scene<State extends object = Record<never, never>>(\n name: string,\n params?: Omit<DispatcherParams, 'sceneName'>,\n ): Dispatcher<State> {\n return new Dispatcher<State>(undefined, { sceneName: name, ...params })\n }\n\n /** For scene dispatchers, name of the scene */\n get sceneName(): string | undefined {\n return this._scene\n }\n\n private _onClientBeforeConnect() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.load?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.load?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeConnect()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeConnect()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n private _onClientBeforeClose() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.save?.()\n await this._storage.destroy?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.save?.()\n await this._customStorage.destroy?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeClose()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeClose()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Bind the dispatcher to the client.\n * Called by the constructor automatically if\n * `client` was passed.\n *\n * Dispatcher also uses bound client to throw errors\n */\n bindToClient(client: TelegramClient): void {\n client.on('update', this.dispatchUpdate)\n client.on('raw_update', this.dispatchRawUpdate)\n client.on('before_connect', this._onClientBeforeConnect)\n client.on('before_close', this._onClientBeforeClose)\n\n this._client = client\n }\n\n /**\n * Unbind a dispatcher from the client.\n */\n unbind(): void {\n if (this._client) {\n this._client.off('update', this.dispatchUpdate)\n this._client.off('raw_update', this.dispatchRawUpdate)\n this._client.off('before_connect', this._onClientBeforeConnect)\n this._client.off('before_close', this._onClientBeforeClose)\n\n this._client = undefined\n }\n }\n\n /**\n * Process a raw update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchRawUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n * @param peers Peers index\n */\n dispatchRawUpdate(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchRawUpdateNow(update, peers).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process a raw update right now in the current stack.\n *\n * Unlike {@link dispatchRawUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @param peers Peers map\n * @returns Whether the update was handled\n */\n async dispatchRawUpdateNow(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): Promise<boolean> {\n if (!this._client) return false\n\n let handled = false\n\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has('raw')) {\n const handlers = group.get('raw')! as RawUpdateHandler[]\n\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!h.check || (await h.check(this._client, update, peers))) {\n result = await h.callback(this._client, update, peers)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n return handled\n }\n\n break\n }\n }\n }\n\n for (const child of this._children) {\n const childHandled = await child.dispatchRawUpdateNow(update, peers)\n handled ||= childHandled\n }\n\n return handled\n }\n\n /**\n * Process an update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n */\n dispatchUpdate(update: ParsedUpdate): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchUpdateNow(update).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process an update right now in the current stack.\n *\n * Unlike {@link dispatchUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @returns Whether the update was handled\n */\n async dispatchUpdateNow(update: ParsedUpdate): Promise<boolean> {\n return this._dispatchUpdateNowImpl(update)\n }\n\n private async _dispatchUpdateNowImpl(\n update: ParsedUpdate,\n // this is getting a bit crazy lol\n parsedState?: UpdateState<State> | null,\n parsedScene?: string | null,\n forceScene?: true,\n parsedContext?: UpdateContextType,\n ): Promise<boolean> {\n if (!this._client) return false\n\n if (parsedScene === undefined) {\n if (\n this._storage &&\n this._scenes &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n // no need to fetch scene if there are no registered scenes\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n parsedScene = await this._storage.getCurrentScene(key)\n } else {\n parsedScene = null\n }\n } else {\n parsedScene = null\n }\n }\n\n if (!forceScene && parsedScene !== null) {\n if (this._scene) {\n if (this._scene !== parsedScene) {\n // should not happen, but just in case\n return false\n }\n } else {\n if (!this._scenes || !this._scenes.has(parsedScene)) {\n // not registered scene\n return false\n }\n\n return this._scenes.get(parsedScene)!._dispatchUpdateNowImpl(update, parsedState, parsedScene, true)\n }\n }\n\n if (parsedState === undefined) {\n if (\n this._storage &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n let customKey\n\n if (\n !this._customStateKeyDelegate ||\n (customKey = await this._customStateKeyDelegate(parsedContext as any))\n ) {\n parsedState = new UpdateState(\n this._storage,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n }\n } else {\n parsedState = null\n }\n } else {\n parsedState = null\n }\n }\n\n let shouldDispatch = true\n let shouldDispatchChildren = true\n let handled = false\n\n switch (await this._preUpdateHandler?.(update, parsedState as any)) {\n case 'stop':\n shouldDispatch = false\n break\n case 'stop-children':\n return false\n }\n\n if (shouldDispatch) {\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has(update.name)) {\n // raw is not handled here, so we can safely assume this\n const handlers = group.get(update.name)! as Exclude<UpdateHandler, RawUpdateHandler>[]\n\n try {\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n if (!h.check || (await h.check(parsedContext as any, parsedState as never))) {\n result = await h.callback(parsedContext as any, parsedState as never)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n shouldDispatchChildren = false\n break outer\n\n case 'scene': {\n if (!parsedState) {\n throw new MtArgumentError('Cannot use ToScene without state')\n }\n\n const scene = parsedState['_scene']\n\n if (!scene) {\n throw new MtArgumentError('Cannot use ToScene without entering a scene')\n }\n\n return this._scenes!.get(scene)!._dispatchUpdateNowImpl(\n update,\n undefined,\n scene,\n true,\n )\n }\n }\n\n break\n }\n } catch (e: any) {\n if (this._errorHandler) {\n const handled = await this._errorHandler(e, update, parsedState as never)\n if (!handled) throw e\n } else {\n throw e\n }\n }\n }\n }\n }\n\n if (shouldDispatchChildren) {\n for (const child of this._children) {\n const childHandled = await child._dispatchUpdateNowImpl(update)\n handled ||= childHandled\n }\n }\n\n await this._postUpdateHandler?.(handled, update, parsedState as any)\n\n return handled\n }\n\n /**\n * Add an update handler to a given handlers group\n *\n * @param handler Update handler\n * @param group Handler group index\n */\n addUpdateHandler(handler: UpdateHandler, group = 0): void {\n if (!this._groups.has(group)) {\n this._groups.set(group, new Map())\n this._groupsOrder.push(group)\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n if (!this._groups.get(group)!.has(handler.name)) {\n this._groups.get(group)!.set(handler.name, [])\n }\n\n this._groups.get(group)!.get(handler.name)!.push(handler)\n }\n\n /**\n * Remove an update handler (or handlers) from a given\n * handler group.\n *\n * @param handler Update handler to remove, its name or `'all'` to remove all\n * @param group Handler group index (null to affect all groups)\n */\n removeUpdateHandler(handler: UpdateHandler | UpdateHandler['name'] | 'all', group: number | null = 0): void {\n if (group !== null && !this._groups.has(group)) {\n return\n }\n\n if (typeof handler === 'string') {\n if (handler === 'all') {\n if (group === null) {\n this._groups = new Map()\n } else {\n this._groups.delete(group)\n }\n } else if (group !== null) {\n this._groups.get(group)!.delete(handler)\n }\n\n return\n }\n\n if (group === null) return\n\n if (!this._groups.get(group)!.has(handler.name)) {\n return\n }\n\n const idx = this._groups.get(group)!.get(handler.name)!.indexOf(handler)\n\n if (idx > -1) {\n this._groups.get(group)!.get(handler.name)!.splice(idx, 1)\n }\n }\n\n /**\n * Register an error handler.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) whenever\n * an error is thrown inside an update handler.\n * Not used for raw update handlers\n *\n * When an error is thrown, but there is no error\n * handler, it is propagated to `TelegramClient`.\n *\n * There can be at most one error handler.\n * Pass `null` to remove it.\n *\n * @param handler Error handler\n */\n onError<T = {}>(\n handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<boolean>) | null,\n ): void {\n if (handler) this._errorHandler = handler\n else this._errorHandler = undefined\n }\n\n /**\n * Register pre-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) before processing\n * an update, and can be used to skip this update.\n *\n * There can be at most one pre-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPreUpdate<T = {}>(\n handler:\n | ((update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<PropagationAction | void>)\n | null,\n ): void {\n if (handler) this._preUpdateHandler = handler\n else this._preUpdateHandler = undefined\n }\n\n /**\n * Register post-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) after successfully\n * processing an update, and can be used for stats.\n *\n * There can be at most one post-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPostUpdate<T = {}>(\n handler: ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<void>) | null,\n ): void {\n if (handler) this._postUpdateHandler = handler\n else this._postUpdateHandler = undefined\n }\n\n /**\n * Set error handler that will propagate\n * the error to the parent dispatcher\n */\n propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState<State>): MaybeAsync<boolean> {\n if (!this.parent) {\n throw new MtArgumentError('This dispatcher is not a child')\n }\n\n if (this.parent._errorHandler) {\n return this.parent._errorHandler(err, update, state as any)\n }\n throw err\n }\n\n // children //\n\n /**\n * Get parent dispatcher if current dispatcher is a child.\n * Otherwise, return `null`\n */\n get parent(): Dispatcher<any> | null {\n return this._parent ?? null\n }\n\n private _prepareChild(child: Dispatcher<any>): void {\n if (child._client) {\n throw new MtArgumentError(\n 'Provided dispatcher is ' +\n (child._parent ?\n 'already a child. Use parent.removeChild() before calling addChild()' :\n 'already bound to a client. Use unbind() before calling addChild()'),\n )\n }\n\n child._parent = this as any\n child._client = this._client\n child._storage = this._storage\n child._stateKeyDelegate = this._stateKeyDelegate\n child._customStorage ??= this._customStorage\n child._customStateKeyDelegate ??= this._customStateKeyDelegate\n }\n\n /**\n * Add a child dispatcher.\n *\n * Child dispatchers are called when dispatching updates\n * just like normal, except they can be controlled\n * externally. Additionally, child dispatcher have their own\n * independent handler grouping that does not interfere with parent's,\n * including `StopPropagation` (i.e. returning `StopPropagation` will\n * still call children. To entirely stop, use `StopChildrenPropagation`)\n *\n * Note that child dispatchers share the same TelegramClient and\n * storage binding as the parent, don't bind them manually.\n *\n * @param child Other dispatcher\n */\n addChild(child: Dispatcher<State>): void {\n if (this._children.includes(child)) return\n\n this._prepareChild(child)\n this._children.push(child)\n }\n\n /**\n * Add a dispatcher as a scene with a non-scoped state.\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene\n */\n addScene(scene: Dispatcher<State>, scoped: false): void\n /**\n * Add a dispatcher as a scene with a scoped state\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene (defaults to `true`)\n */\n addScene(scene: Dispatcher<any>, scoped?: true): void\n addScene(scene: Dispatcher<any>, scoped = true): void {\n if (!this._scenes) this._scenes = new Map()\n\n if (!scene._scene) {\n throw new MtArgumentError(\n 'Non-scene dispatcher passed to addScene. Use `Dispatcher.scene()` to create one.',\n )\n }\n\n if (this._scenes.has(scene._scene)) {\n throw new MtArgumentError(`Scene with name ${scene._scene} is already registered!`)\n }\n\n this._prepareChild(scene)\n scene._sceneScoped = scoped\n this._scenes.set(scene._scene, scene)\n }\n\n /**\n * Remove a child dispatcher.\n *\n * Removing child dispatcher will also remove\n * child dispatcher's client binding.\n *\n * If the provided dispatcher is not a child of current,\n * this function will silently fail.\n *\n * @param child Other dispatcher\n */\n removeChild(child: Dispatcher<any>): void {\n const idx = this._children.indexOf(child)\n\n if (idx > -1) {\n child._unparent()\n this._children.splice(idx, 1)\n }\n }\n\n private _unparent(): void {\n this._parent = this._client = undefined\n ;(this as any)._stateKeyDelegate = undefined\n ;(this as any)._storage = undefined\n }\n\n /**\n * Extend current dispatcher by copying other dispatcher's\n * handlers and children to the current.\n *\n * This might be more efficient for simple cases, but do note that the handler\n * groups, children and scenes will get merged (unlike {@link addChild},\n * where they are independent). Also note that unlike with children,\n * when adding handlers to `other` *after* you extended\n * the current dispatcher, changes will not be applied.\n *\n * @param other Other dispatcher\n */\n extend(other: Dispatcher<State>): void {\n if (other._customStorage || other._customStateKeyDelegate) {\n throw new MtArgumentError('Provided dispatcher has custom storage and cannot be extended from.')\n }\n\n other._groupsOrder.forEach((group) => {\n if (!this._groups.has(group)) {\n this._groups.set(group, other._groups.get(group)!)\n this._groupsOrder.push(group)\n } else {\n const otherGrp = other._groups.get(group)!\n const selfGrp = this._groups.get(group)!\n\n for (const typ of otherGrp.keys()) {\n if (!selfGrp.has(typ)) {\n selfGrp.set(typ, otherGrp.get(typ)!)\n } else {\n // selfGrp[typ].push(...otherGrp[typ])\n selfGrp.get(typ)!.push(...otherGrp.get(typ)!)\n }\n }\n }\n })\n\n other._children.forEach((it) => {\n it._unparent()\n this.addChild(it as any)\n })\n\n if (other._scenes) {\n const otherScenes = other._scenes\n if (!this._scenes) this._scenes = new Map()\n const myScenes = this._scenes\n\n for (const key of otherScenes.keys()) {\n otherScenes.get(key)!._unparent()\n\n if (myScenes.has(key)) {\n // will be overwritten\n myScenes.delete(key)\n }\n\n this.addScene(otherScenes.get(key) as any, otherScenes.get(key)!._sceneScoped as any)\n }\n }\n\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n /**\n * Create a clone of this dispatcher, that has the same handlers,\n * but is not bound to a client or to a parent dispatcher.\n *\n * Custom Storage and key delegate are copied too.\n *\n * By default, child dispatchers (and scenes) are ignored, since\n * that requires cloning every single one of them recursively\n * and then binding them back.\n *\n * @param children Whether to also clone children and scenes\n */\n clone(children = false): Dispatcher<State> {\n const dp = new Dispatcher<State>()\n\n // copy handlers.\n for (const key of this._groups.keys()) {\n const idx = key as any as number\n\n dp._groups.set(idx, new Map())\n\n for (const type of this._groups.get(idx)!.keys()) {\n // dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!].get(type)!])\n dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!.get(type)!])\n }\n }\n\n dp._groupsOrder = [...this._groupsOrder]\n dp._errorHandler = this._errorHandler\n dp._customStateKeyDelegate = this._customStateKeyDelegate\n dp._customStorage = this._customStorage\n\n if (children) {\n this._children.forEach((it) => {\n const child = it.clone(true)\n dp.addChild(child as any)\n })\n\n if (this._scenes) {\n for (const key of this._scenes.keys()) {\n const scene = this._scenes.get(key)!.clone(true)\n dp.addScene(scene as any, this._scenes.get(key)!._sceneScoped as any)\n }\n }\n }\n\n return dp\n }\n\n /**\n * Get update state object for the given key.\n *\n * For custom keys, use prefix starting with `$` to avoid\n * clashing with other keys (scene name can't start with `$`)\n *\n * @param key State storage key\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(key: string): UpdateState<S>\n\n /**\n * Get update state object for the given object.\n *\n * Equivalent to `getState(string)`, but derives\n * the key with the registered {@link StateKeyDelegate},\n * and since it could be async, this method is async too.\n *\n * @param object Object for which the state should be fetched\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<S>>\n getState<S extends object = State>(object: string | Parameters<StateKeyDelegate>[0]): MaybeAsync<UpdateState<S>> {\n if (!this._storage) {\n throw new MtArgumentError('Cannot use getUpdateState() filter without state storage')\n }\n\n if (typeof object === 'string') {\n return new UpdateState(this._storage, object, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n if (!this._customStateKeyDelegate) {\n return new UpdateState(this._storage!, key, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._customStateKeyDelegate(object)).then((customKey) => {\n if (!customKey) {\n throw new MtArgumentError('Cannot derive custom key from given object')\n }\n\n return new UpdateState(\n this._storage!,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n })\n })\n }\n\n /**\n * Get global state.\n *\n * This will load the state for the given object\n * ignoring local custom storage, key delegate and scene scope.\n */\n getGlobalState<T extends object>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<T>> {\n if (!this._parent) {\n throw new MtArgumentError('This dispatcher does not have a parent')\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n return new UpdateState(this._storage!, key, this._scene ?? null, false)\n })\n }\n\n // addUpdateHandler convenience wrappers //\n\n private _addKnownHandler(name: UpdateHandler['name'], filter: any, handler?: any, group?: number): void {\n if (typeof handler === 'number' || typeof handler === 'undefined') {\n this.addUpdateHandler(\n {\n name,\n callback: filter,\n },\n handler,\n )\n } else {\n this.addUpdateHandler(\n {\n name,\n callback: handler,\n check: filter,\n },\n group,\n )\n }\n }\n\n /**\n * Register a raw update handler without any filters\n *\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(handler: RawUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a raw update handler without any filters\n *\n * @param filter Update filter\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(filter: RawUpdateHandler['check'], handler: RawUpdateHandler['callback'], group?: number): void\n\n /** @internal */\n onRawUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('raw', filter, handler, group)\n }\n\n // begin-codegen\n\n /**\n * Register a new message handler without any filters\n *\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage(\n handler: NewMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onNewMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('new_message', filter, handler, group)\n }\n\n /**\n * Register an edit message handler without any filters\n *\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage(\n handler: EditMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onEditMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('edit_message', filter, handler, group)\n }\n\n /**\n * Register a message group handler without any filters\n *\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup(\n handler: MessageGroupHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onMessageGroup(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('message_group', filter, handler, group)\n }\n\n /**\n * Register a delete message handler without any filters\n *\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage(handler: DeleteMessageHandler['callback'], group?: number): void\n\n /**\n * Register a delete message handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteMessageUpdate>, Mod>,\n handler: DeleteMessageHandler<filters.Modify<UpdateContext<DeleteMessageUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_message', filter, handler, group)\n }\n\n /**\n * Register a chat member update handler without any filters\n *\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate(handler: ChatMemberUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a chat member update handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<ChatMemberUpdate>, Mod>,\n handler: ChatMemberUpdateHandler<filters.Modify<UpdateContext<ChatMemberUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatMemberUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_member', filter, handler, group)\n }\n\n /**\n * Register an inline query handler without any filters\n *\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery(handler: InlineQueryHandler['callback'], group?: number): void\n\n /**\n * Register an inline query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery<Mod>(\n filter: UpdateFilter<InlineQueryContext, Mod>,\n handler: InlineQueryHandler<filters.Modify<InlineQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_query', filter, handler, group)\n }\n\n /**\n * Register a chosen inline result handler without any filters\n *\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult(handler: ChosenInlineResultHandler['callback'], group?: number): void\n\n /**\n * Register a chosen inline result handler with a filter\n *\n * @param filter Update filter\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult<Mod>(\n filter: UpdateFilter<ChosenInlineResultContext, Mod>,\n handler: ChosenInlineResultHandler<filters.Modify<ChosenInlineResultContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChosenInlineResult(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chosen_inline_result', filter, handler, group)\n }\n\n /**\n * Register a callback query handler without any filters\n *\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery(\n handler: CallbackQueryHandler<\n CallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod, State>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('callback_query', filter, handler, group)\n }\n\n /**\n * Register an inline callback query handler without any filters\n *\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery(\n handler: InlineCallbackQueryHandler<\n InlineCallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod, State>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_callback_query', filter, handler, group)\n }\n\n /**\n * Register a poll update handler without any filters\n *\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate(handler: PollUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a poll update handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<PollUpdate>, Mod>,\n handler: PollUpdateHandler<filters.Modify<UpdateContext<PollUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll', filter, handler, group)\n }\n\n /**\n * Register a poll vote handler without any filters\n *\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote(handler: PollVoteHandler['callback'], group?: number): void\n\n /**\n * Register a poll vote handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote<Mod>(\n filter: UpdateFilter<UpdateContext<PollVoteUpdate>, Mod>,\n handler: PollVoteHandler<filters.Modify<UpdateContext<PollVoteUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollVote(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll_vote', filter, handler, group)\n }\n\n /**\n * Register an user status update handler without any filters\n *\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate(handler: UserStatusUpdateHandler['callback'], group?: number): void\n\n /**\n * Register an user status update handler with a filter\n *\n * @param filter Update filter\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<UserStatusUpdate>, Mod>,\n handler: UserStatusUpdateHandler<filters.Modify<UpdateContext<UserStatusUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserStatusUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_status', filter, handler, group)\n }\n\n /**\n * Register an user typing handler without any filters\n *\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping(handler: UserTypingHandler['callback'], group?: number): void\n\n /**\n * Register an user typing handler with a filter\n *\n * @param filter Update filter\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping<Mod>(\n filter: UpdateFilter<UpdateContext<UserTypingUpdate>, Mod>,\n handler: UserTypingHandler<filters.Modify<UpdateContext<UserTypingUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserTyping(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_typing', filter, handler, group)\n }\n\n /**\n * Register a history read handler without any filters\n *\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead(handler: HistoryReadHandler['callback'], group?: number): void\n\n /**\n * Register a history read handler with a filter\n *\n * @param filter Update filter\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead<Mod>(\n filter: UpdateFilter<UpdateContext<HistoryReadUpdate>, Mod>,\n handler: HistoryReadHandler<filters.Modify<UpdateContext<HistoryReadUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onHistoryRead(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('history_read', filter, handler, group)\n }\n\n /**\n * Register a bot stopped handler without any filters\n *\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped(handler: BotStoppedHandler['callback'], group?: number): void\n\n /**\n * Register a bot stopped handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped<Mod>(\n filter: UpdateFilter<UpdateContext<BotStoppedUpdate>, Mod>,\n handler: BotStoppedHandler<filters.Modify<UpdateContext<BotStoppedUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotStopped(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_stopped', filter, handler, group)\n }\n\n /**\n * Register a bot chat join request handler without any filters\n *\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest(handler: BotChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a bot chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest<Mod>(\n filter: UpdateFilter<ChatJoinRequestUpdateContext, Mod>,\n handler: BotChatJoinRequestHandler<filters.Modify<ChatJoinRequestUpdateContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a chat join request handler without any filters\n *\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest(handler: ChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest<Mod>(\n filter: UpdateFilter<UpdateContext<ChatJoinRequestUpdate>, Mod>,\n handler: ChatJoinRequestHandler<filters.Modify<UpdateContext<ChatJoinRequestUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a pre checkout query handler without any filters\n *\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery(handler: PreCheckoutQueryHandler['callback'], group?: number): void\n\n /**\n * Register a pre checkout query handler with a filter\n *\n * @param filter Update filter\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery<Mod>(\n filter: UpdateFilter<PreCheckoutQueryContext, Mod>,\n handler: PreCheckoutQueryHandler<filters.Modify<PreCheckoutQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPreCheckoutQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('pre_checkout_query', filter, handler, group)\n }\n\n /**\n * Register a story update handler without any filters\n *\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate(handler: StoryUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a story update handler with a filter\n *\n * @param filter Update filter\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<StoryUpdate>, Mod>,\n handler: StoryUpdateHandler<filters.Modify<UpdateContext<StoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onStoryUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('story', filter, handler, group)\n }\n\n /**\n * Register a delete story handler without any filters\n *\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory(handler: DeleteStoryHandler['callback'], group?: number): void\n\n /**\n * Register a delete story handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>,\n handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteStory(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_story', filter, handler, group)\n }\n\n // end-codegen\n}\n"]}
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/unified-signatures,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,max-depth,dot-notation */\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types */\n// ^^ will be looked into in MTQ-29\n\nimport {\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n MtArgumentError,\n ParsedUpdate,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { _parsedUpdateToContext, UpdateContextType } from './context/parse.js'\nimport { filters, UpdateFilter } from './filters/index.js'\n// begin-codegen-imports\nimport {\n BotChatJoinRequestHandler,\n BotReactionCountUpdateHandler,\n BotReactionUpdateHandler,\n BotStoppedHandler,\n CallbackQueryHandler,\n ChatJoinRequestHandler,\n ChatMemberUpdateHandler,\n ChosenInlineResultHandler,\n DeleteMessageHandler,\n DeleteStoryHandler,\n EditMessageHandler,\n HistoryReadHandler,\n InlineCallbackQueryHandler,\n InlineQueryHandler,\n MessageGroupHandler,\n NewMessageHandler,\n PollUpdateHandler,\n PollVoteHandler,\n PreCheckoutQueryHandler,\n RawUpdateHandler,\n StoryUpdateHandler,\n UpdateHandler,\n UserStatusUpdateHandler,\n UserTypingHandler,\n} from './handler.js'\n// end-codegen-imports\nimport { PropagationAction } from './propagation.js'\nimport {\n defaultStateKeyDelegate,\n isCompatibleStorage,\n IStateStorage,\n StateKeyDelegate,\n UpdateState,\n} from './state/index.js'\n\nexport interface DispatcherParams {\n /**\n * If this dispatcher can be used as a scene, its unique name.\n *\n * Should not be set manually, use {@link Dispatcher.scene} instead\n */\n sceneName?: string\n\n /**\n * Custom storage for this dispatcher and its children.\n *\n * @default Client's storage\n */\n storage?: IStateStorage\n\n /**\n * Custom key delegate for the dispatcher.\n */\n key?: StateKeyDelegate\n}\n\n/**\n * Updates dispatcher\n */\nexport class Dispatcher<State extends object = never> {\n private _groups: Map<number, Map<UpdateHandler['name'], UpdateHandler[]>> = new Map()\n private _groupsOrder: number[] = []\n\n private _client?: TelegramClient\n\n private _parent?: Dispatcher<any>\n private _children: Dispatcher<any>[] = []\n\n private _scenes?: Map<string, Dispatcher<any>>\n private _scene?: string\n private _sceneScoped?: boolean\n\n private _storage?: State extends never ? undefined : IStateStorage\n private _stateKeyDelegate?: State extends never ? undefined : StateKeyDelegate\n\n private _customStateKeyDelegate?: StateKeyDelegate\n private _customStorage?: IStateStorage\n\n private _errorHandler?: <T = {}>(\n err: Error,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<boolean>\n\n private _preUpdateHandler?: <T = {}>(\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<PropagationAction | void>\n\n private _postUpdateHandler?: <T = {}>(\n handled: boolean,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<void>\n\n protected constructor(client?: TelegramClient, params?: DispatcherParams) {\n this.dispatchRawUpdate = this.dispatchRawUpdate.bind(this)\n this.dispatchUpdate = this.dispatchUpdate.bind(this)\n this._onClientBeforeConnect = this._onClientBeforeConnect.bind(this)\n this._onClientBeforeClose = this._onClientBeforeClose.bind(this)\n\n // eslint-disable-next-line prefer-const\n let { storage, key, sceneName } = params ?? {}\n\n if (client) {\n this.bindToClient(client)\n\n if (!storage) {\n const _storage = client.storage\n\n if (!isCompatibleStorage(_storage)) {\n throw new MtArgumentError(\n 'Storage used by the client is not compatible with the dispatcher. Please provide a compatible storage manually',\n )\n }\n\n storage = _storage\n }\n\n if (storage) {\n this._storage = storage as any\n this._stateKeyDelegate = (key ?? defaultStateKeyDelegate) as any\n }\n } else {\n // child dispatcher without client\n\n if (storage) {\n this._customStorage = storage as any\n }\n\n if (key) {\n this._customStateKeyDelegate = key as any\n }\n\n if (sceneName) {\n if (sceneName[0] === '$') {\n throw new MtArgumentError('Scene name cannot start with $')\n }\n\n this._scene = sceneName\n }\n }\n }\n\n /**\n * Create a new dispatcher and bind it to the client.\n */\n static for<State extends object = never>(client: TelegramClient, params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(client, params)\n }\n\n /**\n * Create a new child dispatcher.\n */\n static child<State extends object = never>(params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(undefined, params)\n }\n\n /**\n * Create a new scene dispatcher\n */\n static scene<State extends object = Record<never, never>>(\n name: string,\n params?: Omit<DispatcherParams, 'sceneName'>,\n ): Dispatcher<State> {\n return new Dispatcher<State>(undefined, { sceneName: name, ...params })\n }\n\n /** For scene dispatchers, name of the scene */\n get sceneName(): string | undefined {\n return this._scene\n }\n\n private _onClientBeforeConnect() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.load?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.load?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeConnect()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeConnect()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n private _onClientBeforeClose() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.save?.()\n await this._storage.destroy?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.save?.()\n await this._customStorage.destroy?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeClose()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeClose()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Bind the dispatcher to the client.\n * Called by the constructor automatically if\n * `client` was passed.\n *\n * Dispatcher also uses bound client to throw errors\n */\n bindToClient(client: TelegramClient): void {\n client.on('update', this.dispatchUpdate)\n client.on('raw_update', this.dispatchRawUpdate)\n client.on('before_connect', this._onClientBeforeConnect)\n client.on('before_close', this._onClientBeforeClose)\n\n this._client = client\n }\n\n /**\n * Unbind a dispatcher from the client.\n */\n unbind(): void {\n if (this._client) {\n this._client.off('update', this.dispatchUpdate)\n this._client.off('raw_update', this.dispatchRawUpdate)\n this._client.off('before_connect', this._onClientBeforeConnect)\n this._client.off('before_close', this._onClientBeforeClose)\n\n this._client = undefined\n }\n }\n\n /**\n * Process a raw update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchRawUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n * @param peers Peers index\n */\n dispatchRawUpdate(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchRawUpdateNow(update, peers).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process a raw update right now in the current stack.\n *\n * Unlike {@link dispatchRawUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @param peers Peers map\n * @returns Whether the update was handled\n */\n async dispatchRawUpdateNow(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): Promise<boolean> {\n if (!this._client) return false\n\n let handled = false\n\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has('raw')) {\n const handlers = group.get('raw')! as RawUpdateHandler[]\n\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!h.check || (await h.check(this._client, update, peers))) {\n result = await h.callback(this._client, update, peers)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n return handled\n }\n\n break\n }\n }\n }\n\n for (const child of this._children) {\n const childHandled = await child.dispatchRawUpdateNow(update, peers)\n handled ||= childHandled\n }\n\n return handled\n }\n\n /**\n * Process an update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n */\n dispatchUpdate(update: ParsedUpdate): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchUpdateNow(update).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process an update right now in the current stack.\n *\n * Unlike {@link dispatchUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @returns Whether the update was handled\n */\n async dispatchUpdateNow(update: ParsedUpdate): Promise<boolean> {\n return this._dispatchUpdateNowImpl(update)\n }\n\n private async _dispatchUpdateNowImpl(\n update: ParsedUpdate,\n // this is getting a bit crazy lol\n parsedState?: UpdateState<State> | null,\n parsedScene?: string | null,\n forceScene?: true,\n parsedContext?: UpdateContextType,\n ): Promise<boolean> {\n if (!this._client) return false\n\n if (parsedScene === undefined) {\n if (\n this._storage &&\n this._scenes &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n // no need to fetch scene if there are no registered scenes\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n parsedScene = await this._storage.getCurrentScene(key)\n } else {\n parsedScene = null\n }\n } else {\n parsedScene = null\n }\n }\n\n if (!forceScene && parsedScene !== null) {\n if (this._scene) {\n if (this._scene !== parsedScene) {\n // should not happen, but just in case\n return false\n }\n } else {\n if (!this._scenes || !this._scenes.has(parsedScene)) {\n // not registered scene\n return false\n }\n\n return this._scenes.get(parsedScene)!._dispatchUpdateNowImpl(update, parsedState, parsedScene, true)\n }\n }\n\n if (parsedState === undefined) {\n if (\n this._storage &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n let customKey\n\n if (\n !this._customStateKeyDelegate ||\n (customKey = await this._customStateKeyDelegate(parsedContext as any))\n ) {\n parsedState = new UpdateState(\n this._storage,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n }\n } else {\n parsedState = null\n }\n } else {\n parsedState = null\n }\n }\n\n let shouldDispatch = true\n let shouldDispatchChildren = true\n let handled = false\n\n switch (await this._preUpdateHandler?.(update, parsedState as any)) {\n case 'stop':\n shouldDispatch = false\n break\n case 'stop-children':\n return false\n }\n\n if (shouldDispatch) {\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has(update.name)) {\n // raw is not handled here, so we can safely assume this\n const handlers = group.get(update.name)! as Exclude<UpdateHandler, RawUpdateHandler>[]\n\n try {\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n if (!h.check || (await h.check(parsedContext as any, parsedState as never))) {\n result = await h.callback(parsedContext as any, parsedState as never)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n shouldDispatchChildren = false\n break outer\n\n case 'scene': {\n if (!parsedState) {\n throw new MtArgumentError('Cannot use ToScene without state')\n }\n\n const scene = parsedState['_scene']\n\n if (!scene) {\n throw new MtArgumentError('Cannot use ToScene without entering a scene')\n }\n\n return this._scenes!.get(scene)!._dispatchUpdateNowImpl(\n update,\n undefined,\n scene,\n true,\n )\n }\n }\n\n break\n }\n } catch (e: any) {\n if (this._errorHandler) {\n const handled = await this._errorHandler(e, update, parsedState as never)\n if (!handled) throw e\n } else {\n throw e\n }\n }\n }\n }\n }\n\n if (shouldDispatchChildren) {\n for (const child of this._children) {\n const childHandled = await child._dispatchUpdateNowImpl(update)\n handled ||= childHandled\n }\n }\n\n await this._postUpdateHandler?.(handled, update, parsedState as any)\n\n return handled\n }\n\n /**\n * Add an update handler to a given handlers group\n *\n * @param handler Update handler\n * @param group Handler group index\n */\n addUpdateHandler(handler: UpdateHandler, group = 0): void {\n if (!this._groups.has(group)) {\n this._groups.set(group, new Map())\n this._groupsOrder.push(group)\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n if (!this._groups.get(group)!.has(handler.name)) {\n this._groups.get(group)!.set(handler.name, [])\n }\n\n this._groups.get(group)!.get(handler.name)!.push(handler)\n }\n\n /**\n * Remove an update handler (or handlers) from a given\n * handler group.\n *\n * @param handler Update handler to remove, its name or `'all'` to remove all\n * @param group Handler group index (null to affect all groups)\n */\n removeUpdateHandler(handler: UpdateHandler | UpdateHandler['name'] | 'all', group: number | null = 0): void {\n if (group !== null && !this._groups.has(group)) {\n return\n }\n\n if (typeof handler === 'string') {\n if (handler === 'all') {\n if (group === null) {\n this._groups = new Map()\n } else {\n this._groups.delete(group)\n }\n } else if (group !== null) {\n this._groups.get(group)!.delete(handler)\n }\n\n return\n }\n\n if (group === null) return\n\n if (!this._groups.get(group)!.has(handler.name)) {\n return\n }\n\n const idx = this._groups.get(group)!.get(handler.name)!.indexOf(handler)\n\n if (idx > -1) {\n this._groups.get(group)!.get(handler.name)!.splice(idx, 1)\n }\n }\n\n /**\n * Register an error handler.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) whenever\n * an error is thrown inside an update handler.\n * Not used for raw update handlers\n *\n * When an error is thrown, but there is no error\n * handler, it is propagated to `TelegramClient`.\n *\n * There can be at most one error handler.\n * Pass `null` to remove it.\n *\n * @param handler Error handler\n */\n onError<T = {}>(\n handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<boolean>) | null,\n ): void {\n if (handler) this._errorHandler = handler\n else this._errorHandler = undefined\n }\n\n /**\n * Register pre-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) before processing\n * an update, and can be used to skip this update.\n *\n * There can be at most one pre-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPreUpdate<T = {}>(\n handler:\n | ((update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<PropagationAction | void>)\n | null,\n ): void {\n if (handler) this._preUpdateHandler = handler\n else this._preUpdateHandler = undefined\n }\n\n /**\n * Register post-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) after successfully\n * processing an update, and can be used for stats.\n *\n * There can be at most one post-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPostUpdate<T = {}>(\n handler: ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<void>) | null,\n ): void {\n if (handler) this._postUpdateHandler = handler\n else this._postUpdateHandler = undefined\n }\n\n /**\n * Set error handler that will propagate\n * the error to the parent dispatcher\n */\n propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState<State>): MaybeAsync<boolean> {\n if (!this.parent) {\n throw new MtArgumentError('This dispatcher is not a child')\n }\n\n if (this.parent._errorHandler) {\n return this.parent._errorHandler(err, update, state as any)\n }\n throw err\n }\n\n // children //\n\n /**\n * Get parent dispatcher if current dispatcher is a child.\n * Otherwise, return `null`\n */\n get parent(): Dispatcher<any> | null {\n return this._parent ?? null\n }\n\n private _prepareChild(child: Dispatcher<any>): void {\n if (child._client) {\n throw new MtArgumentError(\n 'Provided dispatcher is ' +\n (child._parent ?\n 'already a child. Use parent.removeChild() before calling addChild()' :\n 'already bound to a client. Use unbind() before calling addChild()'),\n )\n }\n\n child._parent = this as any\n child._client = this._client\n child._storage = this._storage\n child._stateKeyDelegate = this._stateKeyDelegate\n child._customStorage ??= this._customStorage\n child._customStateKeyDelegate ??= this._customStateKeyDelegate\n }\n\n /**\n * Add a child dispatcher.\n *\n * Child dispatchers are called when dispatching updates\n * just like normal, except they can be controlled\n * externally. Additionally, child dispatcher have their own\n * independent handler grouping that does not interfere with parent's,\n * including `StopPropagation` (i.e. returning `StopPropagation` will\n * still call children. To entirely stop, use `StopChildrenPropagation`)\n *\n * Note that child dispatchers share the same TelegramClient and\n * storage binding as the parent, don't bind them manually.\n *\n * @param child Other dispatcher\n */\n addChild(child: Dispatcher<State>): void {\n if (this._children.includes(child)) return\n\n this._prepareChild(child)\n this._children.push(child)\n }\n\n /**\n * Add a dispatcher as a scene with a non-scoped state.\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene\n */\n addScene(scene: Dispatcher<State>, scoped: false): void\n /**\n * Add a dispatcher as a scene with a scoped state\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene (defaults to `true`)\n */\n addScene(scene: Dispatcher<any>, scoped?: true): void\n addScene(scene: Dispatcher<any>, scoped = true): void {\n if (!this._scenes) this._scenes = new Map()\n\n if (!scene._scene) {\n throw new MtArgumentError(\n 'Non-scene dispatcher passed to addScene. Use `Dispatcher.scene()` to create one.',\n )\n }\n\n if (this._scenes.has(scene._scene)) {\n throw new MtArgumentError(`Scene with name ${scene._scene} is already registered!`)\n }\n\n this._prepareChild(scene)\n scene._sceneScoped = scoped\n this._scenes.set(scene._scene, scene)\n }\n\n /**\n * Remove a child dispatcher.\n *\n * Removing child dispatcher will also remove\n * child dispatcher's client binding.\n *\n * If the provided dispatcher is not a child of current,\n * this function will silently fail.\n *\n * @param child Other dispatcher\n */\n removeChild(child: Dispatcher<any>): void {\n const idx = this._children.indexOf(child)\n\n if (idx > -1) {\n child._unparent()\n this._children.splice(idx, 1)\n }\n }\n\n private _unparent(): void {\n this._parent = this._client = undefined\n ;(this as any)._stateKeyDelegate = undefined\n ;(this as any)._storage = undefined\n }\n\n /**\n * Extend current dispatcher by copying other dispatcher's\n * handlers and children to the current.\n *\n * This might be more efficient for simple cases, but do note that the handler\n * groups, children and scenes will get merged (unlike {@link addChild},\n * where they are independent). Also note that unlike with children,\n * when adding handlers to `other` *after* you extended\n * the current dispatcher, changes will not be applied.\n *\n * @param other Other dispatcher\n */\n extend(other: Dispatcher<State>): void {\n if (other._customStorage || other._customStateKeyDelegate) {\n throw new MtArgumentError('Provided dispatcher has custom storage and cannot be extended from.')\n }\n\n other._groupsOrder.forEach((group) => {\n if (!this._groups.has(group)) {\n this._groups.set(group, other._groups.get(group)!)\n this._groupsOrder.push(group)\n } else {\n const otherGrp = other._groups.get(group)!\n const selfGrp = this._groups.get(group)!\n\n for (const typ of otherGrp.keys()) {\n if (!selfGrp.has(typ)) {\n selfGrp.set(typ, otherGrp.get(typ)!)\n } else {\n // selfGrp[typ].push(...otherGrp[typ])\n selfGrp.get(typ)!.push(...otherGrp.get(typ)!)\n }\n }\n }\n })\n\n other._children.forEach((it) => {\n it._unparent()\n this.addChild(it as any)\n })\n\n if (other._scenes) {\n const otherScenes = other._scenes\n if (!this._scenes) this._scenes = new Map()\n const myScenes = this._scenes\n\n for (const key of otherScenes.keys()) {\n otherScenes.get(key)!._unparent()\n\n if (myScenes.has(key)) {\n // will be overwritten\n myScenes.delete(key)\n }\n\n this.addScene(otherScenes.get(key) as any, otherScenes.get(key)!._sceneScoped as any)\n }\n }\n\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n /**\n * Create a clone of this dispatcher, that has the same handlers,\n * but is not bound to a client or to a parent dispatcher.\n *\n * Custom Storage and key delegate are copied too.\n *\n * By default, child dispatchers (and scenes) are ignored, since\n * that requires cloning every single one of them recursively\n * and then binding them back.\n *\n * @param children Whether to also clone children and scenes\n */\n clone(children = false): Dispatcher<State> {\n const dp = new Dispatcher<State>()\n\n // copy handlers.\n for (const key of this._groups.keys()) {\n const idx = key as any as number\n\n dp._groups.set(idx, new Map())\n\n for (const type of this._groups.get(idx)!.keys()) {\n // dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!].get(type)!])\n dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!.get(type)!])\n }\n }\n\n dp._groupsOrder = [...this._groupsOrder]\n dp._errorHandler = this._errorHandler\n dp._customStateKeyDelegate = this._customStateKeyDelegate\n dp._customStorage = this._customStorage\n\n if (children) {\n this._children.forEach((it) => {\n const child = it.clone(true)\n dp.addChild(child as any)\n })\n\n if (this._scenes) {\n for (const key of this._scenes.keys()) {\n const scene = this._scenes.get(key)!.clone(true)\n dp.addScene(scene as any, this._scenes.get(key)!._sceneScoped as any)\n }\n }\n }\n\n return dp\n }\n\n /**\n * Get update state object for the given key.\n *\n * For custom keys, use prefix starting with `$` to avoid\n * clashing with other keys (scene name can't start with `$`)\n *\n * @param key State storage key\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(key: string): UpdateState<S>\n\n /**\n * Get update state object for the given object.\n *\n * Equivalent to `getState(string)`, but derives\n * the key with the registered {@link StateKeyDelegate},\n * and since it could be async, this method is async too.\n *\n * @param object Object for which the state should be fetched\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<S>>\n getState<S extends object = State>(object: string | Parameters<StateKeyDelegate>[0]): MaybeAsync<UpdateState<S>> {\n if (!this._storage) {\n throw new MtArgumentError('Cannot use getUpdateState() filter without state storage')\n }\n\n if (typeof object === 'string') {\n return new UpdateState(this._storage, object, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n if (!this._customStateKeyDelegate) {\n return new UpdateState(this._storage!, key, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._customStateKeyDelegate(object)).then((customKey) => {\n if (!customKey) {\n throw new MtArgumentError('Cannot derive custom key from given object')\n }\n\n return new UpdateState(\n this._storage!,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n })\n })\n }\n\n /**\n * Get global state.\n *\n * This will load the state for the given object\n * ignoring local custom storage, key delegate and scene scope.\n */\n getGlobalState<T extends object>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<T>> {\n if (!this._parent) {\n throw new MtArgumentError('This dispatcher does not have a parent')\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n return new UpdateState(this._storage!, key, this._scene ?? null, false)\n })\n }\n\n // addUpdateHandler convenience wrappers //\n\n private _addKnownHandler(name: UpdateHandler['name'], filter: any, handler?: any, group?: number): void {\n if (typeof handler === 'number' || typeof handler === 'undefined') {\n this.addUpdateHandler(\n {\n name,\n callback: filter,\n },\n handler,\n )\n } else {\n this.addUpdateHandler(\n {\n name,\n callback: handler,\n check: filter,\n },\n group,\n )\n }\n }\n\n /**\n * Register a raw update handler without any filters\n *\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(handler: RawUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a raw update handler without any filters\n *\n * @param filter Update filter\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(filter: RawUpdateHandler['check'], handler: RawUpdateHandler['callback'], group?: number): void\n\n /** @internal */\n onRawUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('raw', filter, handler, group)\n }\n\n // begin-codegen\n\n /**\n * Register a new message handler without any filters\n *\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage(\n handler: NewMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onNewMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('new_message', filter, handler, group)\n }\n\n /**\n * Register an edit message handler without any filters\n *\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage(\n handler: EditMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onEditMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('edit_message', filter, handler, group)\n }\n\n /**\n * Register a message group handler without any filters\n *\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup(\n handler: MessageGroupHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onMessageGroup(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('message_group', filter, handler, group)\n }\n\n /**\n * Register a delete message handler without any filters\n *\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage(handler: DeleteMessageHandler['callback'], group?: number): void\n\n /**\n * Register a delete message handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteMessageUpdate>, Mod>,\n handler: DeleteMessageHandler<filters.Modify<UpdateContext<DeleteMessageUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_message', filter, handler, group)\n }\n\n /**\n * Register a chat member update handler without any filters\n *\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate(handler: ChatMemberUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a chat member update handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<ChatMemberUpdate>, Mod>,\n handler: ChatMemberUpdateHandler<filters.Modify<UpdateContext<ChatMemberUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatMemberUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_member', filter, handler, group)\n }\n\n /**\n * Register an inline query handler without any filters\n *\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery(handler: InlineQueryHandler['callback'], group?: number): void\n\n /**\n * Register an inline query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery<Mod>(\n filter: UpdateFilter<InlineQueryContext, Mod>,\n handler: InlineQueryHandler<filters.Modify<InlineQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_query', filter, handler, group)\n }\n\n /**\n * Register a chosen inline result handler without any filters\n *\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult(handler: ChosenInlineResultHandler['callback'], group?: number): void\n\n /**\n * Register a chosen inline result handler with a filter\n *\n * @param filter Update filter\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult<Mod>(\n filter: UpdateFilter<ChosenInlineResultContext, Mod>,\n handler: ChosenInlineResultHandler<filters.Modify<ChosenInlineResultContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChosenInlineResult(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chosen_inline_result', filter, handler, group)\n }\n\n /**\n * Register a callback query handler without any filters\n *\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery(\n handler: CallbackQueryHandler<\n CallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod, State>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('callback_query', filter, handler, group)\n }\n\n /**\n * Register an inline callback query handler without any filters\n *\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery(\n handler: InlineCallbackQueryHandler<\n InlineCallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod, State>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_callback_query', filter, handler, group)\n }\n\n /**\n * Register a poll update handler without any filters\n *\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate(handler: PollUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a poll update handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<PollUpdate>, Mod>,\n handler: PollUpdateHandler<filters.Modify<UpdateContext<PollUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll', filter, handler, group)\n }\n\n /**\n * Register a poll vote handler without any filters\n *\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote(handler: PollVoteHandler['callback'], group?: number): void\n\n /**\n * Register a poll vote handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote<Mod>(\n filter: UpdateFilter<UpdateContext<PollVoteUpdate>, Mod>,\n handler: PollVoteHandler<filters.Modify<UpdateContext<PollVoteUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollVote(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll_vote', filter, handler, group)\n }\n\n /**\n * Register an user status update handler without any filters\n *\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate(handler: UserStatusUpdateHandler['callback'], group?: number): void\n\n /**\n * Register an user status update handler with a filter\n *\n * @param filter Update filter\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<UserStatusUpdate>, Mod>,\n handler: UserStatusUpdateHandler<filters.Modify<UpdateContext<UserStatusUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserStatusUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_status', filter, handler, group)\n }\n\n /**\n * Register an user typing handler without any filters\n *\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping(handler: UserTypingHandler['callback'], group?: number): void\n\n /**\n * Register an user typing handler with a filter\n *\n * @param filter Update filter\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping<Mod>(\n filter: UpdateFilter<UpdateContext<UserTypingUpdate>, Mod>,\n handler: UserTypingHandler<filters.Modify<UpdateContext<UserTypingUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserTyping(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_typing', filter, handler, group)\n }\n\n /**\n * Register a history read handler without any filters\n *\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead(handler: HistoryReadHandler['callback'], group?: number): void\n\n /**\n * Register a history read handler with a filter\n *\n * @param filter Update filter\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead<Mod>(\n filter: UpdateFilter<UpdateContext<HistoryReadUpdate>, Mod>,\n handler: HistoryReadHandler<filters.Modify<UpdateContext<HistoryReadUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onHistoryRead(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('history_read', filter, handler, group)\n }\n\n /**\n * Register a bot stopped handler without any filters\n *\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped(handler: BotStoppedHandler['callback'], group?: number): void\n\n /**\n * Register a bot stopped handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped<Mod>(\n filter: UpdateFilter<UpdateContext<BotStoppedUpdate>, Mod>,\n handler: BotStoppedHandler<filters.Modify<UpdateContext<BotStoppedUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotStopped(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_stopped', filter, handler, group)\n }\n\n /**\n * Register a bot chat join request handler without any filters\n *\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest(handler: BotChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a bot chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest<Mod>(\n filter: UpdateFilter<ChatJoinRequestUpdateContext, Mod>,\n handler: BotChatJoinRequestHandler<filters.Modify<ChatJoinRequestUpdateContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a chat join request handler without any filters\n *\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest(handler: ChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest<Mod>(\n filter: UpdateFilter<UpdateContext<ChatJoinRequestUpdate>, Mod>,\n handler: ChatJoinRequestHandler<filters.Modify<UpdateContext<ChatJoinRequestUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a pre checkout query handler without any filters\n *\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery(handler: PreCheckoutQueryHandler['callback'], group?: number): void\n\n /**\n * Register a pre checkout query handler with a filter\n *\n * @param filter Update filter\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery<Mod>(\n filter: UpdateFilter<PreCheckoutQueryContext, Mod>,\n handler: PreCheckoutQueryHandler<filters.Modify<PreCheckoutQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPreCheckoutQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('pre_checkout_query', filter, handler, group)\n }\n\n /**\n * Register a story update handler without any filters\n *\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate(handler: StoryUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a story update handler with a filter\n *\n * @param filter Update filter\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<StoryUpdate>, Mod>,\n handler: StoryUpdateHandler<filters.Modify<UpdateContext<StoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onStoryUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('story', filter, handler, group)\n }\n\n /**\n * Register a delete story handler without any filters\n *\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory(handler: DeleteStoryHandler['callback'], group?: number): void\n\n /**\n * Register a delete story handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>,\n handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteStory(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_story', filter, handler, group)\n }\n\n /**\n * Register a bot reaction update handler without any filters\n *\n * @param handler Bot reaction update handler\n * @param group Handler group index\n */\n onBotReactionUpdate(handler: BotReactionUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a bot reaction update handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot reaction update handler\n * @param group Handler group index\n */\n onBotReactionUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<BotReactionUpdate>, Mod>,\n handler: BotReactionUpdateHandler<filters.Modify<UpdateContext<BotReactionUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotReactionUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_reaction', filter, handler, group)\n }\n\n /**\n * Register a bot reaction count update handler without any filters\n *\n * @param handler Bot reaction count update handler\n * @param group Handler group index\n */\n onBotReactionCountUpdate(handler: BotReactionCountUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a bot reaction count update handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot reaction count update handler\n * @param group Handler group index\n */\n onBotReactionCountUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<BotReactionCountUpdate>, Mod>,\n handler: BotReactionCountUpdateHandler<filters.Modify<UpdateContext<BotReactionCountUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotReactionCountUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_reaction_count', filter, handler, group)\n }\n\n // end-codegen\n}\n"]}
package/cjs/handler.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
1
+ import { BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
2
2
  import { UpdateContext } from './context/base.js';
3
3
  import { CallbackQueryContext, ChatJoinRequestUpdateContext, ChosenInlineResultContext, InlineCallbackQueryContext, InlineQueryContext, MessageContext, PreCheckoutQueryContext } from './context/index.js';
4
4
  import { PropagationAction } from './propagation.js';
@@ -29,4 +29,6 @@ export type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = P
29
29
  export type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>;
30
30
  export type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>;
31
31
  export type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>;
32
- export type UpdateHandler = RawUpdateHandler | NewMessageHandler | EditMessageHandler | MessageGroupHandler | DeleteMessageHandler | ChatMemberUpdateHandler | InlineQueryHandler | ChosenInlineResultHandler | CallbackQueryHandler | InlineCallbackQueryHandler | PollUpdateHandler | PollVoteHandler | UserStatusUpdateHandler | UserTypingHandler | HistoryReadHandler | BotStoppedHandler | BotChatJoinRequestHandler | ChatJoinRequestHandler | PreCheckoutQueryHandler | StoryUpdateHandler | DeleteStoryHandler;
32
+ export type BotReactionUpdateHandler<T = UpdateContext<BotReactionUpdate>> = ParsedUpdateHandler<'bot_reaction', T>;
33
+ export type BotReactionCountUpdateHandler<T = UpdateContext<BotReactionCountUpdate>> = ParsedUpdateHandler<'bot_reaction_count', T>;
34
+ export type UpdateHandler = RawUpdateHandler | NewMessageHandler | EditMessageHandler | MessageGroupHandler | DeleteMessageHandler | ChatMemberUpdateHandler | InlineQueryHandler | ChosenInlineResultHandler | CallbackQueryHandler | InlineCallbackQueryHandler | PollUpdateHandler | PollVoteHandler | UserStatusUpdateHandler | UserTypingHandler | HistoryReadHandler | BotStoppedHandler | BotChatJoinRequestHandler | ChatJoinRequestHandler | PreCheckoutQueryHandler | StoryUpdateHandler | DeleteStoryHandler | BotReactionUpdateHandler | BotReactionCountUpdateHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":";;AA4GA,cAAc","sourcesContent":["import {\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { PropagationAction } from './propagation.js'\n\nexport interface BaseUpdateHandler<Name, Handler, Checker> {\n name: Name\n callback: Handler\n\n check?: Checker\n}\n\nexport type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<\n Name,\n (update: Update, state: State) => MaybeAsync<void | PropagationAction>,\n (update: Update, state: State) => MaybeAsync<boolean>\n>\n\nexport type RawUpdateHandler = BaseUpdateHandler<\n 'raw',\n (\n client: TelegramClient,\n update: tl.TypeUpdate | tl.TypeMessage,\n peers: PeersIndex,\n ) => MaybeAsync<void | PropagationAction>,\n (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybeAsync<boolean>\n>\n\n// begin-codegen\nexport type NewMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'new_message', T, S>\nexport type EditMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'edit_message', T, S>\nexport type MessageGroupHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'message_group', T, S>\nexport type DeleteMessageHandler<T = UpdateContext<DeleteMessageUpdate>> = ParsedUpdateHandler<'delete_message', T>\nexport type ChatMemberUpdateHandler<T = UpdateContext<ChatMemberUpdate>> = ParsedUpdateHandler<'chat_member', T>\nexport type InlineQueryHandler<T = InlineQueryContext> = ParsedUpdateHandler<'inline_query', T>\nexport type ChosenInlineResultHandler<T = ChosenInlineResultContext> = ParsedUpdateHandler<'chosen_inline_result', T>\nexport type CallbackQueryHandler<T = CallbackQueryContext, S = never> = ParsedUpdateHandler<'callback_query', T, S>\nexport type InlineCallbackQueryHandler<T = InlineCallbackQueryContext, S = never> = ParsedUpdateHandler<\n 'inline_callback_query',\n T,\n S\n>\nexport type PollUpdateHandler<T = UpdateContext<PollUpdate>> = ParsedUpdateHandler<'poll', T>\nexport type PollVoteHandler<T = UpdateContext<PollVoteUpdate>> = ParsedUpdateHandler<'poll_vote', T>\nexport type UserStatusUpdateHandler<T = UpdateContext<UserStatusUpdate>> = ParsedUpdateHandler<'user_status', T>\nexport type UserTypingHandler<T = UpdateContext<UserTypingUpdate>> = ParsedUpdateHandler<'user_typing', T>\nexport type HistoryReadHandler<T = UpdateContext<HistoryReadUpdate>> = ParsedUpdateHandler<'history_read', T>\nexport type BotStoppedHandler<T = UpdateContext<BotStoppedUpdate>> = ParsedUpdateHandler<'bot_stopped', T>\nexport type BotChatJoinRequestHandler<T = ChatJoinRequestUpdateContext> = ParsedUpdateHandler<\n 'bot_chat_join_request',\n T\n>\nexport type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = ParsedUpdateHandler<\n 'chat_join_request',\n T\n>\nexport type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>\nexport type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>\nexport type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>\n\nexport type UpdateHandler =\n | RawUpdateHandler\n | NewMessageHandler\n | EditMessageHandler\n | MessageGroupHandler\n | DeleteMessageHandler\n | ChatMemberUpdateHandler\n | InlineQueryHandler\n | ChosenInlineResultHandler\n | CallbackQueryHandler\n | InlineCallbackQueryHandler\n | PollUpdateHandler\n | PollVoteHandler\n | UserStatusUpdateHandler\n | UserTypingHandler\n | HistoryReadHandler\n | BotStoppedHandler\n | BotChatJoinRequestHandler\n | ChatJoinRequestHandler\n | PreCheckoutQueryHandler\n | StoryUpdateHandler\n | DeleteStoryHandler\n\n// end-codegen\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":";;AAqHA,cAAc","sourcesContent":["import {\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { PropagationAction } from './propagation.js'\n\nexport interface BaseUpdateHandler<Name, Handler, Checker> {\n name: Name\n callback: Handler\n\n check?: Checker\n}\n\nexport type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<\n Name,\n (update: Update, state: State) => MaybeAsync<void | PropagationAction>,\n (update: Update, state: State) => MaybeAsync<boolean>\n>\n\nexport type RawUpdateHandler = BaseUpdateHandler<\n 'raw',\n (\n client: TelegramClient,\n update: tl.TypeUpdate | tl.TypeMessage,\n peers: PeersIndex,\n ) => MaybeAsync<void | PropagationAction>,\n (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybeAsync<boolean>\n>\n\n// begin-codegen\nexport type NewMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'new_message', T, S>\nexport type EditMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'edit_message', T, S>\nexport type MessageGroupHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'message_group', T, S>\nexport type DeleteMessageHandler<T = UpdateContext<DeleteMessageUpdate>> = ParsedUpdateHandler<'delete_message', T>\nexport type ChatMemberUpdateHandler<T = UpdateContext<ChatMemberUpdate>> = ParsedUpdateHandler<'chat_member', T>\nexport type InlineQueryHandler<T = InlineQueryContext> = ParsedUpdateHandler<'inline_query', T>\nexport type ChosenInlineResultHandler<T = ChosenInlineResultContext> = ParsedUpdateHandler<'chosen_inline_result', T>\nexport type CallbackQueryHandler<T = CallbackQueryContext, S = never> = ParsedUpdateHandler<'callback_query', T, S>\nexport type InlineCallbackQueryHandler<T = InlineCallbackQueryContext, S = never> = ParsedUpdateHandler<\n 'inline_callback_query',\n T,\n S\n>\nexport type PollUpdateHandler<T = UpdateContext<PollUpdate>> = ParsedUpdateHandler<'poll', T>\nexport type PollVoteHandler<T = UpdateContext<PollVoteUpdate>> = ParsedUpdateHandler<'poll_vote', T>\nexport type UserStatusUpdateHandler<T = UpdateContext<UserStatusUpdate>> = ParsedUpdateHandler<'user_status', T>\nexport type UserTypingHandler<T = UpdateContext<UserTypingUpdate>> = ParsedUpdateHandler<'user_typing', T>\nexport type HistoryReadHandler<T = UpdateContext<HistoryReadUpdate>> = ParsedUpdateHandler<'history_read', T>\nexport type BotStoppedHandler<T = UpdateContext<BotStoppedUpdate>> = ParsedUpdateHandler<'bot_stopped', T>\nexport type BotChatJoinRequestHandler<T = ChatJoinRequestUpdateContext> = ParsedUpdateHandler<\n 'bot_chat_join_request',\n T\n>\nexport type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = ParsedUpdateHandler<\n 'chat_join_request',\n T\n>\nexport type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>\nexport type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>\nexport type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>\nexport type BotReactionUpdateHandler<T = UpdateContext<BotReactionUpdate>> = ParsedUpdateHandler<'bot_reaction', T>\nexport type BotReactionCountUpdateHandler<T = UpdateContext<BotReactionCountUpdate>> = ParsedUpdateHandler<\n 'bot_reaction_count',\n T\n>\n\nexport type UpdateHandler =\n | RawUpdateHandler\n | NewMessageHandler\n | EditMessageHandler\n | MessageGroupHandler\n | DeleteMessageHandler\n | ChatMemberUpdateHandler\n | InlineQueryHandler\n | ChosenInlineResultHandler\n | CallbackQueryHandler\n | InlineCallbackQueryHandler\n | PollUpdateHandler\n | PollVoteHandler\n | UserStatusUpdateHandler\n | UserTypingHandler\n | HistoryReadHandler\n | BotStoppedHandler\n | BotChatJoinRequestHandler\n | ChatJoinRequestHandler\n | PreCheckoutQueryHandler\n | StoryUpdateHandler\n | DeleteStoryHandler\n | BotReactionUpdateHandler\n | BotReactionCountUpdateHandler\n\n// end-codegen\n"]}
@@ -74,5 +74,5 @@ export declare class MessageContext extends Message implements UpdateContext<Mes
74
74
  /** Send a copy of this message (message group) */
75
75
  copy(params: SendCopyParams & SendCopyGroupParams): Promise<Message> | Promise<Message[]>;
76
76
  /** React to this message */
77
- react(params: OmitInputMessageId<Parameters<TelegramClient['sendReaction']>[0]>): Promise<Message>;
77
+ react(params: OmitInputMessageId<Parameters<TelegramClient['sendReaction']>[0]>): Promise<Message | null>;
78
78
  }
@@ -1,8 +1,8 @@
1
- import { BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, ParsedUpdate, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
1
+ import { BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, ParsedUpdate, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
2
2
  import { UpdateContext } from './context/base.js';
3
3
  import { CallbackQueryContext, ChatJoinRequestUpdateContext, ChosenInlineResultContext, InlineCallbackQueryContext, InlineQueryContext, MessageContext, PreCheckoutQueryContext } from './context/index.js';
4
4
  import { filters, UpdateFilter } from './filters/index.js';
5
- import { BotChatJoinRequestHandler, BotStoppedHandler, CallbackQueryHandler, ChatJoinRequestHandler, ChatMemberUpdateHandler, ChosenInlineResultHandler, DeleteMessageHandler, DeleteStoryHandler, EditMessageHandler, HistoryReadHandler, InlineCallbackQueryHandler, InlineQueryHandler, MessageGroupHandler, NewMessageHandler, PollUpdateHandler, PollVoteHandler, PreCheckoutQueryHandler, RawUpdateHandler, StoryUpdateHandler, UpdateHandler, UserStatusUpdateHandler, UserTypingHandler } from './handler.js';
5
+ import { BotChatJoinRequestHandler, BotReactionCountUpdateHandler, BotReactionUpdateHandler, BotStoppedHandler, CallbackQueryHandler, ChatJoinRequestHandler, ChatMemberUpdateHandler, ChosenInlineResultHandler, DeleteMessageHandler, DeleteStoryHandler, EditMessageHandler, HistoryReadHandler, InlineCallbackQueryHandler, InlineQueryHandler, MessageGroupHandler, NewMessageHandler, PollUpdateHandler, PollVoteHandler, PreCheckoutQueryHandler, RawUpdateHandler, StoryUpdateHandler, UpdateHandler, UserStatusUpdateHandler, UserTypingHandler } from './handler.js';
6
6
  import { PropagationAction } from './propagation.js';
7
7
  import { IStateStorage, StateKeyDelegate, UpdateState } from './state/index.js';
8
8
  export interface DispatcherParams {
@@ -654,4 +654,34 @@ export declare class Dispatcher<State extends object = never> {
654
654
  * @param group Handler group index
655
655
  */
656
656
  onDeleteStory<Mod>(filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>, handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'], group?: number): void;
657
+ /**
658
+ * Register a bot reaction update handler without any filters
659
+ *
660
+ * @param handler Bot reaction update handler
661
+ * @param group Handler group index
662
+ */
663
+ onBotReactionUpdate(handler: BotReactionUpdateHandler['callback'], group?: number): void;
664
+ /**
665
+ * Register a bot reaction update handler with a filter
666
+ *
667
+ * @param filter Update filter
668
+ * @param handler Bot reaction update handler
669
+ * @param group Handler group index
670
+ */
671
+ onBotReactionUpdate<Mod>(filter: UpdateFilter<UpdateContext<BotReactionUpdate>, Mod>, handler: BotReactionUpdateHandler<filters.Modify<UpdateContext<BotReactionUpdate>, Mod>>['callback'], group?: number): void;
672
+ /**
673
+ * Register a bot reaction count update handler without any filters
674
+ *
675
+ * @param handler Bot reaction count update handler
676
+ * @param group Handler group index
677
+ */
678
+ onBotReactionCountUpdate(handler: BotReactionCountUpdateHandler['callback'], group?: number): void;
679
+ /**
680
+ * Register a bot reaction count update handler with a filter
681
+ *
682
+ * @param filter Update filter
683
+ * @param handler Bot reaction count update handler
684
+ * @param group Handler group index
685
+ */
686
+ onBotReactionCountUpdate<Mod>(filter: UpdateFilter<UpdateContext<BotReactionCountUpdate>, Mod>, handler: BotReactionCountUpdateHandler<filters.Modify<UpdateContext<BotReactionCountUpdate>, Mod>>['callback'], group?: number): void;
657
687
  }
package/esm/dispatcher.js CHANGED
@@ -810,5 +810,13 @@ export class Dispatcher {
810
810
  onDeleteStory(filter, handler, group) {
811
811
  this._addKnownHandler('delete_story', filter, handler, group);
812
812
  }
813
+ /** @internal */
814
+ onBotReactionUpdate(filter, handler, group) {
815
+ this._addKnownHandler('bot_reaction', filter, handler, group);
816
+ }
817
+ /** @internal */
818
+ onBotReactionCountUpdate(filter, handler, group) {
819
+ this._addKnownHandler('bot_reaction_count', filter, handler, group);
820
+ }
813
821
  }
814
822
  //# sourceMappingURL=dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/unified-signatures,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,max-depth,dot-notation */\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types */\n// ^^ will be looked into in MTQ-29\n\nimport {\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n MtArgumentError,\n ParsedUpdate,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { _parsedUpdateToContext, UpdateContextType } from './context/parse.js'\nimport { filters, UpdateFilter } from './filters/index.js'\n// begin-codegen-imports\nimport {\n BotChatJoinRequestHandler,\n BotStoppedHandler,\n CallbackQueryHandler,\n ChatJoinRequestHandler,\n ChatMemberUpdateHandler,\n ChosenInlineResultHandler,\n DeleteMessageHandler,\n DeleteStoryHandler,\n EditMessageHandler,\n HistoryReadHandler,\n InlineCallbackQueryHandler,\n InlineQueryHandler,\n MessageGroupHandler,\n NewMessageHandler,\n PollUpdateHandler,\n PollVoteHandler,\n PreCheckoutQueryHandler,\n RawUpdateHandler,\n StoryUpdateHandler,\n UpdateHandler,\n UserStatusUpdateHandler,\n UserTypingHandler,\n} from './handler.js'\n// end-codegen-imports\nimport { PropagationAction } from './propagation.js'\nimport {\n defaultStateKeyDelegate,\n isCompatibleStorage,\n IStateStorage,\n StateKeyDelegate,\n UpdateState,\n} from './state/index.js'\n\nexport interface DispatcherParams {\n /**\n * If this dispatcher can be used as a scene, its unique name.\n *\n * Should not be set manually, use {@link Dispatcher.scene} instead\n */\n sceneName?: string\n\n /**\n * Custom storage for this dispatcher and its children.\n *\n * @default Client's storage\n */\n storage?: IStateStorage\n\n /**\n * Custom key delegate for the dispatcher.\n */\n key?: StateKeyDelegate\n}\n\n/**\n * Updates dispatcher\n */\nexport class Dispatcher<State extends object = never> {\n private _groups: Map<number, Map<UpdateHandler['name'], UpdateHandler[]>> = new Map()\n private _groupsOrder: number[] = []\n\n private _client?: TelegramClient\n\n private _parent?: Dispatcher<any>\n private _children: Dispatcher<any>[] = []\n\n private _scenes?: Map<string, Dispatcher<any>>\n private _scene?: string\n private _sceneScoped?: boolean\n\n private _storage?: State extends never ? undefined : IStateStorage\n private _stateKeyDelegate?: State extends never ? undefined : StateKeyDelegate\n\n private _customStateKeyDelegate?: StateKeyDelegate\n private _customStorage?: IStateStorage\n\n private _errorHandler?: <T = {}>(\n err: Error,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<boolean>\n\n private _preUpdateHandler?: <T = {}>(\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<PropagationAction | void>\n\n private _postUpdateHandler?: <T = {}>(\n handled: boolean,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<void>\n\n protected constructor(client?: TelegramClient, params?: DispatcherParams) {\n this.dispatchRawUpdate = this.dispatchRawUpdate.bind(this)\n this.dispatchUpdate = this.dispatchUpdate.bind(this)\n this._onClientBeforeConnect = this._onClientBeforeConnect.bind(this)\n this._onClientBeforeClose = this._onClientBeforeClose.bind(this)\n\n // eslint-disable-next-line prefer-const\n let { storage, key, sceneName } = params ?? {}\n\n if (client) {\n this.bindToClient(client)\n\n if (!storage) {\n const _storage = client.storage\n\n if (!isCompatibleStorage(_storage)) {\n throw new MtArgumentError(\n 'Storage used by the client is not compatible with the dispatcher. Please provide a compatible storage manually',\n )\n }\n\n storage = _storage\n }\n\n if (storage) {\n this._storage = storage as any\n this._stateKeyDelegate = (key ?? defaultStateKeyDelegate) as any\n }\n } else {\n // child dispatcher without client\n\n if (storage) {\n this._customStorage = storage as any\n }\n\n if (key) {\n this._customStateKeyDelegate = key as any\n }\n\n if (sceneName) {\n if (sceneName[0] === '$') {\n throw new MtArgumentError('Scene name cannot start with $')\n }\n\n this._scene = sceneName\n }\n }\n }\n\n /**\n * Create a new dispatcher and bind it to the client.\n */\n static for<State extends object = never>(client: TelegramClient, params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(client, params)\n }\n\n /**\n * Create a new child dispatcher.\n */\n static child<State extends object = never>(params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(undefined, params)\n }\n\n /**\n * Create a new scene dispatcher\n */\n static scene<State extends object = Record<never, never>>(\n name: string,\n params?: Omit<DispatcherParams, 'sceneName'>,\n ): Dispatcher<State> {\n return new Dispatcher<State>(undefined, { sceneName: name, ...params })\n }\n\n /** For scene dispatchers, name of the scene */\n get sceneName(): string | undefined {\n return this._scene\n }\n\n private _onClientBeforeConnect() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.load?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.load?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeConnect()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeConnect()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n private _onClientBeforeClose() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.save?.()\n await this._storage.destroy?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.save?.()\n await this._customStorage.destroy?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeClose()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeClose()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Bind the dispatcher to the client.\n * Called by the constructor automatically if\n * `client` was passed.\n *\n * Dispatcher also uses bound client to throw errors\n */\n bindToClient(client: TelegramClient): void {\n client.on('update', this.dispatchUpdate)\n client.on('raw_update', this.dispatchRawUpdate)\n client.on('before_connect', this._onClientBeforeConnect)\n client.on('before_close', this._onClientBeforeClose)\n\n this._client = client\n }\n\n /**\n * Unbind a dispatcher from the client.\n */\n unbind(): void {\n if (this._client) {\n this._client.off('update', this.dispatchUpdate)\n this._client.off('raw_update', this.dispatchRawUpdate)\n this._client.off('before_connect', this._onClientBeforeConnect)\n this._client.off('before_close', this._onClientBeforeClose)\n\n this._client = undefined\n }\n }\n\n /**\n * Process a raw update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchRawUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n * @param peers Peers index\n */\n dispatchRawUpdate(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchRawUpdateNow(update, peers).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process a raw update right now in the current stack.\n *\n * Unlike {@link dispatchRawUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @param peers Peers map\n * @returns Whether the update was handled\n */\n async dispatchRawUpdateNow(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): Promise<boolean> {\n if (!this._client) return false\n\n let handled = false\n\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has('raw')) {\n const handlers = group.get('raw')! as RawUpdateHandler[]\n\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!h.check || (await h.check(this._client, update, peers))) {\n result = await h.callback(this._client, update, peers)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n return handled\n }\n\n break\n }\n }\n }\n\n for (const child of this._children) {\n const childHandled = await child.dispatchRawUpdateNow(update, peers)\n handled ||= childHandled\n }\n\n return handled\n }\n\n /**\n * Process an update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n */\n dispatchUpdate(update: ParsedUpdate): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchUpdateNow(update).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process an update right now in the current stack.\n *\n * Unlike {@link dispatchUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @returns Whether the update was handled\n */\n async dispatchUpdateNow(update: ParsedUpdate): Promise<boolean> {\n return this._dispatchUpdateNowImpl(update)\n }\n\n private async _dispatchUpdateNowImpl(\n update: ParsedUpdate,\n // this is getting a bit crazy lol\n parsedState?: UpdateState<State> | null,\n parsedScene?: string | null,\n forceScene?: true,\n parsedContext?: UpdateContextType,\n ): Promise<boolean> {\n if (!this._client) return false\n\n if (parsedScene === undefined) {\n if (\n this._storage &&\n this._scenes &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n // no need to fetch scene if there are no registered scenes\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n parsedScene = await this._storage.getCurrentScene(key)\n } else {\n parsedScene = null\n }\n } else {\n parsedScene = null\n }\n }\n\n if (!forceScene && parsedScene !== null) {\n if (this._scene) {\n if (this._scene !== parsedScene) {\n // should not happen, but just in case\n return false\n }\n } else {\n if (!this._scenes || !this._scenes.has(parsedScene)) {\n // not registered scene\n return false\n }\n\n return this._scenes.get(parsedScene)!._dispatchUpdateNowImpl(update, parsedState, parsedScene, true)\n }\n }\n\n if (parsedState === undefined) {\n if (\n this._storage &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n let customKey\n\n if (\n !this._customStateKeyDelegate ||\n (customKey = await this._customStateKeyDelegate(parsedContext as any))\n ) {\n parsedState = new UpdateState(\n this._storage,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n }\n } else {\n parsedState = null\n }\n } else {\n parsedState = null\n }\n }\n\n let shouldDispatch = true\n let shouldDispatchChildren = true\n let handled = false\n\n switch (await this._preUpdateHandler?.(update, parsedState as any)) {\n case 'stop':\n shouldDispatch = false\n break\n case 'stop-children':\n return false\n }\n\n if (shouldDispatch) {\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has(update.name)) {\n // raw is not handled here, so we can safely assume this\n const handlers = group.get(update.name)! as Exclude<UpdateHandler, RawUpdateHandler>[]\n\n try {\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n if (!h.check || (await h.check(parsedContext as any, parsedState as never))) {\n result = await h.callback(parsedContext as any, parsedState as never)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n shouldDispatchChildren = false\n break outer\n\n case 'scene': {\n if (!parsedState) {\n throw new MtArgumentError('Cannot use ToScene without state')\n }\n\n const scene = parsedState['_scene']\n\n if (!scene) {\n throw new MtArgumentError('Cannot use ToScene without entering a scene')\n }\n\n return this._scenes!.get(scene)!._dispatchUpdateNowImpl(\n update,\n undefined,\n scene,\n true,\n )\n }\n }\n\n break\n }\n } catch (e: any) {\n if (this._errorHandler) {\n const handled = await this._errorHandler(e, update, parsedState as never)\n if (!handled) throw e\n } else {\n throw e\n }\n }\n }\n }\n }\n\n if (shouldDispatchChildren) {\n for (const child of this._children) {\n const childHandled = await child._dispatchUpdateNowImpl(update)\n handled ||= childHandled\n }\n }\n\n await this._postUpdateHandler?.(handled, update, parsedState as any)\n\n return handled\n }\n\n /**\n * Add an update handler to a given handlers group\n *\n * @param handler Update handler\n * @param group Handler group index\n */\n addUpdateHandler(handler: UpdateHandler, group = 0): void {\n if (!this._groups.has(group)) {\n this._groups.set(group, new Map())\n this._groupsOrder.push(group)\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n if (!this._groups.get(group)!.has(handler.name)) {\n this._groups.get(group)!.set(handler.name, [])\n }\n\n this._groups.get(group)!.get(handler.name)!.push(handler)\n }\n\n /**\n * Remove an update handler (or handlers) from a given\n * handler group.\n *\n * @param handler Update handler to remove, its name or `'all'` to remove all\n * @param group Handler group index (null to affect all groups)\n */\n removeUpdateHandler(handler: UpdateHandler | UpdateHandler['name'] | 'all', group: number | null = 0): void {\n if (group !== null && !this._groups.has(group)) {\n return\n }\n\n if (typeof handler === 'string') {\n if (handler === 'all') {\n if (group === null) {\n this._groups = new Map()\n } else {\n this._groups.delete(group)\n }\n } else if (group !== null) {\n this._groups.get(group)!.delete(handler)\n }\n\n return\n }\n\n if (group === null) return\n\n if (!this._groups.get(group)!.has(handler.name)) {\n return\n }\n\n const idx = this._groups.get(group)!.get(handler.name)!.indexOf(handler)\n\n if (idx > -1) {\n this._groups.get(group)!.get(handler.name)!.splice(idx, 1)\n }\n }\n\n /**\n * Register an error handler.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) whenever\n * an error is thrown inside an update handler.\n * Not used for raw update handlers\n *\n * When an error is thrown, but there is no error\n * handler, it is propagated to `TelegramClient`.\n *\n * There can be at most one error handler.\n * Pass `null` to remove it.\n *\n * @param handler Error handler\n */\n onError<T = {}>(\n handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<boolean>) | null,\n ): void {\n if (handler) this._errorHandler = handler\n else this._errorHandler = undefined\n }\n\n /**\n * Register pre-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) before processing\n * an update, and can be used to skip this update.\n *\n * There can be at most one pre-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPreUpdate<T = {}>(\n handler:\n | ((update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<PropagationAction | void>)\n | null,\n ): void {\n if (handler) this._preUpdateHandler = handler\n else this._preUpdateHandler = undefined\n }\n\n /**\n * Register post-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) after successfully\n * processing an update, and can be used for stats.\n *\n * There can be at most one post-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPostUpdate<T = {}>(\n handler: ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<void>) | null,\n ): void {\n if (handler) this._postUpdateHandler = handler\n else this._postUpdateHandler = undefined\n }\n\n /**\n * Set error handler that will propagate\n * the error to the parent dispatcher\n */\n propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState<State>): MaybeAsync<boolean> {\n if (!this.parent) {\n throw new MtArgumentError('This dispatcher is not a child')\n }\n\n if (this.parent._errorHandler) {\n return this.parent._errorHandler(err, update, state as any)\n }\n throw err\n }\n\n // children //\n\n /**\n * Get parent dispatcher if current dispatcher is a child.\n * Otherwise, return `null`\n */\n get parent(): Dispatcher<any> | null {\n return this._parent ?? null\n }\n\n private _prepareChild(child: Dispatcher<any>): void {\n if (child._client) {\n throw new MtArgumentError(\n 'Provided dispatcher is ' +\n (child._parent ?\n 'already a child. Use parent.removeChild() before calling addChild()' :\n 'already bound to a client. Use unbind() before calling addChild()'),\n )\n }\n\n child._parent = this as any\n child._client = this._client\n child._storage = this._storage\n child._stateKeyDelegate = this._stateKeyDelegate\n child._customStorage ??= this._customStorage\n child._customStateKeyDelegate ??= this._customStateKeyDelegate\n }\n\n /**\n * Add a child dispatcher.\n *\n * Child dispatchers are called when dispatching updates\n * just like normal, except they can be controlled\n * externally. Additionally, child dispatcher have their own\n * independent handler grouping that does not interfere with parent's,\n * including `StopPropagation` (i.e. returning `StopPropagation` will\n * still call children. To entirely stop, use `StopChildrenPropagation`)\n *\n * Note that child dispatchers share the same TelegramClient and\n * storage binding as the parent, don't bind them manually.\n *\n * @param child Other dispatcher\n */\n addChild(child: Dispatcher<State>): void {\n if (this._children.includes(child)) return\n\n this._prepareChild(child)\n this._children.push(child)\n }\n\n /**\n * Add a dispatcher as a scene with a non-scoped state.\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene\n */\n addScene(scene: Dispatcher<State>, scoped: false): void\n /**\n * Add a dispatcher as a scene with a scoped state\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene (defaults to `true`)\n */\n addScene(scene: Dispatcher<any>, scoped?: true): void\n addScene(scene: Dispatcher<any>, scoped = true): void {\n if (!this._scenes) this._scenes = new Map()\n\n if (!scene._scene) {\n throw new MtArgumentError(\n 'Non-scene dispatcher passed to addScene. Use `Dispatcher.scene()` to create one.',\n )\n }\n\n if (this._scenes.has(scene._scene)) {\n throw new MtArgumentError(`Scene with name ${scene._scene} is already registered!`)\n }\n\n this._prepareChild(scene)\n scene._sceneScoped = scoped\n this._scenes.set(scene._scene, scene)\n }\n\n /**\n * Remove a child dispatcher.\n *\n * Removing child dispatcher will also remove\n * child dispatcher's client binding.\n *\n * If the provided dispatcher is not a child of current,\n * this function will silently fail.\n *\n * @param child Other dispatcher\n */\n removeChild(child: Dispatcher<any>): void {\n const idx = this._children.indexOf(child)\n\n if (idx > -1) {\n child._unparent()\n this._children.splice(idx, 1)\n }\n }\n\n private _unparent(): void {\n this._parent = this._client = undefined\n ;(this as any)._stateKeyDelegate = undefined\n ;(this as any)._storage = undefined\n }\n\n /**\n * Extend current dispatcher by copying other dispatcher's\n * handlers and children to the current.\n *\n * This might be more efficient for simple cases, but do note that the handler\n * groups, children and scenes will get merged (unlike {@link addChild},\n * where they are independent). Also note that unlike with children,\n * when adding handlers to `other` *after* you extended\n * the current dispatcher, changes will not be applied.\n *\n * @param other Other dispatcher\n */\n extend(other: Dispatcher<State>): void {\n if (other._customStorage || other._customStateKeyDelegate) {\n throw new MtArgumentError('Provided dispatcher has custom storage and cannot be extended from.')\n }\n\n other._groupsOrder.forEach((group) => {\n if (!this._groups.has(group)) {\n this._groups.set(group, other._groups.get(group)!)\n this._groupsOrder.push(group)\n } else {\n const otherGrp = other._groups.get(group)!\n const selfGrp = this._groups.get(group)!\n\n for (const typ of otherGrp.keys()) {\n if (!selfGrp.has(typ)) {\n selfGrp.set(typ, otherGrp.get(typ)!)\n } else {\n // selfGrp[typ].push(...otherGrp[typ])\n selfGrp.get(typ)!.push(...otherGrp.get(typ)!)\n }\n }\n }\n })\n\n other._children.forEach((it) => {\n it._unparent()\n this.addChild(it as any)\n })\n\n if (other._scenes) {\n const otherScenes = other._scenes\n if (!this._scenes) this._scenes = new Map()\n const myScenes = this._scenes\n\n for (const key of otherScenes.keys()) {\n otherScenes.get(key)!._unparent()\n\n if (myScenes.has(key)) {\n // will be overwritten\n myScenes.delete(key)\n }\n\n this.addScene(otherScenes.get(key) as any, otherScenes.get(key)!._sceneScoped as any)\n }\n }\n\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n /**\n * Create a clone of this dispatcher, that has the same handlers,\n * but is not bound to a client or to a parent dispatcher.\n *\n * Custom Storage and key delegate are copied too.\n *\n * By default, child dispatchers (and scenes) are ignored, since\n * that requires cloning every single one of them recursively\n * and then binding them back.\n *\n * @param children Whether to also clone children and scenes\n */\n clone(children = false): Dispatcher<State> {\n const dp = new Dispatcher<State>()\n\n // copy handlers.\n for (const key of this._groups.keys()) {\n const idx = key as any as number\n\n dp._groups.set(idx, new Map())\n\n for (const type of this._groups.get(idx)!.keys()) {\n // dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!].get(type)!])\n dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!.get(type)!])\n }\n }\n\n dp._groupsOrder = [...this._groupsOrder]\n dp._errorHandler = this._errorHandler\n dp._customStateKeyDelegate = this._customStateKeyDelegate\n dp._customStorage = this._customStorage\n\n if (children) {\n this._children.forEach((it) => {\n const child = it.clone(true)\n dp.addChild(child as any)\n })\n\n if (this._scenes) {\n for (const key of this._scenes.keys()) {\n const scene = this._scenes.get(key)!.clone(true)\n dp.addScene(scene as any, this._scenes.get(key)!._sceneScoped as any)\n }\n }\n }\n\n return dp\n }\n\n /**\n * Get update state object for the given key.\n *\n * For custom keys, use prefix starting with `$` to avoid\n * clashing with other keys (scene name can't start with `$`)\n *\n * @param key State storage key\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(key: string): UpdateState<S>\n\n /**\n * Get update state object for the given object.\n *\n * Equivalent to `getState(string)`, but derives\n * the key with the registered {@link StateKeyDelegate},\n * and since it could be async, this method is async too.\n *\n * @param object Object for which the state should be fetched\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<S>>\n getState<S extends object = State>(object: string | Parameters<StateKeyDelegate>[0]): MaybeAsync<UpdateState<S>> {\n if (!this._storage) {\n throw new MtArgumentError('Cannot use getUpdateState() filter without state storage')\n }\n\n if (typeof object === 'string') {\n return new UpdateState(this._storage, object, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n if (!this._customStateKeyDelegate) {\n return new UpdateState(this._storage!, key, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._customStateKeyDelegate(object)).then((customKey) => {\n if (!customKey) {\n throw new MtArgumentError('Cannot derive custom key from given object')\n }\n\n return new UpdateState(\n this._storage!,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n })\n })\n }\n\n /**\n * Get global state.\n *\n * This will load the state for the given object\n * ignoring local custom storage, key delegate and scene scope.\n */\n getGlobalState<T extends object>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<T>> {\n if (!this._parent) {\n throw new MtArgumentError('This dispatcher does not have a parent')\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n return new UpdateState(this._storage!, key, this._scene ?? null, false)\n })\n }\n\n // addUpdateHandler convenience wrappers //\n\n private _addKnownHandler(name: UpdateHandler['name'], filter: any, handler?: any, group?: number): void {\n if (typeof handler === 'number' || typeof handler === 'undefined') {\n this.addUpdateHandler(\n {\n name,\n callback: filter,\n },\n handler,\n )\n } else {\n this.addUpdateHandler(\n {\n name,\n callback: handler,\n check: filter,\n },\n group,\n )\n }\n }\n\n /**\n * Register a raw update handler without any filters\n *\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(handler: RawUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a raw update handler without any filters\n *\n * @param filter Update filter\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(filter: RawUpdateHandler['check'], handler: RawUpdateHandler['callback'], group?: number): void\n\n /** @internal */\n onRawUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('raw', filter, handler, group)\n }\n\n // begin-codegen\n\n /**\n * Register a new message handler without any filters\n *\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage(\n handler: NewMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onNewMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('new_message', filter, handler, group)\n }\n\n /**\n * Register an edit message handler without any filters\n *\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage(\n handler: EditMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onEditMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('edit_message', filter, handler, group)\n }\n\n /**\n * Register a message group handler without any filters\n *\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup(\n handler: MessageGroupHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onMessageGroup(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('message_group', filter, handler, group)\n }\n\n /**\n * Register a delete message handler without any filters\n *\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage(handler: DeleteMessageHandler['callback'], group?: number): void\n\n /**\n * Register a delete message handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteMessageUpdate>, Mod>,\n handler: DeleteMessageHandler<filters.Modify<UpdateContext<DeleteMessageUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_message', filter, handler, group)\n }\n\n /**\n * Register a chat member update handler without any filters\n *\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate(handler: ChatMemberUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a chat member update handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<ChatMemberUpdate>, Mod>,\n handler: ChatMemberUpdateHandler<filters.Modify<UpdateContext<ChatMemberUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatMemberUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_member', filter, handler, group)\n }\n\n /**\n * Register an inline query handler without any filters\n *\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery(handler: InlineQueryHandler['callback'], group?: number): void\n\n /**\n * Register an inline query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery<Mod>(\n filter: UpdateFilter<InlineQueryContext, Mod>,\n handler: InlineQueryHandler<filters.Modify<InlineQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_query', filter, handler, group)\n }\n\n /**\n * Register a chosen inline result handler without any filters\n *\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult(handler: ChosenInlineResultHandler['callback'], group?: number): void\n\n /**\n * Register a chosen inline result handler with a filter\n *\n * @param filter Update filter\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult<Mod>(\n filter: UpdateFilter<ChosenInlineResultContext, Mod>,\n handler: ChosenInlineResultHandler<filters.Modify<ChosenInlineResultContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChosenInlineResult(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chosen_inline_result', filter, handler, group)\n }\n\n /**\n * Register a callback query handler without any filters\n *\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery(\n handler: CallbackQueryHandler<\n CallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod, State>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('callback_query', filter, handler, group)\n }\n\n /**\n * Register an inline callback query handler without any filters\n *\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery(\n handler: InlineCallbackQueryHandler<\n InlineCallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod, State>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_callback_query', filter, handler, group)\n }\n\n /**\n * Register a poll update handler without any filters\n *\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate(handler: PollUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a poll update handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<PollUpdate>, Mod>,\n handler: PollUpdateHandler<filters.Modify<UpdateContext<PollUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll', filter, handler, group)\n }\n\n /**\n * Register a poll vote handler without any filters\n *\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote(handler: PollVoteHandler['callback'], group?: number): void\n\n /**\n * Register a poll vote handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote<Mod>(\n filter: UpdateFilter<UpdateContext<PollVoteUpdate>, Mod>,\n handler: PollVoteHandler<filters.Modify<UpdateContext<PollVoteUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollVote(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll_vote', filter, handler, group)\n }\n\n /**\n * Register an user status update handler without any filters\n *\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate(handler: UserStatusUpdateHandler['callback'], group?: number): void\n\n /**\n * Register an user status update handler with a filter\n *\n * @param filter Update filter\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<UserStatusUpdate>, Mod>,\n handler: UserStatusUpdateHandler<filters.Modify<UpdateContext<UserStatusUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserStatusUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_status', filter, handler, group)\n }\n\n /**\n * Register an user typing handler without any filters\n *\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping(handler: UserTypingHandler['callback'], group?: number): void\n\n /**\n * Register an user typing handler with a filter\n *\n * @param filter Update filter\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping<Mod>(\n filter: UpdateFilter<UpdateContext<UserTypingUpdate>, Mod>,\n handler: UserTypingHandler<filters.Modify<UpdateContext<UserTypingUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserTyping(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_typing', filter, handler, group)\n }\n\n /**\n * Register a history read handler without any filters\n *\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead(handler: HistoryReadHandler['callback'], group?: number): void\n\n /**\n * Register a history read handler with a filter\n *\n * @param filter Update filter\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead<Mod>(\n filter: UpdateFilter<UpdateContext<HistoryReadUpdate>, Mod>,\n handler: HistoryReadHandler<filters.Modify<UpdateContext<HistoryReadUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onHistoryRead(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('history_read', filter, handler, group)\n }\n\n /**\n * Register a bot stopped handler without any filters\n *\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped(handler: BotStoppedHandler['callback'], group?: number): void\n\n /**\n * Register a bot stopped handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped<Mod>(\n filter: UpdateFilter<UpdateContext<BotStoppedUpdate>, Mod>,\n handler: BotStoppedHandler<filters.Modify<UpdateContext<BotStoppedUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotStopped(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_stopped', filter, handler, group)\n }\n\n /**\n * Register a bot chat join request handler without any filters\n *\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest(handler: BotChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a bot chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest<Mod>(\n filter: UpdateFilter<ChatJoinRequestUpdateContext, Mod>,\n handler: BotChatJoinRequestHandler<filters.Modify<ChatJoinRequestUpdateContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a chat join request handler without any filters\n *\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest(handler: ChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest<Mod>(\n filter: UpdateFilter<UpdateContext<ChatJoinRequestUpdate>, Mod>,\n handler: ChatJoinRequestHandler<filters.Modify<UpdateContext<ChatJoinRequestUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a pre checkout query handler without any filters\n *\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery(handler: PreCheckoutQueryHandler['callback'], group?: number): void\n\n /**\n * Register a pre checkout query handler with a filter\n *\n * @param filter Update filter\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery<Mod>(\n filter: UpdateFilter<PreCheckoutQueryContext, Mod>,\n handler: PreCheckoutQueryHandler<filters.Modify<PreCheckoutQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPreCheckoutQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('pre_checkout_query', filter, handler, group)\n }\n\n /**\n * Register a story update handler without any filters\n *\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate(handler: StoryUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a story update handler with a filter\n *\n * @param filter Update filter\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<StoryUpdate>, Mod>,\n handler: StoryUpdateHandler<filters.Modify<UpdateContext<StoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onStoryUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('story', filter, handler, group)\n }\n\n /**\n * Register a delete story handler without any filters\n *\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory(handler: DeleteStoryHandler['callback'], group?: number): void\n\n /**\n * Register a delete story handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>,\n handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteStory(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_story', filter, handler, group)\n }\n\n // end-codegen\n}\n"]}
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/unified-signatures,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,max-depth,dot-notation */\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types */\n// ^^ will be looked into in MTQ-29\n\nimport {\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n MtArgumentError,\n ParsedUpdate,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { _parsedUpdateToContext, UpdateContextType } from './context/parse.js'\nimport { filters, UpdateFilter } from './filters/index.js'\n// begin-codegen-imports\nimport {\n BotChatJoinRequestHandler,\n BotReactionCountUpdateHandler,\n BotReactionUpdateHandler,\n BotStoppedHandler,\n CallbackQueryHandler,\n ChatJoinRequestHandler,\n ChatMemberUpdateHandler,\n ChosenInlineResultHandler,\n DeleteMessageHandler,\n DeleteStoryHandler,\n EditMessageHandler,\n HistoryReadHandler,\n InlineCallbackQueryHandler,\n InlineQueryHandler,\n MessageGroupHandler,\n NewMessageHandler,\n PollUpdateHandler,\n PollVoteHandler,\n PreCheckoutQueryHandler,\n RawUpdateHandler,\n StoryUpdateHandler,\n UpdateHandler,\n UserStatusUpdateHandler,\n UserTypingHandler,\n} from './handler.js'\n// end-codegen-imports\nimport { PropagationAction } from './propagation.js'\nimport {\n defaultStateKeyDelegate,\n isCompatibleStorage,\n IStateStorage,\n StateKeyDelegate,\n UpdateState,\n} from './state/index.js'\n\nexport interface DispatcherParams {\n /**\n * If this dispatcher can be used as a scene, its unique name.\n *\n * Should not be set manually, use {@link Dispatcher.scene} instead\n */\n sceneName?: string\n\n /**\n * Custom storage for this dispatcher and its children.\n *\n * @default Client's storage\n */\n storage?: IStateStorage\n\n /**\n * Custom key delegate for the dispatcher.\n */\n key?: StateKeyDelegate\n}\n\n/**\n * Updates dispatcher\n */\nexport class Dispatcher<State extends object = never> {\n private _groups: Map<number, Map<UpdateHandler['name'], UpdateHandler[]>> = new Map()\n private _groupsOrder: number[] = []\n\n private _client?: TelegramClient\n\n private _parent?: Dispatcher<any>\n private _children: Dispatcher<any>[] = []\n\n private _scenes?: Map<string, Dispatcher<any>>\n private _scene?: string\n private _sceneScoped?: boolean\n\n private _storage?: State extends never ? undefined : IStateStorage\n private _stateKeyDelegate?: State extends never ? undefined : StateKeyDelegate\n\n private _customStateKeyDelegate?: StateKeyDelegate\n private _customStorage?: IStateStorage\n\n private _errorHandler?: <T = {}>(\n err: Error,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<boolean>\n\n private _preUpdateHandler?: <T = {}>(\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<PropagationAction | void>\n\n private _postUpdateHandler?: <T = {}>(\n handled: boolean,\n update: ParsedUpdate & T,\n state?: UpdateState<State>,\n ) => MaybeAsync<void>\n\n protected constructor(client?: TelegramClient, params?: DispatcherParams) {\n this.dispatchRawUpdate = this.dispatchRawUpdate.bind(this)\n this.dispatchUpdate = this.dispatchUpdate.bind(this)\n this._onClientBeforeConnect = this._onClientBeforeConnect.bind(this)\n this._onClientBeforeClose = this._onClientBeforeClose.bind(this)\n\n // eslint-disable-next-line prefer-const\n let { storage, key, sceneName } = params ?? {}\n\n if (client) {\n this.bindToClient(client)\n\n if (!storage) {\n const _storage = client.storage\n\n if (!isCompatibleStorage(_storage)) {\n throw new MtArgumentError(\n 'Storage used by the client is not compatible with the dispatcher. Please provide a compatible storage manually',\n )\n }\n\n storage = _storage\n }\n\n if (storage) {\n this._storage = storage as any\n this._stateKeyDelegate = (key ?? defaultStateKeyDelegate) as any\n }\n } else {\n // child dispatcher without client\n\n if (storage) {\n this._customStorage = storage as any\n }\n\n if (key) {\n this._customStateKeyDelegate = key as any\n }\n\n if (sceneName) {\n if (sceneName[0] === '$') {\n throw new MtArgumentError('Scene name cannot start with $')\n }\n\n this._scene = sceneName\n }\n }\n }\n\n /**\n * Create a new dispatcher and bind it to the client.\n */\n static for<State extends object = never>(client: TelegramClient, params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(client, params)\n }\n\n /**\n * Create a new child dispatcher.\n */\n static child<State extends object = never>(params?: DispatcherParams): Dispatcher<State> {\n return new Dispatcher<State>(undefined, params)\n }\n\n /**\n * Create a new scene dispatcher\n */\n static scene<State extends object = Record<never, never>>(\n name: string,\n params?: Omit<DispatcherParams, 'sceneName'>,\n ): Dispatcher<State> {\n return new Dispatcher<State>(undefined, { sceneName: name, ...params })\n }\n\n /** For scene dispatchers, name of the scene */\n get sceneName(): string | undefined {\n return this._scene\n }\n\n private _onClientBeforeConnect() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.load?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.load?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeConnect()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeConnect()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n private _onClientBeforeClose() {\n (async () => {\n if (\n !this._parent &&\n this._storage &&\n this._storage !== (this._client!.storage as unknown as IStateStorage)\n ) {\n // this is a root dispatcher with custom storage\n await this._storage.save?.()\n await this._storage.destroy?.()\n }\n\n if (this._parent && this._customStorage) {\n // this is a child dispatcher with custom storage\n await this._customStorage.save?.()\n await this._customStorage.destroy?.()\n }\n\n for (const child of this._children) {\n child._onClientBeforeClose()\n }\n\n if (this._scenes) {\n for (const scene of this._scenes.values()) {\n scene._onClientBeforeClose()\n }\n }\n })().catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Bind the dispatcher to the client.\n * Called by the constructor automatically if\n * `client` was passed.\n *\n * Dispatcher also uses bound client to throw errors\n */\n bindToClient(client: TelegramClient): void {\n client.on('update', this.dispatchUpdate)\n client.on('raw_update', this.dispatchRawUpdate)\n client.on('before_connect', this._onClientBeforeConnect)\n client.on('before_close', this._onClientBeforeClose)\n\n this._client = client\n }\n\n /**\n * Unbind a dispatcher from the client.\n */\n unbind(): void {\n if (this._client) {\n this._client.off('update', this.dispatchUpdate)\n this._client.off('raw_update', this.dispatchRawUpdate)\n this._client.off('before_connect', this._onClientBeforeConnect)\n this._client.off('before_close', this._onClientBeforeClose)\n\n this._client = undefined\n }\n }\n\n /**\n * Process a raw update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchRawUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n * @param peers Peers index\n */\n dispatchRawUpdate(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchRawUpdateNow(update, peers).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process a raw update right now in the current stack.\n *\n * Unlike {@link dispatchRawUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @param peers Peers map\n * @returns Whether the update was handled\n */\n async dispatchRawUpdateNow(update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex): Promise<boolean> {\n if (!this._client) return false\n\n let handled = false\n\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has('raw')) {\n const handlers = group.get('raw')! as RawUpdateHandler[]\n\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!h.check || (await h.check(this._client, update, peers))) {\n result = await h.callback(this._client, update, peers)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n return handled\n }\n\n break\n }\n }\n }\n\n for (const child of this._children) {\n const childHandled = await child.dispatchRawUpdateNow(update, peers)\n handled ||= childHandled\n }\n\n return handled\n }\n\n /**\n * Process an update with this dispatcher.\n * Calling this method without bound client will not work.\n *\n * Under the hood asynchronously calls {@link dispatchUpdateNow}\n * with error handler set to client's one.\n *\n * @param update Update to process\n */\n dispatchUpdate(update: ParsedUpdate): void {\n if (!this._client) return\n\n // order does not matter in the dispatcher,\n // so we can handle each update in its own task\n this.dispatchUpdateNow(update).catch((err) => this._client!._emitError(err))\n }\n\n /**\n * Process an update right now in the current stack.\n *\n * Unlike {@link dispatchUpdate}, this does not schedule\n * the update to be dispatched, but dispatches it immediately,\n * and after `await`ing this method you can be certain that the update\n * was fully processed by all the registered handlers, including children.\n *\n * @param update Update to process\n * @returns Whether the update was handled\n */\n async dispatchUpdateNow(update: ParsedUpdate): Promise<boolean> {\n return this._dispatchUpdateNowImpl(update)\n }\n\n private async _dispatchUpdateNowImpl(\n update: ParsedUpdate,\n // this is getting a bit crazy lol\n parsedState?: UpdateState<State> | null,\n parsedScene?: string | null,\n forceScene?: true,\n parsedContext?: UpdateContextType,\n ): Promise<boolean> {\n if (!this._client) return false\n\n if (parsedScene === undefined) {\n if (\n this._storage &&\n this._scenes &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n // no need to fetch scene if there are no registered scenes\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n parsedScene = await this._storage.getCurrentScene(key)\n } else {\n parsedScene = null\n }\n } else {\n parsedScene = null\n }\n }\n\n if (!forceScene && parsedScene !== null) {\n if (this._scene) {\n if (this._scene !== parsedScene) {\n // should not happen, but just in case\n return false\n }\n } else {\n if (!this._scenes || !this._scenes.has(parsedScene)) {\n // not registered scene\n return false\n }\n\n return this._scenes.get(parsedScene)!._dispatchUpdateNowImpl(update, parsedState, parsedScene, true)\n }\n }\n\n if (parsedState === undefined) {\n if (\n this._storage &&\n (update.name === 'new_message' ||\n update.name === 'edit_message' ||\n update.name === 'callback_query' ||\n update.name === 'message_group')\n ) {\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n const key = await this._stateKeyDelegate!(parsedContext as any)\n\n if (key) {\n let customKey\n\n if (\n !this._customStateKeyDelegate ||\n (customKey = await this._customStateKeyDelegate(parsedContext as any))\n ) {\n parsedState = new UpdateState(\n this._storage,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n }\n } else {\n parsedState = null\n }\n } else {\n parsedState = null\n }\n }\n\n let shouldDispatch = true\n let shouldDispatchChildren = true\n let handled = false\n\n switch (await this._preUpdateHandler?.(update, parsedState as any)) {\n case 'stop':\n shouldDispatch = false\n break\n case 'stop-children':\n return false\n }\n\n if (shouldDispatch) {\n outer: for (const grp of this._groupsOrder) {\n const group = this._groups.get(grp)!\n\n if (group.has(update.name)) {\n // raw is not handled here, so we can safely assume this\n const handlers = group.get(update.name)! as Exclude<UpdateHandler, RawUpdateHandler>[]\n\n try {\n for (const h of handlers) {\n let result: void | PropagationAction\n\n if (!parsedContext) parsedContext = _parsedUpdateToContext(this._client, update)\n if (!h.check || (await h.check(parsedContext as any, parsedState as never))) {\n result = await h.callback(parsedContext as any, parsedState as never)\n handled = true\n } else continue\n\n switch (result) {\n case 'continue':\n continue\n case 'stop':\n break outer\n case 'stop-children':\n shouldDispatchChildren = false\n break outer\n\n case 'scene': {\n if (!parsedState) {\n throw new MtArgumentError('Cannot use ToScene without state')\n }\n\n const scene = parsedState['_scene']\n\n if (!scene) {\n throw new MtArgumentError('Cannot use ToScene without entering a scene')\n }\n\n return this._scenes!.get(scene)!._dispatchUpdateNowImpl(\n update,\n undefined,\n scene,\n true,\n )\n }\n }\n\n break\n }\n } catch (e: any) {\n if (this._errorHandler) {\n const handled = await this._errorHandler(e, update, parsedState as never)\n if (!handled) throw e\n } else {\n throw e\n }\n }\n }\n }\n }\n\n if (shouldDispatchChildren) {\n for (const child of this._children) {\n const childHandled = await child._dispatchUpdateNowImpl(update)\n handled ||= childHandled\n }\n }\n\n await this._postUpdateHandler?.(handled, update, parsedState as any)\n\n return handled\n }\n\n /**\n * Add an update handler to a given handlers group\n *\n * @param handler Update handler\n * @param group Handler group index\n */\n addUpdateHandler(handler: UpdateHandler, group = 0): void {\n if (!this._groups.has(group)) {\n this._groups.set(group, new Map())\n this._groupsOrder.push(group)\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n if (!this._groups.get(group)!.has(handler.name)) {\n this._groups.get(group)!.set(handler.name, [])\n }\n\n this._groups.get(group)!.get(handler.name)!.push(handler)\n }\n\n /**\n * Remove an update handler (or handlers) from a given\n * handler group.\n *\n * @param handler Update handler to remove, its name or `'all'` to remove all\n * @param group Handler group index (null to affect all groups)\n */\n removeUpdateHandler(handler: UpdateHandler | UpdateHandler['name'] | 'all', group: number | null = 0): void {\n if (group !== null && !this._groups.has(group)) {\n return\n }\n\n if (typeof handler === 'string') {\n if (handler === 'all') {\n if (group === null) {\n this._groups = new Map()\n } else {\n this._groups.delete(group)\n }\n } else if (group !== null) {\n this._groups.get(group)!.delete(handler)\n }\n\n return\n }\n\n if (group === null) return\n\n if (!this._groups.get(group)!.has(handler.name)) {\n return\n }\n\n const idx = this._groups.get(group)!.get(handler.name)!.indexOf(handler)\n\n if (idx > -1) {\n this._groups.get(group)!.get(handler.name)!.splice(idx, 1)\n }\n }\n\n /**\n * Register an error handler.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) whenever\n * an error is thrown inside an update handler.\n * Not used for raw update handlers\n *\n * When an error is thrown, but there is no error\n * handler, it is propagated to `TelegramClient`.\n *\n * There can be at most one error handler.\n * Pass `null` to remove it.\n *\n * @param handler Error handler\n */\n onError<T = {}>(\n handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<boolean>) | null,\n ): void {\n if (handler) this._errorHandler = handler\n else this._errorHandler = undefined\n }\n\n /**\n * Register pre-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) before processing\n * an update, and can be used to skip this update.\n *\n * There can be at most one pre-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPreUpdate<T = {}>(\n handler:\n | ((update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<PropagationAction | void>)\n | null,\n ): void {\n if (handler) this._preUpdateHandler = handler\n else this._preUpdateHandler = undefined\n }\n\n /**\n * Register post-update middleware.\n *\n * This is used locally within this dispatcher\n * (does not affect children/parent) after successfully\n * processing an update, and can be used for stats.\n *\n * There can be at most one post-update middleware.\n * Pass `null` to remove it.\n *\n * @param handler Pre-update middleware\n */\n onPostUpdate<T = {}>(\n handler: ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState<State>) => MaybeAsync<void>) | null,\n ): void {\n if (handler) this._postUpdateHandler = handler\n else this._postUpdateHandler = undefined\n }\n\n /**\n * Set error handler that will propagate\n * the error to the parent dispatcher\n */\n propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState<State>): MaybeAsync<boolean> {\n if (!this.parent) {\n throw new MtArgumentError('This dispatcher is not a child')\n }\n\n if (this.parent._errorHandler) {\n return this.parent._errorHandler(err, update, state as any)\n }\n throw err\n }\n\n // children //\n\n /**\n * Get parent dispatcher if current dispatcher is a child.\n * Otherwise, return `null`\n */\n get parent(): Dispatcher<any> | null {\n return this._parent ?? null\n }\n\n private _prepareChild(child: Dispatcher<any>): void {\n if (child._client) {\n throw new MtArgumentError(\n 'Provided dispatcher is ' +\n (child._parent ?\n 'already a child. Use parent.removeChild() before calling addChild()' :\n 'already bound to a client. Use unbind() before calling addChild()'),\n )\n }\n\n child._parent = this as any\n child._client = this._client\n child._storage = this._storage\n child._stateKeyDelegate = this._stateKeyDelegate\n child._customStorage ??= this._customStorage\n child._customStateKeyDelegate ??= this._customStateKeyDelegate\n }\n\n /**\n * Add a child dispatcher.\n *\n * Child dispatchers are called when dispatching updates\n * just like normal, except they can be controlled\n * externally. Additionally, child dispatcher have their own\n * independent handler grouping that does not interfere with parent's,\n * including `StopPropagation` (i.e. returning `StopPropagation` will\n * still call children. To entirely stop, use `StopChildrenPropagation`)\n *\n * Note that child dispatchers share the same TelegramClient and\n * storage binding as the parent, don't bind them manually.\n *\n * @param child Other dispatcher\n */\n addChild(child: Dispatcher<State>): void {\n if (this._children.includes(child)) return\n\n this._prepareChild(child)\n this._children.push(child)\n }\n\n /**\n * Add a dispatcher as a scene with a non-scoped state.\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene\n */\n addScene(scene: Dispatcher<State>, scoped: false): void\n /**\n * Add a dispatcher as a scene with a scoped state\n *\n * Scoped storage for a scene means that the scene will\n * have its own storage, that is only available within\n * the scene and does not interfere with global state.\n * Non-scoped, on the other hand, is the same state as\n * the one used for the root dispatcher\n *\n * @param uid UID of the scene\n * @param scene Dispatcher representing the scene\n * @param scoped Whether to use scoped FSM storage for the scene (defaults to `true`)\n */\n addScene(scene: Dispatcher<any>, scoped?: true): void\n addScene(scene: Dispatcher<any>, scoped = true): void {\n if (!this._scenes) this._scenes = new Map()\n\n if (!scene._scene) {\n throw new MtArgumentError(\n 'Non-scene dispatcher passed to addScene. Use `Dispatcher.scene()` to create one.',\n )\n }\n\n if (this._scenes.has(scene._scene)) {\n throw new MtArgumentError(`Scene with name ${scene._scene} is already registered!`)\n }\n\n this._prepareChild(scene)\n scene._sceneScoped = scoped\n this._scenes.set(scene._scene, scene)\n }\n\n /**\n * Remove a child dispatcher.\n *\n * Removing child dispatcher will also remove\n * child dispatcher's client binding.\n *\n * If the provided dispatcher is not a child of current,\n * this function will silently fail.\n *\n * @param child Other dispatcher\n */\n removeChild(child: Dispatcher<any>): void {\n const idx = this._children.indexOf(child)\n\n if (idx > -1) {\n child._unparent()\n this._children.splice(idx, 1)\n }\n }\n\n private _unparent(): void {\n this._parent = this._client = undefined\n ;(this as any)._stateKeyDelegate = undefined\n ;(this as any)._storage = undefined\n }\n\n /**\n * Extend current dispatcher by copying other dispatcher's\n * handlers and children to the current.\n *\n * This might be more efficient for simple cases, but do note that the handler\n * groups, children and scenes will get merged (unlike {@link addChild},\n * where they are independent). Also note that unlike with children,\n * when adding handlers to `other` *after* you extended\n * the current dispatcher, changes will not be applied.\n *\n * @param other Other dispatcher\n */\n extend(other: Dispatcher<State>): void {\n if (other._customStorage || other._customStateKeyDelegate) {\n throw new MtArgumentError('Provided dispatcher has custom storage and cannot be extended from.')\n }\n\n other._groupsOrder.forEach((group) => {\n if (!this._groups.has(group)) {\n this._groups.set(group, other._groups.get(group)!)\n this._groupsOrder.push(group)\n } else {\n const otherGrp = other._groups.get(group)!\n const selfGrp = this._groups.get(group)!\n\n for (const typ of otherGrp.keys()) {\n if (!selfGrp.has(typ)) {\n selfGrp.set(typ, otherGrp.get(typ)!)\n } else {\n // selfGrp[typ].push(...otherGrp[typ])\n selfGrp.get(typ)!.push(...otherGrp.get(typ)!)\n }\n }\n }\n })\n\n other._children.forEach((it) => {\n it._unparent()\n this.addChild(it as any)\n })\n\n if (other._scenes) {\n const otherScenes = other._scenes\n if (!this._scenes) this._scenes = new Map()\n const myScenes = this._scenes\n\n for (const key of otherScenes.keys()) {\n otherScenes.get(key)!._unparent()\n\n if (myScenes.has(key)) {\n // will be overwritten\n myScenes.delete(key)\n }\n\n this.addScene(otherScenes.get(key) as any, otherScenes.get(key)!._sceneScoped as any)\n }\n }\n\n this._groupsOrder.sort((a, b) => a - b)\n }\n\n /**\n * Create a clone of this dispatcher, that has the same handlers,\n * but is not bound to a client or to a parent dispatcher.\n *\n * Custom Storage and key delegate are copied too.\n *\n * By default, child dispatchers (and scenes) are ignored, since\n * that requires cloning every single one of them recursively\n * and then binding them back.\n *\n * @param children Whether to also clone children and scenes\n */\n clone(children = false): Dispatcher<State> {\n const dp = new Dispatcher<State>()\n\n // copy handlers.\n for (const key of this._groups.keys()) {\n const idx = key as any as number\n\n dp._groups.set(idx, new Map())\n\n for (const type of this._groups.get(idx)!.keys()) {\n // dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!].get(type)!])\n dp._groups.get(idx)!.set(type, [...this._groups.get(idx)!.get(type)!])\n }\n }\n\n dp._groupsOrder = [...this._groupsOrder]\n dp._errorHandler = this._errorHandler\n dp._customStateKeyDelegate = this._customStateKeyDelegate\n dp._customStorage = this._customStorage\n\n if (children) {\n this._children.forEach((it) => {\n const child = it.clone(true)\n dp.addChild(child as any)\n })\n\n if (this._scenes) {\n for (const key of this._scenes.keys()) {\n const scene = this._scenes.get(key)!.clone(true)\n dp.addScene(scene as any, this._scenes.get(key)!._sceneScoped as any)\n }\n }\n }\n\n return dp\n }\n\n /**\n * Get update state object for the given key.\n *\n * For custom keys, use prefix starting with `$` to avoid\n * clashing with other keys (scene name can't start with `$`)\n *\n * @param key State storage key\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(key: string): UpdateState<S>\n\n /**\n * Get update state object for the given object.\n *\n * Equivalent to `getState(string)`, but derives\n * the key with the registered {@link StateKeyDelegate},\n * and since it could be async, this method is async too.\n *\n * @param object Object for which the state should be fetched\n * @template S State type, defaults to dispatcher's state type. Only checked at compile-time\n */\n getState<S extends object = State>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<S>>\n getState<S extends object = State>(object: string | Parameters<StateKeyDelegate>[0]): MaybeAsync<UpdateState<S>> {\n if (!this._storage) {\n throw new MtArgumentError('Cannot use getUpdateState() filter without state storage')\n }\n\n if (typeof object === 'string') {\n return new UpdateState(this._storage, object, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n if (!this._customStateKeyDelegate) {\n return new UpdateState(this._storage!, key, this._scene ?? null, this._sceneScoped, this._customStorage)\n }\n\n return Promise.resolve(this._customStateKeyDelegate(object)).then((customKey) => {\n if (!customKey) {\n throw new MtArgumentError('Cannot derive custom key from given object')\n }\n\n return new UpdateState(\n this._storage!,\n key,\n this._scene ?? null,\n this._sceneScoped,\n this._customStorage,\n customKey,\n )\n })\n })\n }\n\n /**\n * Get global state.\n *\n * This will load the state for the given object\n * ignoring local custom storage, key delegate and scene scope.\n */\n getGlobalState<T extends object>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<T>> {\n if (!this._parent) {\n throw new MtArgumentError('This dispatcher does not have a parent')\n }\n\n return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {\n if (!key) {\n throw new MtArgumentError('Cannot derive key from given object')\n }\n\n return new UpdateState(this._storage!, key, this._scene ?? null, false)\n })\n }\n\n // addUpdateHandler convenience wrappers //\n\n private _addKnownHandler(name: UpdateHandler['name'], filter: any, handler?: any, group?: number): void {\n if (typeof handler === 'number' || typeof handler === 'undefined') {\n this.addUpdateHandler(\n {\n name,\n callback: filter,\n },\n handler,\n )\n } else {\n this.addUpdateHandler(\n {\n name,\n callback: handler,\n check: filter,\n },\n group,\n )\n }\n }\n\n /**\n * Register a raw update handler without any filters\n *\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(handler: RawUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a raw update handler without any filters\n *\n * @param filter Update filter\n * @param handler Raw update handler\n * @param group Handler group index\n */\n onRawUpdate(filter: RawUpdateHandler['check'], handler: RawUpdateHandler['callback'], group?: number): void\n\n /** @internal */\n onRawUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('raw', filter, handler, group)\n }\n\n // begin-codegen\n\n /**\n * Register a new message handler without any filters\n *\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage(\n handler: NewMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a new message handler with a filter\n *\n * @param filter Update filter\n * @param handler New message handler\n * @param group Handler group index\n */\n onNewMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: NewMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onNewMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('new_message', filter, handler, group)\n }\n\n /**\n * Register an edit message handler without any filters\n *\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage(\n handler: EditMessageHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an edit message handler with a filter\n *\n * @param filter Update filter\n * @param handler Edit message handler\n * @param group Handler group index\n */\n onEditMessage<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: EditMessageHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onEditMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('edit_message', filter, handler, group)\n }\n\n /**\n * Register a message group handler without any filters\n *\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup(\n handler: MessageGroupHandler<MessageContext, State extends never ? never : UpdateState<State>>['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod, State>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a message group handler with a filter\n *\n * @param filter Update filter\n * @param handler Message group handler\n * @param group Handler group index\n */\n onMessageGroup<Mod>(\n filter: UpdateFilter<MessageContext, Mod>,\n handler: MessageGroupHandler<\n filters.Modify<MessageContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onMessageGroup(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('message_group', filter, handler, group)\n }\n\n /**\n * Register a delete message handler without any filters\n *\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage(handler: DeleteMessageHandler['callback'], group?: number): void\n\n /**\n * Register a delete message handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete message handler\n * @param group Handler group index\n */\n onDeleteMessage<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteMessageUpdate>, Mod>,\n handler: DeleteMessageHandler<filters.Modify<UpdateContext<DeleteMessageUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteMessage(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_message', filter, handler, group)\n }\n\n /**\n * Register a chat member update handler without any filters\n *\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate(handler: ChatMemberUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a chat member update handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat member update handler\n * @param group Handler group index\n */\n onChatMemberUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<ChatMemberUpdate>, Mod>,\n handler: ChatMemberUpdateHandler<filters.Modify<UpdateContext<ChatMemberUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatMemberUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_member', filter, handler, group)\n }\n\n /**\n * Register an inline query handler without any filters\n *\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery(handler: InlineQueryHandler['callback'], group?: number): void\n\n /**\n * Register an inline query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline query handler\n * @param group Handler group index\n */\n onInlineQuery<Mod>(\n filter: UpdateFilter<InlineQueryContext, Mod>,\n handler: InlineQueryHandler<filters.Modify<InlineQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_query', filter, handler, group)\n }\n\n /**\n * Register a chosen inline result handler without any filters\n *\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult(handler: ChosenInlineResultHandler['callback'], group?: number): void\n\n /**\n * Register a chosen inline result handler with a filter\n *\n * @param filter Update filter\n * @param handler Chosen inline result handler\n * @param group Handler group index\n */\n onChosenInlineResult<Mod>(\n filter: UpdateFilter<ChosenInlineResultContext, Mod>,\n handler: ChosenInlineResultHandler<filters.Modify<ChosenInlineResultContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChosenInlineResult(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chosen_inline_result', filter, handler, group)\n }\n\n /**\n * Register a callback query handler without any filters\n *\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery(\n handler: CallbackQueryHandler<\n CallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod, State>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register a callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Callback query handler\n * @param group Handler group index\n */\n onCallbackQuery<Mod>(\n filter: UpdateFilter<CallbackQueryContext, Mod>,\n handler: CallbackQueryHandler<\n filters.Modify<CallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('callback_query', filter, handler, group)\n }\n\n /**\n * Register an inline callback query handler without any filters\n *\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery(\n handler: InlineCallbackQueryHandler<\n InlineCallbackQueryContext,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod, State>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /**\n * Register an inline callback query handler with a filter\n *\n * @param filter Update filter\n * @param handler Inline callback query handler\n * @param group Handler group index\n */\n onInlineCallbackQuery<Mod>(\n filter: UpdateFilter<InlineCallbackQueryContext, Mod>,\n handler: InlineCallbackQueryHandler<\n filters.Modify<InlineCallbackQueryContext, Mod>,\n State extends never ? never : UpdateState<State>\n >['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onInlineCallbackQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('inline_callback_query', filter, handler, group)\n }\n\n /**\n * Register a poll update handler without any filters\n *\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate(handler: PollUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a poll update handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll update handler\n * @param group Handler group index\n */\n onPollUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<PollUpdate>, Mod>,\n handler: PollUpdateHandler<filters.Modify<UpdateContext<PollUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll', filter, handler, group)\n }\n\n /**\n * Register a poll vote handler without any filters\n *\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote(handler: PollVoteHandler['callback'], group?: number): void\n\n /**\n * Register a poll vote handler with a filter\n *\n * @param filter Update filter\n * @param handler Poll vote handler\n * @param group Handler group index\n */\n onPollVote<Mod>(\n filter: UpdateFilter<UpdateContext<PollVoteUpdate>, Mod>,\n handler: PollVoteHandler<filters.Modify<UpdateContext<PollVoteUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPollVote(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('poll_vote', filter, handler, group)\n }\n\n /**\n * Register an user status update handler without any filters\n *\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate(handler: UserStatusUpdateHandler['callback'], group?: number): void\n\n /**\n * Register an user status update handler with a filter\n *\n * @param filter Update filter\n * @param handler User status update handler\n * @param group Handler group index\n */\n onUserStatusUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<UserStatusUpdate>, Mod>,\n handler: UserStatusUpdateHandler<filters.Modify<UpdateContext<UserStatusUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserStatusUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_status', filter, handler, group)\n }\n\n /**\n * Register an user typing handler without any filters\n *\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping(handler: UserTypingHandler['callback'], group?: number): void\n\n /**\n * Register an user typing handler with a filter\n *\n * @param filter Update filter\n * @param handler User typing handler\n * @param group Handler group index\n */\n onUserTyping<Mod>(\n filter: UpdateFilter<UpdateContext<UserTypingUpdate>, Mod>,\n handler: UserTypingHandler<filters.Modify<UpdateContext<UserTypingUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onUserTyping(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('user_typing', filter, handler, group)\n }\n\n /**\n * Register a history read handler without any filters\n *\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead(handler: HistoryReadHandler['callback'], group?: number): void\n\n /**\n * Register a history read handler with a filter\n *\n * @param filter Update filter\n * @param handler History read handler\n * @param group Handler group index\n */\n onHistoryRead<Mod>(\n filter: UpdateFilter<UpdateContext<HistoryReadUpdate>, Mod>,\n handler: HistoryReadHandler<filters.Modify<UpdateContext<HistoryReadUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onHistoryRead(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('history_read', filter, handler, group)\n }\n\n /**\n * Register a bot stopped handler without any filters\n *\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped(handler: BotStoppedHandler['callback'], group?: number): void\n\n /**\n * Register a bot stopped handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot stopped handler\n * @param group Handler group index\n */\n onBotStopped<Mod>(\n filter: UpdateFilter<UpdateContext<BotStoppedUpdate>, Mod>,\n handler: BotStoppedHandler<filters.Modify<UpdateContext<BotStoppedUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotStopped(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_stopped', filter, handler, group)\n }\n\n /**\n * Register a bot chat join request handler without any filters\n *\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest(handler: BotChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a bot chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot chat join request handler\n * @param group Handler group index\n */\n onBotChatJoinRequest<Mod>(\n filter: UpdateFilter<ChatJoinRequestUpdateContext, Mod>,\n handler: BotChatJoinRequestHandler<filters.Modify<ChatJoinRequestUpdateContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a chat join request handler without any filters\n *\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest(handler: ChatJoinRequestHandler['callback'], group?: number): void\n\n /**\n * Register a chat join request handler with a filter\n *\n * @param filter Update filter\n * @param handler Chat join request handler\n * @param group Handler group index\n */\n onChatJoinRequest<Mod>(\n filter: UpdateFilter<UpdateContext<ChatJoinRequestUpdate>, Mod>,\n handler: ChatJoinRequestHandler<filters.Modify<UpdateContext<ChatJoinRequestUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onChatJoinRequest(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('chat_join_request', filter, handler, group)\n }\n\n /**\n * Register a pre checkout query handler without any filters\n *\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery(handler: PreCheckoutQueryHandler['callback'], group?: number): void\n\n /**\n * Register a pre checkout query handler with a filter\n *\n * @param filter Update filter\n * @param handler Pre checkout query handler\n * @param group Handler group index\n */\n onPreCheckoutQuery<Mod>(\n filter: UpdateFilter<PreCheckoutQueryContext, Mod>,\n handler: PreCheckoutQueryHandler<filters.Modify<PreCheckoutQueryContext, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onPreCheckoutQuery(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('pre_checkout_query', filter, handler, group)\n }\n\n /**\n * Register a story update handler without any filters\n *\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate(handler: StoryUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a story update handler with a filter\n *\n * @param filter Update filter\n * @param handler Story update handler\n * @param group Handler group index\n */\n onStoryUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<StoryUpdate>, Mod>,\n handler: StoryUpdateHandler<filters.Modify<UpdateContext<StoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onStoryUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('story', filter, handler, group)\n }\n\n /**\n * Register a delete story handler without any filters\n *\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory(handler: DeleteStoryHandler['callback'], group?: number): void\n\n /**\n * Register a delete story handler with a filter\n *\n * @param filter Update filter\n * @param handler Delete story handler\n * @param group Handler group index\n */\n onDeleteStory<Mod>(\n filter: UpdateFilter<UpdateContext<DeleteStoryUpdate>, Mod>,\n handler: DeleteStoryHandler<filters.Modify<UpdateContext<DeleteStoryUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onDeleteStory(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('delete_story', filter, handler, group)\n }\n\n /**\n * Register a bot reaction update handler without any filters\n *\n * @param handler Bot reaction update handler\n * @param group Handler group index\n */\n onBotReactionUpdate(handler: BotReactionUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a bot reaction update handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot reaction update handler\n * @param group Handler group index\n */\n onBotReactionUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<BotReactionUpdate>, Mod>,\n handler: BotReactionUpdateHandler<filters.Modify<UpdateContext<BotReactionUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotReactionUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_reaction', filter, handler, group)\n }\n\n /**\n * Register a bot reaction count update handler without any filters\n *\n * @param handler Bot reaction count update handler\n * @param group Handler group index\n */\n onBotReactionCountUpdate(handler: BotReactionCountUpdateHandler['callback'], group?: number): void\n\n /**\n * Register a bot reaction count update handler with a filter\n *\n * @param filter Update filter\n * @param handler Bot reaction count update handler\n * @param group Handler group index\n */\n onBotReactionCountUpdate<Mod>(\n filter: UpdateFilter<UpdateContext<BotReactionCountUpdate>, Mod>,\n handler: BotReactionCountUpdateHandler<filters.Modify<UpdateContext<BotReactionCountUpdate>, Mod>>['callback'],\n group?: number,\n ): void\n\n /** @internal */\n onBotReactionCountUpdate(filter: any, handler?: any, group?: number): void {\n this._addKnownHandler('bot_reaction_count', filter, handler, group)\n }\n\n // end-codegen\n}\n"]}
package/esm/handler.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
1
+ import { BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, ChatJoinRequestUpdate, ChatMemberUpdate, DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, MaybeAsync, PeersIndex, PollUpdate, PollVoteUpdate, StoryUpdate, TelegramClient, tl, UserStatusUpdate, UserTypingUpdate } from '@mtcute/client';
2
2
  import { UpdateContext } from './context/base.js';
3
3
  import { CallbackQueryContext, ChatJoinRequestUpdateContext, ChosenInlineResultContext, InlineCallbackQueryContext, InlineQueryContext, MessageContext, PreCheckoutQueryContext } from './context/index.js';
4
4
  import { PropagationAction } from './propagation.js';
@@ -29,4 +29,6 @@ export type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = P
29
29
  export type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>;
30
30
  export type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>;
31
31
  export type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>;
32
- export type UpdateHandler = RawUpdateHandler | NewMessageHandler | EditMessageHandler | MessageGroupHandler | DeleteMessageHandler | ChatMemberUpdateHandler | InlineQueryHandler | ChosenInlineResultHandler | CallbackQueryHandler | InlineCallbackQueryHandler | PollUpdateHandler | PollVoteHandler | UserStatusUpdateHandler | UserTypingHandler | HistoryReadHandler | BotStoppedHandler | BotChatJoinRequestHandler | ChatJoinRequestHandler | PreCheckoutQueryHandler | StoryUpdateHandler | DeleteStoryHandler;
32
+ export type BotReactionUpdateHandler<T = UpdateContext<BotReactionUpdate>> = ParsedUpdateHandler<'bot_reaction', T>;
33
+ export type BotReactionCountUpdateHandler<T = UpdateContext<BotReactionCountUpdate>> = ParsedUpdateHandler<'bot_reaction_count', T>;
34
+ export type UpdateHandler = RawUpdateHandler | NewMessageHandler | EditMessageHandler | MessageGroupHandler | DeleteMessageHandler | ChatMemberUpdateHandler | InlineQueryHandler | ChosenInlineResultHandler | CallbackQueryHandler | InlineCallbackQueryHandler | PollUpdateHandler | PollVoteHandler | UserStatusUpdateHandler | UserTypingHandler | HistoryReadHandler | BotStoppedHandler | BotChatJoinRequestHandler | ChatJoinRequestHandler | PreCheckoutQueryHandler | StoryUpdateHandler | DeleteStoryHandler | BotReactionUpdateHandler | BotReactionCountUpdateHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":";AA4GA,cAAc","sourcesContent":["import {\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { PropagationAction } from './propagation.js'\n\nexport interface BaseUpdateHandler<Name, Handler, Checker> {\n name: Name\n callback: Handler\n\n check?: Checker\n}\n\nexport type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<\n Name,\n (update: Update, state: State) => MaybeAsync<void | PropagationAction>,\n (update: Update, state: State) => MaybeAsync<boolean>\n>\n\nexport type RawUpdateHandler = BaseUpdateHandler<\n 'raw',\n (\n client: TelegramClient,\n update: tl.TypeUpdate | tl.TypeMessage,\n peers: PeersIndex,\n ) => MaybeAsync<void | PropagationAction>,\n (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybeAsync<boolean>\n>\n\n// begin-codegen\nexport type NewMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'new_message', T, S>\nexport type EditMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'edit_message', T, S>\nexport type MessageGroupHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'message_group', T, S>\nexport type DeleteMessageHandler<T = UpdateContext<DeleteMessageUpdate>> = ParsedUpdateHandler<'delete_message', T>\nexport type ChatMemberUpdateHandler<T = UpdateContext<ChatMemberUpdate>> = ParsedUpdateHandler<'chat_member', T>\nexport type InlineQueryHandler<T = InlineQueryContext> = ParsedUpdateHandler<'inline_query', T>\nexport type ChosenInlineResultHandler<T = ChosenInlineResultContext> = ParsedUpdateHandler<'chosen_inline_result', T>\nexport type CallbackQueryHandler<T = CallbackQueryContext, S = never> = ParsedUpdateHandler<'callback_query', T, S>\nexport type InlineCallbackQueryHandler<T = InlineCallbackQueryContext, S = never> = ParsedUpdateHandler<\n 'inline_callback_query',\n T,\n S\n>\nexport type PollUpdateHandler<T = UpdateContext<PollUpdate>> = ParsedUpdateHandler<'poll', T>\nexport type PollVoteHandler<T = UpdateContext<PollVoteUpdate>> = ParsedUpdateHandler<'poll_vote', T>\nexport type UserStatusUpdateHandler<T = UpdateContext<UserStatusUpdate>> = ParsedUpdateHandler<'user_status', T>\nexport type UserTypingHandler<T = UpdateContext<UserTypingUpdate>> = ParsedUpdateHandler<'user_typing', T>\nexport type HistoryReadHandler<T = UpdateContext<HistoryReadUpdate>> = ParsedUpdateHandler<'history_read', T>\nexport type BotStoppedHandler<T = UpdateContext<BotStoppedUpdate>> = ParsedUpdateHandler<'bot_stopped', T>\nexport type BotChatJoinRequestHandler<T = ChatJoinRequestUpdateContext> = ParsedUpdateHandler<\n 'bot_chat_join_request',\n T\n>\nexport type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = ParsedUpdateHandler<\n 'chat_join_request',\n T\n>\nexport type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>\nexport type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>\nexport type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>\n\nexport type UpdateHandler =\n | RawUpdateHandler\n | NewMessageHandler\n | EditMessageHandler\n | MessageGroupHandler\n | DeleteMessageHandler\n | ChatMemberUpdateHandler\n | InlineQueryHandler\n | ChosenInlineResultHandler\n | CallbackQueryHandler\n | InlineCallbackQueryHandler\n | PollUpdateHandler\n | PollVoteHandler\n | UserStatusUpdateHandler\n | UserTypingHandler\n | HistoryReadHandler\n | BotStoppedHandler\n | BotChatJoinRequestHandler\n | ChatJoinRequestHandler\n | PreCheckoutQueryHandler\n | StoryUpdateHandler\n | DeleteStoryHandler\n\n// end-codegen\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":";AAqHA,cAAc","sourcesContent":["import {\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n ChatJoinRequestUpdate,\n ChatMemberUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n HistoryReadUpdate,\n MaybeAsync,\n PeersIndex,\n PollUpdate,\n PollVoteUpdate,\n StoryUpdate,\n TelegramClient,\n tl,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '@mtcute/client'\n\nimport { UpdateContext } from './context/base.js'\nimport {\n CallbackQueryContext,\n ChatJoinRequestUpdateContext,\n ChosenInlineResultContext,\n InlineCallbackQueryContext,\n InlineQueryContext,\n MessageContext,\n PreCheckoutQueryContext,\n} from './context/index.js'\nimport { PropagationAction } from './propagation.js'\n\nexport interface BaseUpdateHandler<Name, Handler, Checker> {\n name: Name\n callback: Handler\n\n check?: Checker\n}\n\nexport type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<\n Name,\n (update: Update, state: State) => MaybeAsync<void | PropagationAction>,\n (update: Update, state: State) => MaybeAsync<boolean>\n>\n\nexport type RawUpdateHandler = BaseUpdateHandler<\n 'raw',\n (\n client: TelegramClient,\n update: tl.TypeUpdate | tl.TypeMessage,\n peers: PeersIndex,\n ) => MaybeAsync<void | PropagationAction>,\n (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybeAsync<boolean>\n>\n\n// begin-codegen\nexport type NewMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'new_message', T, S>\nexport type EditMessageHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'edit_message', T, S>\nexport type MessageGroupHandler<T = MessageContext, S = never> = ParsedUpdateHandler<'message_group', T, S>\nexport type DeleteMessageHandler<T = UpdateContext<DeleteMessageUpdate>> = ParsedUpdateHandler<'delete_message', T>\nexport type ChatMemberUpdateHandler<T = UpdateContext<ChatMemberUpdate>> = ParsedUpdateHandler<'chat_member', T>\nexport type InlineQueryHandler<T = InlineQueryContext> = ParsedUpdateHandler<'inline_query', T>\nexport type ChosenInlineResultHandler<T = ChosenInlineResultContext> = ParsedUpdateHandler<'chosen_inline_result', T>\nexport type CallbackQueryHandler<T = CallbackQueryContext, S = never> = ParsedUpdateHandler<'callback_query', T, S>\nexport type InlineCallbackQueryHandler<T = InlineCallbackQueryContext, S = never> = ParsedUpdateHandler<\n 'inline_callback_query',\n T,\n S\n>\nexport type PollUpdateHandler<T = UpdateContext<PollUpdate>> = ParsedUpdateHandler<'poll', T>\nexport type PollVoteHandler<T = UpdateContext<PollVoteUpdate>> = ParsedUpdateHandler<'poll_vote', T>\nexport type UserStatusUpdateHandler<T = UpdateContext<UserStatusUpdate>> = ParsedUpdateHandler<'user_status', T>\nexport type UserTypingHandler<T = UpdateContext<UserTypingUpdate>> = ParsedUpdateHandler<'user_typing', T>\nexport type HistoryReadHandler<T = UpdateContext<HistoryReadUpdate>> = ParsedUpdateHandler<'history_read', T>\nexport type BotStoppedHandler<T = UpdateContext<BotStoppedUpdate>> = ParsedUpdateHandler<'bot_stopped', T>\nexport type BotChatJoinRequestHandler<T = ChatJoinRequestUpdateContext> = ParsedUpdateHandler<\n 'bot_chat_join_request',\n T\n>\nexport type ChatJoinRequestHandler<T = UpdateContext<ChatJoinRequestUpdate>> = ParsedUpdateHandler<\n 'chat_join_request',\n T\n>\nexport type PreCheckoutQueryHandler<T = PreCheckoutQueryContext> = ParsedUpdateHandler<'pre_checkout_query', T>\nexport type StoryUpdateHandler<T = UpdateContext<StoryUpdate>> = ParsedUpdateHandler<'story', T>\nexport type DeleteStoryHandler<T = UpdateContext<DeleteStoryUpdate>> = ParsedUpdateHandler<'delete_story', T>\nexport type BotReactionUpdateHandler<T = UpdateContext<BotReactionUpdate>> = ParsedUpdateHandler<'bot_reaction', T>\nexport type BotReactionCountUpdateHandler<T = UpdateContext<BotReactionCountUpdate>> = ParsedUpdateHandler<\n 'bot_reaction_count',\n T\n>\n\nexport type UpdateHandler =\n | RawUpdateHandler\n | NewMessageHandler\n | EditMessageHandler\n | MessageGroupHandler\n | DeleteMessageHandler\n | ChatMemberUpdateHandler\n | InlineQueryHandler\n | ChosenInlineResultHandler\n | CallbackQueryHandler\n | InlineCallbackQueryHandler\n | PollUpdateHandler\n | PollVoteHandler\n | UserStatusUpdateHandler\n | UserTypingHandler\n | HistoryReadHandler\n | BotStoppedHandler\n | BotChatJoinRequestHandler\n | ChatJoinRequestHandler\n | PreCheckoutQueryHandler\n | StoryUpdateHandler\n | DeleteStoryHandler\n | BotReactionUpdateHandler\n | BotReactionCountUpdateHandler\n\n// end-codegen\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mtcute/dispatcher",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Updates dispatcher and bot framework for @mtcute/client",
5
5
  "author": "Alina Sireneva <alina@tei.su>",
6
6
  "license": "MIT",
@@ -8,8 +8,8 @@
8
8
  "type": "module",
9
9
  "scripts": {},
10
10
  "dependencies": {
11
- "@mtcute/client": "^0.4.0",
12
- "@mtcute/test": "^0.4.0",
11
+ "@mtcute/client": "^0.6.0",
12
+ "@mtcute/test": "^0.6.0",
13
13
  "events": "3.2.0"
14
14
  },
15
15
  "module": "esm/index.js",