From 4d6e75a54e12eb38a2a15d49386a00e6d70a05d7 Mon Sep 17 00:00:00 2001
From: Lonami Exo <totufals@hotmail.com>
Date: Wed, 2 Mar 2022 13:10:33 +0100
Subject: [PATCH] Fix update dispatch errors

---
 telethon/_client/updates.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/telethon/_client/updates.py b/telethon/_client/updates.py
index 5240e2f6..4ff05313 100644
--- a/telethon/_client/updates.py
+++ b/telethon/_client/updates.py
@@ -18,6 +18,7 @@ from .._events.base import StopPropagation, EventBuilder, EventHandler
 from .._events.filters import make_filter, NotResolved
 from .._misc import utils
 from .. import _tl
+from ..types._custom import User, Chat
 
 if typing.TYPE_CHECKING:
     from .telegramclient import TelegramClient
@@ -220,12 +221,13 @@ def _preprocess_updates(self, updates, users, chats):
 class Entities:
     def __init__(self, client, users, chats):
         self.self_id = client._session_state.user_id
+        self._client = client
         self._entities = {e.id: e for e in itertools.chain(
-            (User(client, u) for u in users),
-            (Chat(client, c) for u in chats),
+            (User._new(client, u) for u in users),
+            (Chat._new(client, c) for u in chats),
         )}
 
-    def get(self, client, peer):
+    def get(self, peer):
         if not peer:
             return None
 
@@ -233,11 +235,11 @@ class Entities:
         try:
             return self._entities[id]
         except KeyError:
-            entity = client._entity_cache.get(query.user_id)
+            entity = self._client._entity_cache.get(query.user_id)
             if not entity:
                 raise RuntimeError('Update is missing a hash but did not trigger a gap')
 
-            self._entities[entity.id] = User(client, entity) if entity.is_user else Chat(client, entity)
+            self._entities[entity.id] = User(self._client, entity) if entity.is_user else Chat(self._client, entity)
             return self._entities[entity.id]
 
 
@@ -246,7 +248,7 @@ async def _dispatch(self, update, entities):
     try:
         event_cache = {}
         for handler in self._update_handlers:
-            event, entities = event_cache.get(handler._event)
+            event = event_cache.get(handler._event)
             if not event:
                 # build can fail if we're missing an access hash; we want this to crash
                 event_cache[handler._event] = event = handler._event._build(self, update, entities)