From 2d335af78e1028bceb48708999cd8a936869ff54 Mon Sep 17 00:00:00 2001 From: teidesu Date: Sun, 23 May 2021 14:16:01 +0300 Subject: [PATCH] fix(dispatcher): reuse parsed updates in child dispatchers --- packages/dispatcher/src/dispatcher.ts | 31 ++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/dispatcher/src/dispatcher.ts b/packages/dispatcher/src/dispatcher.ts index 98ef565c..488180b0 100644 --- a/packages/dispatcher/src/dispatcher.ts +++ b/packages/dispatcher/src/dispatcher.ts @@ -220,15 +220,30 @@ export class Dispatcher { async dispatchUpdateNow( update: tl.TypeUpdate | tl.TypeMessage, users: UsersIndex, - chats: ChatsIndex + chats: ChatsIndex, + ): Promise { + return this._dispatchUpdateNowImpl(update, users, chats) + } + + private async _dispatchUpdateNowImpl( + update: tl.TypeUpdate | tl.TypeMessage, + users: UsersIndex, + chats: ChatsIndex, + parsed?: any, + parsedType?: Exclude | null ): Promise { if (!this._client) return const isRawMessage = tl.isAnyMessage(update) - const pair = PARSERS[update._] - const parsed = pair - ? pair[1](this._client, update, users, chats) - : undefined + if (parsed === undefined) { + const pair = PARSERS[update._] + if (pair) { + parsed = pair[1](this._client, update, users, chats) + parsedType = pair[0] + } else { + parsed = parsedType = null + } + } outer: for (const grp of this._groupsOrder) { for (const handler of this._groups[grp]) { @@ -252,8 +267,8 @@ export class Dispatcher { chats ) } else if ( - pair && - handler.type === pair[0] && + parsedType && + handler.type === parsedType && (!handler.check || (await handler.check(parsed, this._client))) ) { @@ -269,7 +284,7 @@ export class Dispatcher { } for (const child of this._children) { - await child.dispatchUpdateNow(update, users, chats) + await child._dispatchUpdateNowImpl(update, users, chats, parsed, parsedType) } }