mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-06-19 19:46:41 +00:00
Support editing media
This commit is contained in:
parent
2fb5215f5f
commit
c2b8f8a1d6
@ -998,7 +998,8 @@ class TelegramClient(TelegramBareClient):
|
|||||||
return result[0] if single else result
|
return result[0] if single else result
|
||||||
|
|
||||||
def edit_message(self, entity, message=None, text=None,
|
def edit_message(self, entity, message=None, text=None,
|
||||||
parse_mode=Default, link_preview=True):
|
parse_mode=Default, link_preview=True,
|
||||||
|
file=None):
|
||||||
"""
|
"""
|
||||||
Edits the given message ID (to change its contents or disable preview).
|
Edits the given message ID (to change its contents or disable preview).
|
||||||
|
|
||||||
@ -1025,6 +1026,10 @@ class TelegramClient(TelegramBareClient):
|
|||||||
link_preview (`bool`, optional):
|
link_preview (`bool`, optional):
|
||||||
Should the link preview be shown?
|
Should the link preview be shown?
|
||||||
|
|
||||||
|
file (`str` | `bytes` | `file` | `media`, optional):
|
||||||
|
The file object that should replace the existing media
|
||||||
|
in the message.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
>>> client = TelegramClient(...).start()
|
>>> client = TelegramClient(...).start()
|
||||||
@ -1053,14 +1058,18 @@ class TelegramClient(TelegramBareClient):
|
|||||||
|
|
||||||
entity = self.get_input_entity(entity)
|
entity = self.get_input_entity(entity)
|
||||||
text, msg_entities = self._parse_message_text(text, parse_mode)
|
text, msg_entities = self._parse_message_text(text, parse_mode)
|
||||||
|
file_handle, media = self._file_to_media(file)
|
||||||
request = EditMessageRequest(
|
request = EditMessageRequest(
|
||||||
peer=entity,
|
peer=entity,
|
||||||
id=self._get_message_id(message),
|
id=self._get_message_id(message),
|
||||||
message=text,
|
message=text,
|
||||||
no_webpage=not link_preview,
|
no_webpage=not link_preview,
|
||||||
entities=msg_entities
|
entities=msg_entities,
|
||||||
|
media=media
|
||||||
)
|
)
|
||||||
return self._get_response_message(request, self(request), entity)
|
msg = self._get_response_message(request, self(request), entity)
|
||||||
|
self._cache_media(msg, file, file_handle)
|
||||||
|
return msg
|
||||||
|
|
||||||
def delete_messages(self, entity, message_ids, revoke=True):
|
def delete_messages(self, entity, message_ids, revoke=True):
|
||||||
"""
|
"""
|
||||||
@ -1605,6 +1614,9 @@ class TelegramClient(TelegramBareClient):
|
|||||||
def _file_to_media(self, file, force_document=False,
|
def _file_to_media(self, file, force_document=False,
|
||||||
progress_callback=None, attributes=None, thumb=None,
|
progress_callback=None, attributes=None, thumb=None,
|
||||||
allow_cache=True, voice_note=False, video_note=False):
|
allow_cache=True, voice_note=False, video_note=False):
|
||||||
|
if not file:
|
||||||
|
return None, None
|
||||||
|
|
||||||
if not isinstance(file, (str, bytes, io.IOBase)):
|
if not isinstance(file, (str, bytes, io.IOBase)):
|
||||||
# The user may pass a Message containing media (or the media,
|
# The user may pass a Message containing media (or the media,
|
||||||
# or anything similar) that should be treated as a file. Try
|
# or anything similar) that should be treated as a file. Try
|
||||||
@ -1707,6 +1719,17 @@ class TelegramClient(TelegramBareClient):
|
|||||||
)
|
)
|
||||||
return file_handle, media
|
return file_handle, media
|
||||||
|
|
||||||
|
def _cache_media(self, msg, file, file_handle, force_document=False):
|
||||||
|
if file and msg and isinstance(file_handle, InputSizedFile):
|
||||||
|
# There was a response message and we didn't use cached
|
||||||
|
# version, so cache whatever we just sent to the database.
|
||||||
|
md5, size = file_handle.md5, file_handle.size
|
||||||
|
if utils.is_image(file) and not force_document:
|
||||||
|
to_cache = utils.get_input_photo(msg.media.photo)
|
||||||
|
else:
|
||||||
|
to_cache = utils.get_input_document(msg.media.document)
|
||||||
|
self.session.cache_file(md5, size, to_cache)
|
||||||
|
|
||||||
def send_file(self, entity, file, caption='',
|
def send_file(self, entity, file, caption='',
|
||||||
force_document=False, progress_callback=None,
|
force_document=False, progress_callback=None,
|
||||||
reply_to=None,
|
reply_to=None,
|
||||||
@ -1841,15 +1864,7 @@ class TelegramClient(TelegramBareClient):
|
|||||||
request = SendMediaRequest(entity, media, reply_to_msg_id=reply_to,
|
request = SendMediaRequest(entity, media, reply_to_msg_id=reply_to,
|
||||||
message=caption, entities=msg_entities)
|
message=caption, entities=msg_entities)
|
||||||
msg = self._get_response_message(request, self(request), entity)
|
msg = self._get_response_message(request, self(request), entity)
|
||||||
if msg and isinstance(file_handle, InputSizedFile):
|
self._cache_media(msg, file, file_handle, force_document=force_document)
|
||||||
# There was a response message and we didn't use cached
|
|
||||||
# version, so cache whatever we just sent to the database.
|
|
||||||
md5, size = file_handle.md5, file_handle.size
|
|
||||||
if as_image:
|
|
||||||
to_cache = utils.get_input_photo(msg.media.photo)
|
|
||||||
else:
|
|
||||||
to_cache = utils.get_input_document(msg.media.document)
|
|
||||||
self.session.cache_file(md5, size, to_cache)
|
|
||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user