diff --git a/telethon/client/dialogs.py b/telethon/client/dialogs.py index 1fea2da9..f04dbc01 100644 --- a/telethon/client/dialogs.py +++ b/telethon/client/dialogs.py @@ -80,10 +80,14 @@ class DialogMethods(UserMethods): if _total: _total[0] = getattr(r, 'count', len(r.dialogs)) + entities = {utils.get_peer_id(x): x for x in itertools.chain(r.users, r.chats)} - messages = {m.id: custom.Message(self, m, entities, None) - for m in r.messages} + + messages = {} + for m in r.messages: + m._finish_init(self, entities, None) + messages[m.id] = m # Happens when there are pinned dialogs if len(r.dialogs) > limit: diff --git a/telethon/client/messageparse.py b/telethon/client/messageparse.py index 9c75f480..1e71605b 100644 --- a/telethon/client/messageparse.py +++ b/telethon/client/messageparse.py @@ -133,6 +133,7 @@ class MessageParseMethods(UserMethods): break if found: - return custom.Message(self, found, entities, input_chat) + found._finish_init(self, entities, input_chat) + return found # endregion diff --git a/telethon/client/messages.py b/telethon/client/messages.py index eaf57f25..4f44a78b 100644 --- a/telethon/client/messages.py +++ b/telethon/client/messages.py @@ -256,7 +256,8 @@ class MessageMethods(UploadMethods, ButtonMethods, MessageParseMethods): # IDs are returned in descending order (or asc if reverse). last_id = message.id - await yield_(custom.Message(self, message, entities, entity)) + message._finish_init(self, entities, entity) + await yield_(message) have += 1 if len(r.messages) < request.limit: @@ -469,7 +470,7 @@ class MessageMethods(UploadMethods, ButtonMethods, MessageParseMethods): result = await self(request) if isinstance(result, types.UpdateShortSentMessage): to_id, cls = utils.resolve_id(utils.get_peer_id(entity)) - return custom.Message(self, types.Message( + message = types.Message( id=result.id, to_id=cls(to_id), message=message, @@ -477,7 +478,9 @@ class MessageMethods(UploadMethods, ButtonMethods, MessageParseMethods): out=result.out, media=result.media, entities=result.entities - ), {}, input_chat=entity) + ) + message._finish_init(self, {}, entity) + return message return self._get_response_message(request, result, entity) @@ -547,8 +550,8 @@ class MessageMethods(UploadMethods, ButtonMethods, MessageParseMethods): random_to_id[update.random_id] = update.id elif isinstance(update, ( types.UpdateNewMessage, types.UpdateNewChannelMessage)): - id_to_message[update.message.id] = custom.Message( - self, update.message, entities, input_chat=entity) + update.message._finish_init(self, entities, entity) + id_to_message[update.message.id] = update.message result = [id_to_message[random_to_id[rnd]] for rnd in req.random_id] return result[0] if single else result @@ -774,6 +777,7 @@ class MessageMethods(UploadMethods, ButtonMethods, MessageParseMethods): from_id and utils.get_peer_id(message.to_id) != from_id): await yield_(None) else: - await yield_(custom.Message(self, message, entities, entity)) + message._finish_init(self, entities, entity) + await yield_(message) # endregion diff --git a/telethon/events/chataction.py b/telethon/events/chataction.py index 59300317..3bf92b1b 100644 --- a/telethon/events/chataction.py +++ b/telethon/events/chataction.py @@ -164,8 +164,7 @@ class ChatAction(EventBuilder): def _set_client(self, client): super()._set_client(client) if self.action_message: - self.action_message = custom.Message( - client, self.action_message, self._entities, None) + self.action_message._finish_init(client, self._entities, None) async def respond(self, *args, **kwargs): """ diff --git a/telethon/events/newmessage.py b/telethon/events/newmessage.py index 44b688d6..ed8f8ecf 100644 --- a/telethon/events/newmessage.py +++ b/telethon/events/newmessage.py @@ -204,8 +204,7 @@ class NewMessage(EventBuilder): def _set_client(self, client): super()._set_client(client) - self.message = custom.Message( - client, self.message, self._entities, None) + self.message._finish_init(client, self._entities, None) self.__dict__['_init'] = True # No new attributes can be set def __getattr__(self, item):