diff --git a/telethon/client/updates.py b/telethon/client/updates.py index cc2cb5d2..0f8779cb 100644 --- a/telethon/client/updates.py +++ b/telethon/client/updates.py @@ -276,11 +276,15 @@ class UpdateMethods(UserMethods): built[ev_type] = ev_type.build(update) for conv in self._conversations.values(): + # TODO Cleaner way to do this? Maybe just pass built always? if built[events.NewMessage]: + built[events.NewMessage]._set_client(self) conv._on_new_message(built[events.NewMessage]) if built[events.MessageEdited]: + built[events.MessageEdited]._set_client(self) conv._on_edit(built[events.MessageEdited]) if built[events.MessageRead]: + built[events.MessageRead]._set_client(self) conv._on_read(built[events.MessageRead]) if conv._custom: diff --git a/telethon/tl/custom/conversation.py b/telethon/tl/custom/conversation.py index 9ec1f507..d1e8cdbb 100644 --- a/telethon/tl/custom/conversation.py +++ b/telethon/tl/custom/conversation.py @@ -309,6 +309,9 @@ class Conversation(ChatGetter): return result() async def _check_custom(self, built, update): + # TODO This code is quite much a copy paste of registering events + # in the client, resolving them and setting the client; perhaps + # there is a better way? for i, (ev, fut, resolved) in self._custom.items(): ev_type = type(ev) if ev_type not in built: @@ -320,6 +323,11 @@ class Conversation(ChatGetter): self._custom[i] = (ev, fut, True) if ev.filter(built[ev_type]): + if hasattr(built[ev_type], '_set_client'): + built[ev_type]._set_client(self._client) + else: + built[ev_type]._client = self._client + fut.set_result(built[ev_type]) def _on_new_message(self, response):