Allow uploading chat photos using BytesIO objects

This commit is contained in:
Dan 2020-07-27 13:33:17 +02:00
parent 2034a785f4
commit 8a14f58421

View File

@ -17,7 +17,7 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import os import os
from typing import Union from typing import Union, BinaryIO
from pyrogram.api import functions, types from pyrogram.api import functions, types
from ...ext import BaseClient, utils from ...ext import BaseClient, utils
@ -27,7 +27,7 @@ class SetChatPhoto(BaseClient):
def set_chat_photo( def set_chat_photo(
self, self,
chat_id: Union[int, str], chat_id: Union[int, str],
photo: str, photo: Union[str, BinaryIO],
file_ref: str = None file_ref: str = None
) -> bool: ) -> bool:
"""Set a new profile photo for the chat. """Set a new profile photo for the chat.
@ -39,12 +39,13 @@ class SetChatPhoto(BaseClient):
Unique identifier (int) or username (str) of the target chat. Unique identifier (int) or username (str) of the target chat.
photo (``str``): photo (``str``):
New chat photo. You can pass a :obj:`Photo` file_id or a file path to upload a new photo from your local New chat photo. You can pass a :obj:`Photo` file_id (in pair with a valid file_ref), a file path to
machine. upload a new photo from your local machine or a binary file-like object with its attribute ".name"
set for in-memory uploads.
file_ref (``str``, *optional*): file_ref (``str``, *optional*):
A valid file reference obtained by a recently fetched media message. A valid file reference obtained by a recently fetched media message.
To be used in combination with a file id in case a file reference is needed. To be used in combination with a file_id in case a file reference is needed.
Returns: Returns:
``bool``: True on success. ``bool``: True on success.
@ -63,11 +64,14 @@ class SetChatPhoto(BaseClient):
""" """
peer = self.resolve_peer(chat_id) peer = self.resolve_peer(chat_id)
if isinstance(photo, str):
if os.path.isfile(photo): if os.path.isfile(photo):
photo = types.InputChatUploadedPhoto(file=self.save_file(photo)) photo = types.InputChatUploadedPhoto(file=self.save_file(photo))
else: else:
photo = utils.get_input_media_from_file_id(photo, file_ref, 2) photo = utils.get_input_media_from_file_id(photo, file_ref, 2)
photo = types.InputChatPhoto(id=photo.id) photo = types.InputChatPhoto(id=photo.id)
else:
photo = types.InputChatUploadedPhoto(file=self.save_file(photo))
if isinstance(peer, types.InputPeerChat): if isinstance(peer, types.InputPeerChat):
self.send( self.send(