Telethon调用sign_in如何传递phone_code_hash解决对应ValueError报错
Telethon 登录报错解决方案
错误原因
- 你在获取
phone_code_hash后重复实例化了TelegramClient,新实例无法继承旧实例的请求上下文,导致phone_code_hash失效 - 调用
client.sign_in()方法时没有传入必填的phone_code_hash参数 - 额外冗余问题:你连续调用了两次
send_code_request,属于无效重复请求,会提高触发风控的概率
修正后代码
from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty api_id = XXXXXXX api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXX' phone = '+XXXXXXXXXXX' # 全程复用同一个client实例,不要重复创建 client = TelegramClient(phone, api_id, api_hash) client.connect() if not client.is_user_authorized(): # 仅请求一次验证码,拿到返回结果中的phone_code_hash send_code_resp = client.send_code_request(phone) phone_code_hash = send_code_resp.phone_code_hash # 调用sign_in时传入三个必填参数:手机号、验证码、phone_code_hash client.sign_in( phone=phone, code=input('Enter the code: '), phone_code_hash=phone_code_hash ) # 后续可正常执行拉取会话、发消息等其他逻辑
补充说明
如果你的账号开启了两步验证,调用sign_in时还需要额外传入password参数,示例:
client.sign_in( phone=phone, code=input('Enter the code: '), phone_code_hash=phone_code_hash, password='你的两步验证密码' )
内容的提问来源于stack exchange,提问作者Big Company
相关产品推荐
相关产品推荐

