Support autocast to InputMessage

This commit is contained in:
Lonami Exo 2018-04-23 11:05:38 +02:00
parent 6ecef42ec7
commit f31ca142a3
6 changed files with 25 additions and 19 deletions

View File

@ -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(

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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.

View File

@ -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',