使用Telethon时持续触发PeerIdInvalidError问题求助
解决AddChatUserRequest触发PeerIdInvalidError的问题
问题重现
我正在开发一个通过手机号将用户添加到群组的程序,代码如下:
contact = InputPhoneContact(client_id=0, phone=phone, first_name=phone, last_name='add') result = session(ImportContactsRequest([contact])) user_input = InputPeerUser(result.users[0].id, result.users[0].access_hash) session(functions.messages.AddChatUserRequest(user_id=user_input, fwd_limit=0, chat_id=import_chat.chats[0].id))
执行AddChatUserRequest时持续出现PeerIdInvalidError,该逻辑在部分账号上运行正常,但针对某些账号会触发此错误,问题由AddChatUserRequest引发。
可能原因及解决方案
1. 目标用户隐私设置拦截
部分用户可能开启了禁止陌生人添加到群组的隐私选项,这种情况下无论API还是手动操作都无法添加该用户到群组。
- 验证方式:尝试手动添加该用户到目标群组,若手动失败则确认是隐私设置问题,无法通过API绕过。
2. 联系人导入结果异常
ImportContactsRequest可能未成功获取有效用户信息,导致构造的InputPeerUser无效:
- 解决方案:在构造
InputPeerUser前添加结果校验:result = session(ImportContactsRequest([contact])) if not result.users: raise ValueError("联系人导入失败,未获取到用户信息") user = result.users[0] if not user.access_hash: raise ValueError("用户access_hash无效") user_input = InputPeerUser(user.id, user.access_hash)
3. 群组类型不匹配API方法
AddChatUserRequest仅适用于普通聊天组(Chat),如果目标是超级群(Supergroup),必须使用channels.InviteToChannelRequest:
- 解决方案:判断群组类型并切换API:
from telethon.tl.functions.channels import InviteToChannelRequest from telethon.tl.types import InputPeerChannel, ChatTypeSupergroup chat = import_chat.chats[0] if isinstance(chat.type, ChatTypeSupergroup): # 超级群使用InviteToChannelRequest channel_peer = InputPeerChannel(chat.id, chat.access_hash) session(InviteToChannelRequest(channel_peer, [user_input])) else: # 普通群组使用AddChatUserRequest session(functions.messages.AddChatUserRequest(user_id=user_input, fwd_limit=0, chat_id=chat.id))
4. 操作账号权限限制
如果你的账号近期有大量添加用户的操作,可能触发Telegram的反垃圾机制,导致部分操作被限制:
- 解决方案:暂停操作一段时间,更换正常账号测试,或降低添加频率避免触发限制。
5. 手机号格式错误
导入联系人时手机号必须包含完整国际区号(如+8613xxxxxxxxx),格式错误会导致导入的用户信息无效:
- 解决方案:确保传入的
phone参数是带国际区号的标准格式。
内容的提问来源于stack exchange,提问作者Kamil Abdurahim
相关产品推荐
相关产品推荐

