From 0cd44b245c672776b6870e9f7117d493995f60d3 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Fri, 6 Apr 2018 19:11:31 +0200 Subject: [PATCH] Allow auto-casting custom.Dialog into input_entity --- telethon/telegram_client.py | 5 +++-- telethon/utils.py | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index 631adfb8..3df26e79 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -2463,9 +2463,10 @@ class TelegramClient(TelegramBareClient): original_peer = peer if not isinstance(peer, int): try: - if peer.SUBCLASS_OF_ID != 0x2d45687: # crc32(b'Peer') + if getattr(peer, 'SUBCLASS_OF_ID', 0) != 0x2d45687: + # 0x2d45687 == crc32(b'Peer') return utils.get_input_peer(peer) - except (AttributeError, TypeError): + except TypeError: peer = None if not peer: diff --git a/telethon/utils.py b/telethon/utils.py index 2427ce13..ef1e901d 100644 --- a/telethon/utils.py +++ b/telethon/utils.py @@ -91,7 +91,11 @@ def get_input_peer(entity, allow_self=True): if entity.SUBCLASS_OF_ID == 0xc91c90b6: # crc32(b'InputPeer') return entity except AttributeError: - _raise_cast_fail(entity, 'InputPeer') + if hasattr(entity, 'input_entity'): + # e.g. custom.Dialog (can't cyclic import) + return entity.input_entity + else: + _raise_cast_fail(entity, 'InputPeer') if isinstance(entity, User): if entity.is_self and allow_self: @@ -105,7 +109,6 @@ def get_input_peer(entity, allow_self=True): if isinstance(entity, (Channel, ChannelForbidden)): return InputPeerChannel(entity.id, entity.access_hash or 0) - # Less common cases if isinstance(entity, InputUser): return InputPeerUser(entity.user_id, entity.access_hash)