From 859f7423f231f4965bdf8685db00c3a24e333ceb Mon Sep 17 00:00:00 2001 From: Shrimadhav U K Date: Sat, 8 Mar 2025 21:46:40 +0530 Subject: [PATCH] Add send_as and effect parameters in high level --- telethon/client/messages.py | 24 +++++++++++++++++++++--- telethon/client/uploads.py | 25 ++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/telethon/client/messages.py b/telethon/client/messages.py index 5f0afc61..0097be32 100644 --- a/telethon/client/messages.py +++ b/telethon/client/messages.py @@ -644,6 +644,8 @@ class MessageMethods: schedule: 'hints.DateLike' = None, comment_to: 'typing.Union[int, types.Message]' = None, nosound_video: bool = None, + send_as: typing.Optional['hints.EntityLike'] = None, + message_effect_id: typing.Optional[int] = None ) -> 'types.Message': """ Sends a message to the specified user, chat or channel. @@ -766,6 +768,16 @@ class MessageMethods: on non-video files. This is set to ``True`` for albums, as gifs cannot be sent in albums. + send_as (`entity`): + Unique identifier (int) or username (str) of the chat or channel to send the message as. + You can use this to send the message on behalf of a chat or channel where you have appropriate permissions. + Use the GetSendAs to return the list of message sender identifiers, which can be used to send messages in the chat, + This setting applies to the current message and will remain effective for future messages unless explicitly changed. + To set this behavior permanently for all messages, use SaveDefaultSendAs. + + message_effect_id (`int`, optional): + Unique identifier of the message effect to be added to the message; for private chats only + Returns The sent `custom.Message `. @@ -838,6 +850,7 @@ class MessageMethods: formatting_entities=formatting_entities, comment_to=comment_to, background=background, nosound_video=nosound_video, + send_as=send_as, message_effect_id=message_effect_id ) entity = await self.get_input_entity(entity) @@ -867,7 +880,8 @@ class MessageMethods: buttons=markup, formatting_entities=message.entities, parse_mode=None, # explicitly disable parse_mode to force using even empty formatting_entities - schedule=schedule + schedule=schedule, + send_as=send_as, message_effect_id=message_effect_id ) request = functions.messages.SendMessageRequest( @@ -881,7 +895,9 @@ class MessageMethods: clear_draft=clear_draft, no_webpage=not isinstance( message.media, types.MessageMediaWebPage), - schedule_date=schedule + schedule_date=schedule, + send_as=await self.get_input_entity(send_as) if send_as else None, + effect=message_effect_id ) message = message.message else: @@ -902,7 +918,9 @@ class MessageMethods: silent=silent, background=background, reply_markup=self.build_reply_markup(buttons), - schedule_date=schedule + schedule_date=schedule, + send_as=await self.get_input_entity(send_as) if send_as else None, + effect=message_effect_id ) result = await self(request) diff --git a/telethon/client/uploads.py b/telethon/client/uploads.py index afb1f2c2..45a56a8a 100644 --- a/telethon/client/uploads.py +++ b/telethon/client/uploads.py @@ -140,6 +140,8 @@ class UploadMethods: comment_to: 'typing.Union[int, types.Message]' = None, ttl: int = None, nosound_video: bool = None, + send_as: typing.Optional['hints.EntityLike'] = None, + message_effect_id: typing.Optional[int] = None, **kwargs) -> typing.Union[typing.List[typing.Any], typing.Any]: """ Sends message with the given file to the specified entity. @@ -322,6 +324,16 @@ class UploadMethods: on non-video files. This is set to ``True`` for albums, as gifs cannot be sent in albums. + send_as (`entity`): + Unique identifier (int) or username (str) of the chat or channel to send the message as. + You can use this to send the message on behalf of a chat or channel where you have appropriate permissions. + Use the GetSendAs to return the list of message sender identifiers, which can be used to send messages in the chat, + This setting applies to the current message and will remain effective for future messages unless explicitly changed. + To set this behavior permanently for all messages, use SaveDefaultSendAs. + + message_effect_id (`int`, optional): + Unique identifier of the message effect to be added to the message; for private chats only + Returns The `Message ` (or messages) containing the sent file, or messages if a list of them was passed. @@ -421,6 +433,7 @@ class UploadMethods: parse_mode=parse_mode, silent=silent, schedule=schedule, supports_streaming=supports_streaming, clear_draft=clear_draft, force_document=force_document, background=background, + send_as=send_as, message_effect_id=message_effect_id ) file = file[10:] captions = captions[10:] @@ -455,7 +468,9 @@ class UploadMethods: entity, media, reply_to=reply_to, message=caption, entities=msg_entities, reply_markup=markup, silent=silent, schedule_date=schedule, clear_draft=clear_draft, - background=background + background=background, + send_as=await self.get_input_entity(send_as) if send_as else None, + effect=message_effect_id ) return self._get_response_message(request, await self(request), entity) @@ -464,7 +479,9 @@ class UploadMethods: progress_callback=None, reply_to=None, parse_mode=(), silent=None, schedule=None, supports_streaming=None, clear_draft=None, - force_document=False, background=None, ttl=None): + force_document=False, background=None, ttl=None, + send_as: typing.Optional['hints.EntityLike'] = None, + message_effect_id: typing.Optional[int] = None): """Specialized version of .send_file for albums""" # We don't care if the user wants to avoid cache, we will use it # anyway. Why? The cached version will be exactly the same thing @@ -539,7 +556,9 @@ class UploadMethods: request = functions.messages.SendMultiMediaRequest( entity, reply_to=None if reply_to is None else types.InputReplyToMessage(reply_to), multi_media=media, silent=silent, schedule_date=schedule, clear_draft=clear_draft, - background=background + background=background, + send_as=await self.get_input_entity(send_as) if send_as else None, + effect=message_effect_id ) result = await self(request)