From f31ca142a3ee404cb24e50fc180f2383321f0082 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Mon, 23 Apr 2018 11:05:38 +0200 Subject: [PATCH] Support autocast to InputMessage --- telethon/events/chataction.py | 4 +--- telethon/events/common.py | 8 ++------ telethon/events/messageread.py | 6 ++---- telethon/events/newmessage.py | 6 ++---- telethon/utils.py | 17 ++++++++++++++++- telethon_generator/generators/tlobject.py | 3 ++- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/telethon/events/chataction.py b/telethon/events/chataction.py index cf6faae5..3ca18f5e 100644 --- a/telethon/events/chataction.py +++ b/telethon/events/chataction.py @@ -204,9 +204,7 @@ class ChatAction(EventBuilder): if isinstance(self._pinned_message, int) and self.input_chat: r = self._client(functions.channels.GetMessagesRequest( - self._input_chat, [ - types.InputMessageID(self._pinned_message) - ] + self._input_chat, [self._pinned_message] )) try: self._pinned_message = next( diff --git a/telethon/events/common.py b/telethon/events/common.py index 057be9f4..54289726 100644 --- a/telethon/events/common.py +++ b/telethon/events/common.py @@ -118,15 +118,11 @@ class EventCommon(abc.ABC): try: if isinstance(chat, types.InputPeerChannel): result = self._client( - functions.channels.GetMessagesRequest(chat, [ - types.InputMessageID(msg_id) - ]) + functions.channels.GetMessagesRequest(chat, [msg_id]) ) else: result = self._client( - functions.messages.GetMessagesRequest([ - types.InputMessageID(msg_id) - ]) + functions.messages.GetMessagesRequest([msg_id]) ) except RPCError: return None, None diff --git a/telethon/events/messageread.py b/telethon/events/messageread.py index da7c39ea..16db40bb 100644 --- a/telethon/events/messageread.py +++ b/telethon/events/messageread.py @@ -101,16 +101,14 @@ class MessageRead(EventBuilder): if not chat: self._messages = [] elif isinstance(chat, types.InputPeerChannel): - ids = [types.InputMessageID(x) for x in self._message_ids] self._messages =\ self._client(functions.channels.GetMessagesRequest( - chat, ids + chat, self._message_ids )).messages else: - ids = [types.InputMessageID(x) for x in self._message_ids] self._messages =\ self._client(functions.messages.GetMessagesRequest( - ids + self._message_ids )).messages return self._messages diff --git a/telethon/events/newmessage.py b/telethon/events/newmessage.py index f6761485..ec8572cf 100644 --- a/telethon/events/newmessage.py +++ b/telethon/events/newmessage.py @@ -297,13 +297,11 @@ class NewMessage(EventBuilder): if self._reply_message is None: if isinstance(self.input_chat, types.InputPeerChannel): r = self._client(functions.channels.GetMessagesRequest( - self.input_chat, [ - types.InputMessageID(self.message.reply_to_msg_id) - ] + self.input_chat, [self.message.reply_to_msg_id] )) else: r = self._client(functions.messages.GetMessagesRequest( - [types.InputMessageID(self.message.reply_to_msg_id)] + [self.message.reply_to_msg_id] )) if not isinstance(r, types.messages.MessagesNotModified): self._reply_message = r.messages[0] diff --git a/telethon/utils.py b/telethon/utils.py index ee489f90..5bccfc10 100644 --- a/telethon/utils.py +++ b/telethon/utils.py @@ -25,7 +25,7 @@ from .tl.types import ( InputPhotoEmpty, FileLocation, ChatPhotoEmpty, UserProfilePhotoEmpty, FileLocationUnavailable, InputMediaUploadedDocument, ChannelFull, InputMediaUploadedPhoto, DocumentAttributeFilename, photos, - TopPeer, InputNotifyPeer + TopPeer, InputNotifyPeer, InputMessageID ) from .tl.types.contacts import ResolvedPeer @@ -333,6 +333,21 @@ def get_input_media(media, is_photo=False): _raise_cast_fail(media, 'InputMedia') +def get_input_message(message): + """Similar to :meth:`get_input_peer`, but for input messages.""" + try: + if isinstance(message, int): # This case is really common too + return InputMessageID(message) + elif message.SUBCLASS_OF_ID == 0x54b6bcc5: # crc32(b'InputMessage'): + return message + elif message.SUBCLASS_OF_ID == 0x790009e3: # crc32(b'Message'): + return InputMessageID(message.id) + except AttributeError: + pass + + _raise_cast_fail(message, 'InputMedia') + + def is_image(file): """ Returns ``True`` if the file extension looks like an image file to Telegram. diff --git a/telethon_generator/generators/tlobject.py b/telethon_generator/generators/tlobject.py index a2e02efb..74debc10 100644 --- a/telethon_generator/generators/tlobject.py +++ b/telethon_generator/generators/tlobject.py @@ -18,7 +18,8 @@ AUTO_CASTS = { 'InputChannel': 'utils.get_input_channel(client.get_input_entity({}))', 'InputUser': 'utils.get_input_user(client.get_input_entity({}))', 'InputMedia': 'utils.get_input_media({})', - 'InputPhoto': 'utils.get_input_photo({})' + 'InputPhoto': 'utils.get_input_photo({})', + 'InputMessage': 'utils.get_input_message({})' } BASE_TYPES = ('string', 'bytes', 'int', 'long', 'int128',