首页 > 解决方案 > ValueError:找不到 PeerUser 的输入实体

问题描述

修复了之前的问题后,我遇到了这个错误,这是日志:

    Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=981588717) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=1658148281) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=965240226) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=1964324322) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=1660769244) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=1893756687) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=1834060740) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
Unhandled exception on handle_new_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\updates.py", line 454, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 38, in handle_new_message
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 287, in get_entity
    inputs.append(await self.get_input_entity(x))
  File "C:\Users\user\AppData\Local\Programs\Python\Python39-32\lib\site-packages\telethon\client\users.py", line 461, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=716702203) (PeerUser). Please read https://docs.telethon.dev/en/latest/concepts/entities.html to find out more details.
U

这是代码

    #!/usr/bin/env python3
# A simple script to print some messages.
import time
import re
import json
import random
import os
from asyncio import sleep
from pprint import pprint

from telethon import TelegramClient, events, utils
from dotenv import load_dotenv

load_dotenv() # get .env variable

session = os.environ.get('TG_SESSION', 'printer')
api_id = os.getenv("API_ID")
api_hash = os.getenv("API_HASH")
debug_mode = os.getenv("DEBUG_MODE").upper() == "TRUE"

proxy = None  # https://github.com/Anorov/PySocks

# Create and start the client so we can make requests (we don't here)
client = TelegramClient(session, api_id, api_hash, proxy=proxy).start()

# create a sender list to check if user already send private message or mention
senderList = [] 

#read json file and prepare quiz to send later
with open('quizzes.json') as json_file:
    quizzes = json.load(json_file)

@client.on(events.NewMessage)
async def handle_new_message(event):
    
    me = await client.get_me()
    username = me.username
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
    to_ = await event.client.get_entity(event.message.to_id)

    needToProceed = from_.is_self if debug_mode else not from_.is_self and (event.is_private or re.search("@"+me.username,event.raw_text))
    if needToProceed:  # only auto-reply to private chats:  # only auto-reply to private chats   
        if not from_.bot and event:  # don't auto-reply to bots
            print(time.asctime(), '-', event.message)  # optionally log time and message
            await sleep(1)  # pause for 1 second to rate-limit automatic replies   
            message = ""
            senderList.append(to_.id)
            if senderList.count(to_.id) < 2:
                message =   f"""**AUTO REPLY**
                \nHi @{from_.username},
                \n\nMohon maaf boss saya sedang offline, mohon tunggu sebentar.
                \nSilahkan lihat-lihat [imacakes](https://www.instagram.com/ima_cake_cirebon) dulu untuk cuci mata.
                \n\n**AUTO REPLY**"""
            elif senderList.count(to_.id) < 3:
                message =   f"""**AUTO REPLY**
                \nMohon bersabar @{from_.username}, boss saya masih offline """
            elif senderList.count(to_.id) < 4:
                message = f"""**AUTO REPLY** 
                \n@{from_.username} Tolong bersabar yaa """
            else:
                random_number = random.randint(0,len(quizzes) - 1)
                question = quizzes[random_number]['question']
                answer = quizzes[random_number]['answer']
                message = f"""**AUTO REPLY**
                \n @{from_.username}, Main tebak-tebakan aja yuk 
                \n {question}
                \n {answer}
                \n """
            
            if message != "":
                await event.reply(message)

client.start()
client.run_until_disconnected()

我真的不知道出了什么问题,因为我是新手,对编码知之甚少,所以如果有人愿意帮助我,我真的很感激:)

还要感谢@ogdenkev帮助我解决了之前的问题 :)

谢谢你帮助我的人:)

标签: pythontelegramvalueerrortelethon

解决方案


我不熟悉 Telethon,但错误状态中引用的文档

要“遇到”一个 ID,您必须像在普通应用程序中一样“找到它”。如果对等方在您的对话中,则需要 client.get_dialogs()。如果对等方是组中的某个人,您将类似地使用 client.get_participants(group)。

一旦你遇到了一个 ID,库(默认情况下)会为你保存他们的 access_hash,这是调用大多数方法所必需的。这就是为什么有时您在使用库时可能会遇到此错误的原因。您应该排除 ValueError 并运行您知道应该可以找到实体的代码。

总结提示您可能需要尝试在不同位置查找实体。尽管理想情况下您已经知道找到实体的正确方法。在您的代码中,这可能类似于。

@client.on(events.NewMessage)
async def handle_new_message(event):
    
    me = await client.get_me()
    username = me.username
    try:
        from_ = await event.client.get_entity(event.from_id)
    except ValueError:
        pass
    try:
        # Do you have a conversation open with them? Get dialogs.
        await client.get_dialogs()
    except ValueError:
        pass
    try:
        # Are they participant of some group? Get them.
        await client.get_participants('username')
    except ValueError:
        pass
    if from_ is None:
        raise ValueError("I could not find the user")

推荐阅读