mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-31 07:57:38 +03:00 
			
		
		
		
	Fix send_message not forwarding some args to send_file
This commit is contained in:
		
							parent
							
								
									82943bd464
								
							
						
					
					
						commit
						acb8518911
					
				|  | @ -602,7 +602,6 @@ class MessageMethods: | |||
| 
 | ||||
|             clear_draft (`bool`, optional): | ||||
|                 Whether the existing draft should be cleared or not. | ||||
|                 Has no effect when sending a file. | ||||
| 
 | ||||
|             buttons (`list`, `custom.Button <telethon.tl.custom.button.Button>`, :tl:`KeyboardButton`): | ||||
|                 The matrix (list of lists), row list or button to be shown | ||||
|  | @ -691,7 +690,8 @@ class MessageMethods: | |||
|             return await self.send_file( | ||||
|                 entity, file, caption=message, reply_to=reply_to, | ||||
|                 parse_mode=parse_mode, force_document=force_document, | ||||
|                 buttons=buttons | ||||
|                 buttons=buttons, clear_draft=clear_draft, silent=silent, | ||||
|                 schedule=schedule | ||||
|             ) | ||||
| 
 | ||||
|         entity = await self.get_input_entity(entity) | ||||
|  |  | |||
|  | @ -93,6 +93,7 @@ class UploadMethods: | |||
|             *, | ||||
|             caption: typing.Union[str, typing.Sequence[str]] = None, | ||||
|             force_document: bool = False, | ||||
|             clear_draft: bool = False, | ||||
|             progress_callback: 'hints.ProgressCallback' = None, | ||||
|             reply_to: 'hints.MessageIDLike' = None, | ||||
|             attributes: 'typing.Sequence[types.TypeDocumentAttribute]' = None, | ||||
|  | @ -168,6 +169,9 @@ class UploadMethods: | |||
|                 the extension of an image file or a video file, it will be | ||||
|                 sent as such. Otherwise always as a document. | ||||
| 
 | ||||
|             clear_draft (`bool`, optional): | ||||
|                 Whether the existing draft should be cleared or not. | ||||
| 
 | ||||
|             progress_callback (`callable`, optional): | ||||
|                 A callback function accepting two parameters: | ||||
|                 ``(sent bytes, total)``. | ||||
|  | @ -296,7 +300,7 @@ class UploadMethods: | |||
|                     entity, media[:10], caption=media_captions[:10], | ||||
|                     progress_callback=progress_callback, reply_to=reply_to, | ||||
|                     parse_mode=parse_mode, silent=silent, schedule=schedule, | ||||
|                     supports_streaming=supports_streaming | ||||
|                     supports_streaming=supports_streaming, clear_draft=clear_draft | ||||
|                 ) | ||||
|                 media = media[10:] | ||||
|                 media_captions = media_captions[10:] | ||||
|  | @ -309,6 +313,7 @@ class UploadMethods: | |||
|                     attributes=attributes, thumb=thumb, voice_note=voice_note, | ||||
|                     video_note=video_note, buttons=buttons, silent=silent, | ||||
|                     supports_streaming=supports_streaming, schedule=schedule, | ||||
|                     clear_draft=clear_draft, | ||||
|                     **kwargs | ||||
|                 )) | ||||
| 
 | ||||
|  | @ -341,7 +346,7 @@ class UploadMethods: | |||
|         request = functions.messages.SendMediaRequest( | ||||
|             entity, media, reply_to_msg_id=reply_to, message=caption, | ||||
|             entities=msg_entities, reply_markup=markup, silent=silent, | ||||
|             schedule_date=schedule | ||||
|             schedule_date=schedule, clear_draft=clear_draft | ||||
|         ) | ||||
|         msg = self._get_response_message(request, await self(request), entity) | ||||
|         await self._cache_media(msg, file, file_handle, image=image) | ||||
|  | @ -351,7 +356,7 @@ class UploadMethods: | |||
|     async def _send_album(self: 'TelegramClient', entity, files, caption='', | ||||
|                           progress_callback=None, reply_to=None, | ||||
|                           parse_mode=(), silent=None, schedule=None, | ||||
|                           supports_streaming=None): | ||||
|                           supports_streaming=None, clear_draft=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 | ||||
|  | @ -413,7 +418,7 @@ class UploadMethods: | |||
|         # Now we can construct the multi-media request | ||||
|         request = functions.messages.SendMultiMediaRequest( | ||||
|             entity, reply_to_msg_id=reply_to, multi_media=media, | ||||
|             silent=silent, schedule_date=schedule | ||||
|             silent=silent, schedule_date=schedule, clear_draft=clear_draft | ||||
|         ) | ||||
|         result = await self(request) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										0
									
								
								tests/telethon/client/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/telethon/client/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										40
									
								
								tests/telethon/client/test_messages.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								tests/telethon/client/test_messages.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| import inspect | ||||
| 
 | ||||
| import pytest | ||||
| 
 | ||||
| from telethon import TelegramClient | ||||
| 
 | ||||
| 
 | ||||
| @pytest.mark.asyncio | ||||
| async def test_send_message_with_file_forwards_args(): | ||||
|     arguments = {} | ||||
|     sentinel = object() | ||||
| 
 | ||||
|     for value, name in enumerate(inspect.signature(TelegramClient.send_message).parameters): | ||||
|         if name in {'self', 'entity', 'file'}: | ||||
|             continue  # positional | ||||
| 
 | ||||
|         if name in {'message'}: | ||||
|             continue  # renamed | ||||
| 
 | ||||
|         if name in {'link_preview'}: | ||||
|             continue  # make no sense in send_file | ||||
| 
 | ||||
|         arguments[name] = value | ||||
| 
 | ||||
|     class MockedClient(TelegramClient): | ||||
|         # noinspection PyMissingConstructor | ||||
|         def __init__(self): | ||||
|             pass | ||||
| 
 | ||||
|         async def send_file(self, entity, file, **kwargs): | ||||
|             assert entity == 'a' | ||||
|             assert file == 'b' | ||||
|             for k, v in arguments.items(): | ||||
|                 assert k in kwargs | ||||
|                 assert kwargs[k] == v | ||||
| 
 | ||||
|             return sentinel | ||||
| 
 | ||||
|     client = MockedClient() | ||||
|     assert (await client.send_message('a', file='b', **arguments)) == sentinel | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user