Enhance send_video by accepting file_ids and URLs
This commit is contained in:
parent
4f615bd6dc
commit
1fdb3386ff
@ -1620,7 +1620,9 @@ class Client:
|
||||
|
||||
video (``str``):
|
||||
Video to send.
|
||||
Pass a file path as string to send a video that exists on your local machine.
|
||||
Pass a file_id as string to send a video that exists on the Telegram servers,
|
||||
pass an HTTP URL as a string for Telegram to get a video from the Internet, or
|
||||
pass a file path as string to upload a new video that exists on your local machine.
|
||||
|
||||
caption (``str``, optional):
|
||||
Video caption, 0-200 characters.
|
||||
@ -1666,34 +1668,64 @@ class Client:
|
||||
The size of the file.
|
||||
|
||||
Returns:
|
||||
On success, the sent Message is returned.
|
||||
On success, the sent :obj:`Message <pyrogram.Message>` is returned.
|
||||
|
||||
Raises:
|
||||
:class:`Error <pyrogram.Error>`
|
||||
"""
|
||||
file = None
|
||||
style = self.html if parse_mode.lower() == "html" else self.markdown
|
||||
file = self.save_file(video, progress=progress)
|
||||
file_thumb = None if thumb is None else self.save_file(thumb)
|
||||
|
||||
if os.path.exists(video):
|
||||
thumb = None if thumb is None else self.save_file(thumb)
|
||||
file = self.save_file(video, progress=progress)
|
||||
media = types.InputMediaUploadedDocument(
|
||||
mime_type=mimetypes.types_map[".mp4"],
|
||||
file=file,
|
||||
thumb=thumb,
|
||||
attributes=[
|
||||
types.DocumentAttributeVideo(
|
||||
supports_streaming=supports_streaming or None,
|
||||
duration=duration,
|
||||
w=width,
|
||||
h=height
|
||||
),
|
||||
types.DocumentAttributeFilename(os.path.basename(video))
|
||||
]
|
||||
)
|
||||
elif video.startswith("http"):
|
||||
media = types.InputMediaDocumentExternal(
|
||||
url=video
|
||||
)
|
||||
else:
|
||||
try:
|
||||
decoded = utils.decode(video)
|
||||
fmt = "<iiqqqqi" if len(decoded) > 24 else "<iiqq"
|
||||
unpacked = struct.unpack(fmt, decoded)
|
||||
except (AssertionError, binascii.Error, struct.error):
|
||||
raise FileIdInvalid from None
|
||||
else:
|
||||
if unpacked[0] != 4:
|
||||
media_type = Client.MEDIA_TYPE_ID.get(unpacked[0], None)
|
||||
|
||||
if media_type:
|
||||
raise FileIdInvalid("The file_id belongs to a {}".format(media_type))
|
||||
else:
|
||||
raise FileIdInvalid("Unknown media type: {}".format(unpacked[0]))
|
||||
|
||||
media = types.InputMediaDocument(
|
||||
id=types.InputDocument(
|
||||
id=unpacked[2],
|
||||
access_hash=unpacked[3]
|
||||
)
|
||||
)
|
||||
|
||||
while True:
|
||||
try:
|
||||
r = self.send(
|
||||
functions.messages.SendMedia(
|
||||
peer=self.resolve_peer(chat_id),
|
||||
media=types.InputMediaUploadedDocument(
|
||||
mime_type=mimetypes.types_map[".mp4"],
|
||||
file=file,
|
||||
thumb=file_thumb,
|
||||
attributes=[
|
||||
types.DocumentAttributeVideo(
|
||||
supports_streaming=supports_streaming or None,
|
||||
duration=duration,
|
||||
w=width,
|
||||
h=height
|
||||
),
|
||||
types.DocumentAttributeFilename(os.path.basename(video))
|
||||
]
|
||||
),
|
||||
media=media,
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id(),
|
||||
@ -1703,7 +1735,12 @@ class Client:
|
||||
except FilePartMissing as e:
|
||||
self.save_file(video, file_id=file.id, file_part=e.x)
|
||||
else:
|
||||
return r
|
||||
for i in r.updates:
|
||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||
users = {i.id: i for i in r.users}
|
||||
chats = {i.id: i for i in r.chats}
|
||||
|
||||
return message_parser.parse_message(self, i.message, users, chats)
|
||||
|
||||
def send_voice(self,
|
||||
chat_id: int or str,
|
||||
|
Loading…
Reference in New Issue
Block a user