循环调用GetFullUserRequest时出现ValueError:无法找到PeerUser输入实体
问题:调用GetFullUserRequest循环报错
ValueError: Could not find the input entity for PeerUser 循环获取群组成员信息时调用GetFullUserRequest接口,遇到ValueError:Could not find the input entity for PeerUser错误。代码如下:
dialogs = await tc.telegram_client.get_dialogs() for dialog in dialogs: if dialog.is_group: entity = dialog.entity max_users_in_chat = settings.TELEGRAM_MAX_USERS_IN_CHAT_FOR_DOWNLOADING if entity and getattr(entity, 'participants_count', max_users_in_chat + 1) <= max_users_in_chat: participants = await tc.telegram_client.get_participants(entity) for user in participants: full_user_info = await telegram_client(functions.users.GetFullUserRequest(id=user.id))
异常情况:首个用户可正常执行,但从第二个用户开始触发上述错误。曾尝试在调用GetFullUserRequest前使用await tc.telegram_client.get_entity(PeerUser(user.id)),但问题未解决。
解决方案
- 统一客户端实例:代码中同时使用了
tc.telegram_client和telegram_client两个客户端对象,这是核心问题。不同实例的实体缓存相互独立,后续请求切换实例后无法读取之前的缓存,导致找不到实体。必须全程使用同一个客户端调用所有方法。 - 直接传入User对象:
GetFullUserRequest支持直接接收User对象作为参数,Telethon会自动处理实体转换,无需手动传入ID,能有效利用客户端已有的实体缓存,避免找不到实体的问题。
修正后的代码示例:
dialogs = await tc.telegram_client.get_dialogs() for dialog in dialogs: if dialog.is_group: entity = dialog.entity max_users_in_chat = settings.TELEGRAM_MAX_USERS_IN_CHAT_FOR_DOWNLOADING if entity and getattr(entity, 'participants_count', max_users_in_chat + 1) <= max_users_in_chat: participants = await tc.telegram_client.get_participants(entity) for user in participants: # 统一使用tc.telegram_client实例,并直接传入user对象 full_user_info = await tc.telegram_client(functions.users.GetFullUserRequest(id=user))
如果必须使用ID调用,可以手动构造合法的输入实体:
from telethon.tl.types import InputPeerUser # 在循环内添加 input_peer = InputPeerUser(user.id, user.access_hash) full_user_info = await tc.telegram_client(functions.users.GetFullUserRequest(id=input_peer))
内容的提问来源于stack exchange,提问作者AlexeyB
相关产品推荐
相关产品推荐

