mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-31 16:07:44 +03:00 
			
		
		
		
	Remove full API examples that have a friendly counterpart
This commit is contained in:
		
							parent
							
								
									1b424b3fe7
								
							
						
					
					
						commit
						72927a4ec3
					
				|  | @ -1,73 +0,0 @@ | ||||||
| ==== |  | ||||||
| Bots |  | ||||||
| ==== |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .. note:: |  | ||||||
| 
 |  | ||||||
|     These examples assume you have read :ref:`accessing-the-full-api`. |  | ||||||
| 
 |  | ||||||
| .. contents:: |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Talking to Inline Bots |  | ||||||
| ********************** |  | ||||||
| 
 |  | ||||||
| You can query an inline bot, such as `@VoteBot`__ (note, *query*, |  | ||||||
| not *interact* with a voting message), by making use of the |  | ||||||
| :tl:`GetInlineBotResultsRequest` request: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     from telethon.tl.functions.messages import GetInlineBotResultsRequest |  | ||||||
| 
 |  | ||||||
|     bot_results = client(GetInlineBotResultsRequest( |  | ||||||
|         bot, user_or_chat, 'query', '' |  | ||||||
|     )) |  | ||||||
| 
 |  | ||||||
| And you can select any of their results by using |  | ||||||
| :tl:`SendInlineBotResultRequest`: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     from telethon.tl.functions.messages import SendInlineBotResultRequest |  | ||||||
| 
 |  | ||||||
|     client(SendInlineBotResultRequest( |  | ||||||
|         get_input_peer(user_or_chat), |  | ||||||
|         obtained_query_id, |  | ||||||
|         obtained_str_id |  | ||||||
|     )) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Talking to Bots with special reply markup |  | ||||||
| ***************************************** |  | ||||||
| 
 |  | ||||||
| Generally, you just use the `message.click() |  | ||||||
| <telethon.tl.custom.message.Message.click>` method: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     messages = client.get_messages('somebot') |  | ||||||
|     messages[0].click(0) |  | ||||||
| 
 |  | ||||||
| You can also do it manually. |  | ||||||
| 
 |  | ||||||
| To interact with a message that has a special reply markup, such as |  | ||||||
| `@VoteBot`__ polls, you would use :tl:`GetBotCallbackAnswerRequest`: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     from telethon.tl.functions.messages import GetBotCallbackAnswerRequest |  | ||||||
| 
 |  | ||||||
|     client(GetBotCallbackAnswerRequest( |  | ||||||
|         user_or_chat, |  | ||||||
|         msg.id, |  | ||||||
|         data=msg.reply_markup.rows[wanted_row].buttons[wanted_button].data |  | ||||||
|     )) |  | ||||||
| 
 |  | ||||||
| It's a bit verbose, but it has all the information you would need to |  | ||||||
| show it visually (button rows, and buttons within each row, each with |  | ||||||
| its own data). |  | ||||||
| 
 |  | ||||||
| __ https://t.me/vote |  | ||||||
| __ https://t.me/vote |  | ||||||
|  | @ -93,81 +93,6 @@ channel, you can use the :tl:`CheckChatInviteRequest`, which takes in | ||||||
| the hash of said channel or group. | the hash of said channel or group. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Retrieving all chat members (channels too) |  | ||||||
| ****************************************** |  | ||||||
| 
 |  | ||||||
| .. note:: |  | ||||||
| 
 |  | ||||||
|     Use the `telethon.telegram_client.TelegramClient.iter_participants` |  | ||||||
|     friendly method instead unless you have a better reason not to! |  | ||||||
| 
 |  | ||||||
|     This method will handle different chat types for you automatically. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Here is the easy way to do it: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     participants = client.get_participants(group) |  | ||||||
| 
 |  | ||||||
| Now we will show how the method works internally. |  | ||||||
| 
 |  | ||||||
| In order to get all the members from a mega-group or channel, you need |  | ||||||
| to use :tl:`GetParticipantsRequest`. As we can see it needs an |  | ||||||
| :tl:`InputChannel`, (passing the mega-group or channel you're going to |  | ||||||
| use will work), and a mandatory :tl:`ChannelParticipantsFilter`. The |  | ||||||
| closest thing to "no filter" is to simply use |  | ||||||
| :tl:`ChannelParticipantsSearch` with an empty ``'q'`` string. |  | ||||||
| 
 |  | ||||||
| If we want to get *all* the members, we need to use a moving offset and |  | ||||||
| a fixed limit: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     from telethon.tl.functions.channels import GetParticipantsRequest |  | ||||||
|     from telethon.tl.types import ChannelParticipantsSearch |  | ||||||
|     from time import sleep |  | ||||||
| 
 |  | ||||||
|     offset = 0 |  | ||||||
|     limit = 100 |  | ||||||
|     all_participants = [] |  | ||||||
| 
 |  | ||||||
|     while True: |  | ||||||
|         participants = client(GetParticipantsRequest( |  | ||||||
|             channel, ChannelParticipantsSearch(''), offset, limit, hash=0 |  | ||||||
|         )) |  | ||||||
|         if not participants.users: |  | ||||||
|             break |  | ||||||
|         all_participants.extend(participants.users) |  | ||||||
|         offset += len(participants.users) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .. note:: |  | ||||||
| 
 |  | ||||||
|     If you need more than 10,000 members from a group you should use the |  | ||||||
|     mentioned ``client.get_participants(..., aggressive=True)``. It will |  | ||||||
|     do some tricks behind the scenes to get as many entities as possible. |  | ||||||
|     Refer to `issue 573`__ for more on this. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Note that :tl:`GetParticipantsRequest` returns :tl:`ChannelParticipants`, |  | ||||||
| which may have more information you need (like the role of the |  | ||||||
| participants, total count of members, etc.) |  | ||||||
| 
 |  | ||||||
| __ https://github.com/LonamiWebs/Telethon/issues/573 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Recent Actions |  | ||||||
| ************** |  | ||||||
| 
 |  | ||||||
| "Recent actions" is simply the name official applications have given to |  | ||||||
| the "admin log". Simply use :tl:`GetAdminLogRequest` for that, and |  | ||||||
| you'll get AdminLogResults.events in return which in turn has the final |  | ||||||
| `.action`__. |  | ||||||
| 
 |  | ||||||
| __ https://lonamiwebs.github.io/Telethon/types/channel_admin_log_event_action.html |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Admin Permissions | Admin Permissions | ||||||
| ***************** | ***************** | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,101 +10,6 @@ Working with messages | ||||||
| .. contents:: | .. contents:: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Forwarding messages |  | ||||||
| ******************* |  | ||||||
| 
 |  | ||||||
| .. note:: |  | ||||||
| 
 |  | ||||||
|     Use the `telethon.client.messages.MessageMethods.forward_messages` |  | ||||||
|     friendly method instead unless you have a better reason not to! |  | ||||||
| 
 |  | ||||||
|     This method automatically accepts either a single message or many of them. |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     # If you only have the message IDs |  | ||||||
|     client.forward_messages( |  | ||||||
|         entity,  # to which entity you are forwarding the messages |  | ||||||
|         message_ids,  # the IDs of the messages (or message) to forward |  | ||||||
|         from_entity  # who sent the messages? |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     # If you have ``Message`` objects |  | ||||||
|     client.forward_messages( |  | ||||||
|         entity,  # to which entity you are forwarding the messages |  | ||||||
|         messages  # the messages (or message) to forward |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     # You can also do it manually if you prefer |  | ||||||
|     from telethon.tl.functions.messages import ForwardMessagesRequest |  | ||||||
| 
 |  | ||||||
|     messages = foo()  # retrieve a few messages (or even one, in a list) |  | ||||||
|     from_entity = bar() |  | ||||||
|     to_entity = baz() |  | ||||||
| 
 |  | ||||||
|     client(ForwardMessagesRequest( |  | ||||||
|         from_peer=from_entity,  # who sent these messages? |  | ||||||
|         id=[msg.id for msg in messages],  # which are the messages? |  | ||||||
|         to_peer=to_entity  # who are we forwarding them to? |  | ||||||
|     )) |  | ||||||
| 
 |  | ||||||
| The named arguments are there for clarity, although they're not needed because |  | ||||||
| they appear in order. You can obviously just wrap a single message on the list |  | ||||||
| too, if that's all you have. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Searching Messages |  | ||||||
| ******************* |  | ||||||
| 
 |  | ||||||
| .. note:: |  | ||||||
| 
 |  | ||||||
|     Use the `telethon.client.messages.MessageMethods.iter_messages` |  | ||||||
|     friendly method instead unless you have a better reason not to! |  | ||||||
| 
 |  | ||||||
|     This method has ``search`` and ``filter`` parameters that will |  | ||||||
|     suit your needs. |  | ||||||
| 
 |  | ||||||
| Messages are searched through the obvious :tl:`SearchRequest`, but you may run |  | ||||||
| into issues_. A valid example would be: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     from telethon.tl.functions.messages import SearchRequest |  | ||||||
|     from telethon.tl.types import InputMessagesFilterEmpty |  | ||||||
| 
 |  | ||||||
|     filter = InputMessagesFilterEmpty() |  | ||||||
|     result = client(SearchRequest( |  | ||||||
|         peer=peer,      # On which chat/conversation |  | ||||||
|         q='query',      # What to search for |  | ||||||
|         filter=filter,  # Filter to use (maybe filter for media) |  | ||||||
|         min_date=None,  # Minimum date |  | ||||||
|         max_date=None,  # Maximum date |  | ||||||
|         offset_id=0,    # ID of the message to use as offset |  | ||||||
|         add_offset=0,   # Additional offset |  | ||||||
|         limit=10,       # How many results |  | ||||||
|         max_id=0,       # Maximum message ID |  | ||||||
|         min_id=0,       # Minimum message ID |  | ||||||
|         from_id=None,   # Who must have sent the message (peer) |  | ||||||
|         hash=0          # Special number to return nothing on no-change |  | ||||||
|     )) |  | ||||||
| 
 |  | ||||||
| It's important to note that the optional parameter ``from_id`` could have |  | ||||||
| been omitted (defaulting to ``None``). Changing it to :tl:`InputUserEmpty`, as one |  | ||||||
| could think to specify "no user", won't work because this parameter is a flag, |  | ||||||
| and it being unspecified has a different meaning. |  | ||||||
| 
 |  | ||||||
| If one were to set ``from_id=InputUserEmpty()``, it would filter messages |  | ||||||
| from "empty" senders, which would likely match no users. |  | ||||||
| 
 |  | ||||||
| If you get a ``ChatAdminRequiredError`` on a channel, it's probably because |  | ||||||
| you tried setting the ``from_id`` filter, and as the error says, you can't |  | ||||||
| do that. Leave it set to ``None`` and it should work. |  | ||||||
| 
 |  | ||||||
| As with every method, make sure you use the right ID/hash combination for |  | ||||||
| your :tl:`InputUser` or :tl:`InputChat`, or you'll likely run into errors like |  | ||||||
| ``UserIdInvalidError``. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Sending stickers | Sending stickers | ||||||
| **************** | **************** | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -69,7 +69,6 @@ heavy job for you, so you can focus on developing an application. | ||||||
|    extra/examples/working-with-messages |    extra/examples/working-with-messages | ||||||
|    extra/examples/chats-and-channels |    extra/examples/chats-and-channels | ||||||
|    extra/examples/users |    extra/examples/users | ||||||
|    extra/examples/bots |  | ||||||
|    extra/examples/projects-using-telethon |    extra/examples/projects-using-telethon | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user