diff --git a/telethon/utils.py b/telethon/utils.py index 60e4c990..4f98fbc3 100644 --- a/telethon/utils.py +++ b/telethon/utils.py @@ -270,9 +270,41 @@ def get_input_photo(photo): if isinstance(photo, types.PhotoEmpty): return types.InputPhotoEmpty() + if isinstance(photo, types.messages.ChatFull): + photo = photo.full_chat + if isinstance(photo, types.ChannelFull): + return get_input_photo(photo.chat_photo) + elif isinstance(photo, types.UserFull): + return get_input_photo(photo.profile_photo) + elif isinstance(photo, (types.Channel, types.Chat, types.User)): + return get_input_photo(photo.photo) + + if isinstance(photo, (types.UserEmpty, types.ChatEmpty, + types.ChatForbidden, types.ChannelForbidden)): + return types.InputPhotoEmpty() + _raise_cast_fail(photo, 'InputPhoto') +def get_input_chat_photo(photo): + """Similar to :meth:`get_input_peer`, but for chat photos""" + try: + if photo.SUBCLASS_OF_ID == 0xd4eb2d74: # crc32(b'InputChatPhoto') + return photo + elif photo.SUBCLASS_OF_ID == 0xe7655f1f: # crc32(b'InputFile'): + return types.InputChatUploadedPhoto(photo) + except AttributeError: + _raise_cast_fail(photo, 'InputChatPhoto') + + photo = get_input_photo(photo) + if isinstance(photo, types.InputPhoto): + return types.InputChatPhoto(photo) + elif isinstance(photo, types.InputPhotoEmpty): + return types.InputChatPhotoEmpty() + + _raise_cast_fail(photo, 'InputChatPhoto') + + def get_input_geo(geo): """Similar to :meth:`get_input_peer`, but for geo points""" try: diff --git a/telethon_generator/generators/tlobject.py b/telethon_generator/generators/tlobject.py index ee31defb..0bcd983d 100644 --- a/telethon_generator/generators/tlobject.py +++ b/telethon_generator/generators/tlobject.py @@ -25,7 +25,9 @@ AUTO_CASTS = { 'InputNotifyPeer': 'await client._get_input_notify({})', 'InputMedia': 'utils.get_input_media({})', 'InputPhoto': 'utils.get_input_photo({})', - 'InputMessage': 'utils.get_input_message({})' + 'InputMessage': 'utils.get_input_message({})', + 'InputDocument': 'utils.get_input_document({})', + 'InputChatPhoto': 'utils.get_input_chat_photo({})', } NAMED_AUTO_CASTS = {