Correctly emulate old to_id behaviour

This commit is contained in:
Lonami Exo 2020-10-02 10:23:04 +02:00
parent e24c49f5be
commit 4321153b06
3 changed files with 18 additions and 10 deletions

View File

@ -616,15 +616,8 @@ class EventBuilderDict:
try: try:
return self.__dict__[builder] return self.__dict__[builder]
except KeyError: except KeyError:
# Updates may arrive before login (like updateLoginToken) and we
# won't have our self ID yet (anyway only new messages need it).
self_id = (
self.client._self_input_peer.user_id
if self.client._self_input_peer
else None
)
event = self.__dict__[builder] = builder.build( event = self.__dict__[builder] = builder.build(
self.update, self.others, self_id) self.update, self.others, self.client._self_id)
if isinstance(event, EventCommon): if isinstance(event, EventCommon):
event.original_update = self.update event.original_update = self.update

View File

@ -164,6 +164,16 @@ class UserMethods:
except errors.UnauthorizedError: except errors.UnauthorizedError:
return None return None
@property
def _self_id(self: 'TelegramClient') -> typing.Optional[int]:
"""
Returns the ID of the logged-in user, if known.
This property is used in every update, and some like `updateLoginToken`
occur prior to login, so it gracefully handles when no ID is known yet.
"""
return self._self_input_peer.user_id if self._self_input_peer else None
async def is_bot(self: 'TelegramClient') -> bool: async def is_bot(self: 'TelegramClient') -> bool:
""" """
Return `True` if the signed-in user is a bot, `False` otherwise. Return `True` if the signed-in user is a bot, `False` otherwise.

View File

@ -608,9 +608,14 @@ class Message(ChatGetter, SenderGetter, TLObject, abc.ABC):
@property @property
def to_id(self): def to_id(self):
""" """
Alias for ``.peer_id``. Telegram renamed the field, and this property Returns the peer to which this message was sent to. This used to exist
exists to avoid breaking code. to infer the ``.peer_id``.
""" """
# If the client wasn't set we can't emulate the behaviour correctly,
# so as a best-effort simply return the chat peer.
if self._client and not self.out and self.is_private:
return types.PeerUser(self._client._self_id)
return self.peer_id return self.peer_id
# endregion Public Properties # endregion Public Properties