mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-29 21:03:45 +03:00
Use getUsers/getChannels with hash 0 on get_input_entity
This commit is contained in:
parent
46fea3fc93
commit
ab557a8cef
|
@ -304,6 +304,26 @@ class UserMethods(TelegramBaseClient):
|
||||||
# Also ignore Peer (0x2d45687 == crc32(b'Peer'))'s, lacking hash.
|
# Also ignore Peer (0x2d45687 == crc32(b'Peer'))'s, lacking hash.
|
||||||
return utils.get_input_peer(peer)
|
return utils.get_input_peer(peer)
|
||||||
|
|
||||||
|
# If we're a bot and the user has messaged us privately users.getUsers
|
||||||
|
# will work with access_hash = 0. Similar for channels.getChannels.
|
||||||
|
# If we're not a bot but the user is in our contacts, it seems to work
|
||||||
|
# regardless. These are the only two special-cased requests.
|
||||||
|
peer = utils.get_peer(peer)
|
||||||
|
if isinstance(peer, types.PeerUser):
|
||||||
|
users = await self(functions.users.GetUsersRequest([
|
||||||
|
types.InputUser(peer.user_id, access_hash=0)]))
|
||||||
|
if users:
|
||||||
|
return utils.get_input_peer(users[0])
|
||||||
|
elif isinstance(peer, types.PeerChat):
|
||||||
|
return types.InputPeerChat(peer.chat_id)
|
||||||
|
elif isinstance(peer, types.PeerChannel):
|
||||||
|
try:
|
||||||
|
channels = await self(functions.channels.GetChannelsRequest([
|
||||||
|
types.InputChannel(peer.channel_id, access_hash=0)]))
|
||||||
|
return utils.get_input_peer(channels.chats[0])
|
||||||
|
except errors.ChannelInvalidError:
|
||||||
|
pass
|
||||||
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'Could not find the input entity for {!r}. Please read https://'
|
'Could not find the input entity for {!r}. Please read https://'
|
||||||
'telethon.readthedocs.io/en/latest/extra/basic/entities.html to'
|
'telethon.readthedocs.io/en/latest/extra/basic/entities.html to'
|
||||||
|
|
|
@ -114,6 +114,10 @@ def get_input_peer(entity, allow_self=True, check_hash=True):
|
||||||
|
|
||||||
A ``TypeError`` is raised if the given entity isn't a supported type
|
A ``TypeError`` is raised if the given entity isn't a supported type
|
||||||
or if ``check_hash is True`` but the entity's ``access_hash is None``.
|
or if ``check_hash is True`` but the entity's ``access_hash is None``.
|
||||||
|
|
||||||
|
Note that ``check_hash`` **is ignored** if an input peer is already
|
||||||
|
passed since in that case we assume the user knows what they're doing.
|
||||||
|
This is key to getting entities by explicitly passing ``hash = 0``.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if entity.SUBCLASS_OF_ID == 0xc91c90b6: # crc32(b'InputPeer')
|
if entity.SUBCLASS_OF_ID == 0xc91c90b6: # crc32(b'InputPeer')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user