Mention .get_entity and .get_input_entity

Lonami 2017-10-19 12:17:27 +02:00
parent 77a91da21b
commit 8536a7e5a4

@ -1,5 +1,28 @@
An "entity" is used to refer to either an [`User`](https://lonamiwebs.github.io/Telethon/types/user.html) or a [`Chat`](https://lonamiwebs.github.io/Telethon/types/chat.html) (which includes a [`Channel`](https://lonamiwebs.github.io/Telethon/constructors/channel.html)). The most straightforward way to get an entity is to use `TelegramClient.get_entity()`. This method accepts either a string, which can be a username or a phone number, or an integer that will be the ID of an **user**. You can use it like so:
```python
lonami = client.get_entity('lonami')
contact = client.get_entity('+34xxxxxxxxx')
friend = client.get_entity(friend_id)
```
For the last one to work, the library must have "seen" the user at least once. The library will "see" the user as long as any request contains them, so if you've called `.get_dialogs()` for instance, and your friend was there, the library will know about them. For more, read about the [Session Files](Session-Files).
If you want to get a channel or chat by ID, you need to specify that they are a channel or a chat. The library can't infer what they are by just their ID (unless the ID is marked, but this is only done internally), so you need to wrap the ID around a [`Peer`](https://lonamiwebs.github.io/Telethon/types/peer.html) object:
```python
from telethon.tl.types import PeerUser, PeerChat, PeerChannel
my_user = client.get_entity(PeerUser(some_id))
my_chat = client.get_entity(PeerChat(some_id))
my_channel = client.get_entity(PeerChannel(some_id))
```
**Note** that most requests don't ask for an `User`, or a `Chat`, but rather for `InputUser`, `InputChat`, and so on. If this is the case, you should prefer `.get_input_entity()` over `.get_entity()`, as it will be immediate if you provide an ID (whereas `.get_entity()` may need to find who the entity is first).
## Via your open "chats" (dialogs)
[There's a page for that](Retrieving-all-dialogs).
## Via ResolveUsernameRequest ## Via ResolveUsernameRequest
An "entity" is used to refer to either an [`User`](https://lonamiwebs.github.io/Telethon/types/user.html) or a [`Chat`](https://lonamiwebs.github.io/Telethon/types/chat.html) (which includes a [`Channel`](https://lonamiwebs.github.io/Telethon/constructors/channel.html)). Perhaps the most straightforward way to get these is by [resolving their username](https://lonamiwebs.github.io/Telethon/methods/contacts/resolve_username.html): This is the request used by `.get_entity` internally, but you can also use it by hand:
```python ```python
from telethon.tl.functions.contacts import ResolveUsernameRequest from telethon.tl.functions.contacts import ResolveUsernameRequest
@ -24,9 +47,11 @@ user = next(u for u in messages.users if u.id == fwd_header.from_id)
channel = next(c for c in messages.chats if c.id == fwd_header.channel_id) channel = next(c for c in messages.chats if c.id == fwd_header.channel_id)
``` ```
Or you can just call `.get_entity()` with the ID, as you should have seen that user or channel before. A call to `GetMessagesRequest` may still be neeed.
## Via GetContactsRequest ## Via GetContactsRequest
If the user you want to talk to is a contact, you can use [`GetContactsRequest`](https://lonamiwebs.github.io/Telethon/methods/contacts/get_contacts.html): The library will call this for you if you pass a phone number to `.get_entity`, but again, it can be done manually. If the user you want to talk to is a contact, you can use [`GetContactsRequest`](https://lonamiwebs.github.io/Telethon/methods/contacts/get_contacts.html):
```python ```python
from telethon.tl.functions.contacts import GetContactsRequest from telethon.tl.functions.contacts import GetContactsRequest
@ -37,7 +62,3 @@ if isinstance(contacts, Contacts):
users = contacts.users users = contacts.users
contacts = contacts.contacts contacts = contacts.contacts
``` ```
## Via open dialogs
[There's a page for that](Retrieving-all-dialogs).