Allowing nosound_video to be specified in send_file() and send_message(), to choose whether videos without sound send as videos or as animated gifs

This commit is contained in:
Deer-Spangle 2023-04-14 00:01:01 +01:00
parent 7b1b33f805
commit 114cddaabe
2 changed files with 29 additions and 7 deletions

View File

@ -640,7 +640,8 @@ class MessageMethods:
background: bool = None,
supports_streaming: bool = False,
schedule: 'hints.DateLike' = None,
comment_to: 'typing.Union[int, types.Message]' = None
comment_to: 'typing.Union[int, types.Message]' = None,
nosound_video: bool = None,
) -> 'types.Message':
"""
Sends a message to the specified user, chat or channel.
@ -754,6 +755,15 @@ class MessageMethods:
This parameter takes precedence over ``reply_to``. If there is
no linked chat, `telethon.errors.sgIdInvalidError` is raised.
nosoundvideo (`bool`, optional):
Only applicable when sending a video file without an audio
track. If set to true, the video will be displayed in telegram
as a video. If set to false, telegram will attempt to display
the video as an animated gif. (It may still display as a video
due to other factors.) The value is ignored if set on
non-video files. This is set to true for albums, as gifs cannot
be sent in albums.
Returns
The sent `custom.Message <telethon.tl.custom.message.Message>`.
@ -821,7 +831,8 @@ class MessageMethods:
buttons=buttons, clear_draft=clear_draft, silent=silent,
schedule=schedule, supports_streaming=supports_streaming,
formatting_entities=formatting_entities,
comment_to=comment_to, background=background
comment_to=comment_to, background=background,
nosound_video=nosound_video,
)
entity = await self.get_input_entity(entity)

View File

@ -117,6 +117,7 @@ class UploadMethods:
schedule: 'hints.DateLike' = None,
comment_to: 'typing.Union[int, types.Message]' = None,
ttl: int = None,
nosound_video: bool = None,
**kwargs) -> 'types.Message':
"""
Sends message with the given file to the specified entity.
@ -286,6 +287,15 @@ class UploadMethods:
Not all types of media can be used with this parameter, such
as text documents, which will fail with ``TtlMediaInvalidError``.
nosound_video (`bool`. optional):
This value only applies if sending a video without an audio
track. If True, the video will be displayed in telegram as a
video. If False, telegram will attempt to display it as an
animated gif. (Though it may still display as a video,
depending on other factors.) The value is ignored if the file
is not a video. The value is set to True for albums, as gifs
cannot be sent in albums.
Returns
The `Message <telethon.tl.custom.message.Message>` (or messages)
containing the sent file, or messages if a list of them was passed.
@ -389,7 +399,8 @@ class UploadMethods:
progress_callback=progress_callback,
attributes=attributes, allow_cache=allow_cache, thumb=thumb,
voice_note=voice_note, video_note=video_note,
supports_streaming=supports_streaming, ttl=ttl
supports_streaming=supports_streaming, ttl=ttl,
nosound_video=nosound_video,
)
# e.g. invalid cast from :tl:`MessageMediaWebPage`
@ -439,13 +450,13 @@ class UploadMethods:
media = []
for sent_count, file in enumerate(files):
# Albums want :tl:`InputMedia` which, in theory, includes
# :tl:`InputMediaUploadedPhoto`. However using that will
# :tl:`InputMediaUploadedPhoto`. However, using that will
# make it `raise MediaInvalidError`, so we need to upload
# it as media and then convert that to :tl:`InputMediaPhoto`.
fh, fm, _ = await self._file_to_media(
file, supports_streaming=supports_streaming,
force_document=force_document, ttl=ttl,
progress_callback=used_callback)
progress_callback=used_callback, nosound_video=True)
if isinstance(fm, (types.InputMediaUploadedPhoto, types.InputMediaPhotoExternal)):
r = await self(functions.messages.UploadMediaRequest(
entity, media=fm
@ -675,7 +686,7 @@ class UploadMethods:
progress_callback=None, attributes=None, thumb=None,
allow_cache=True, voice_note=False, video_note=False,
supports_streaming=False, mime_type=None, as_image=None,
ttl=None):
ttl=None, nosound_video=None):
if not file:
return None, None, None
@ -762,7 +773,7 @@ class UploadMethods:
# setting `nosound_video` to `True` doesn't affect videos with sound
# instead it prevents sending silent videos as GIFs
nosound_video = True if mime_type.split("/")[0] == 'video' else None
nosound_video = nosound_video if mime_type.split("/")[0] == 'video' else None
media = types.InputMediaUploadedDocument(
file=file_handle,