首页 小组 话题 文章 相册 用户 唠叨 搜索 我的社区
全部 电报小程序

1.3.1 手动登录

admin
发表于 2022-10-05 18:42:13

注意:除非您在连接时需要更多控制,否则请跳过此步骤。


如果您需要更多控制权,您可以复制 client.start() 在幕后所做的事情以方便您。


第一步是连接到服务器:


client.connect()

您可能尚未获得授权,也可能尚未获得授权。您必须先获得授权,然后才能发送任何请求:


client.is_user_authorized() 

如果您未获得授权,则需要 .sign_in:


phone_number = '+34600000000'
client.send_code_request(phone_number)
myself = client.sign_in(phone_number, input('Enter code: '))
# 如果 .sign_in 提示 PhoneNumberUnoccupiedError, 使用 .sign_up 代替
# 如果 .sign_in 提示 SessionPasswordNeeded error, 调用 .sign_in(password=...)
你可以从telethon.errors中导入这两个异常。

注意:如果您通过应用程序本身发送 Telegram 通过应用程序发送给您的验证码代码,它将立即过期。您仍然可以通过“混淆”它(可能添加一个魔术常数,如 12345,然后减去它以获取真实代码)或任何其他技术来通过应用程序发送代码。


myself 是你的 Telegram 用户。你可以通过 print(myself.stringify()) 查看关于你自己的所有信息。您现在可以根据需要使用客户端了!请记住,API 返回的任何对象都提到了 .stringify() 方法,打印这些可能会很有用。


from telethon import TelegramClient, sync
client = TelegramClient('session_name', api_id, api_hash)

client.connect()
if not client.is_user_authorized():
      client.send_code_request(phone_number)
      me = client.sign_in(phone_number, input('Enter code: '))

请记住,这是手动过程,使用页面开头显示的代码片段要容易得多。


显示的验证码正是 .start() 将在幕后执行的操作(带有一些额外的检查),以便您知道如何签名,以防出于任何原因想要避免使用 input()(默认值)。如果没有提供电话或机器人令牌,你将通过input()被要求提供。该方法还接受一个phone=和bot_token参数。


你可以使用其中之一,因为两者都能发挥作用。确定哪一个只是一个品味问题,以及你需要多少控制权。 记住,你可以在任何时候用client.get_me()来获取自己。


两因素授权 (2FA)


如果您的帐户启用了两因素授权(从现在开始,2FA),则调用 .sign_in() 将引发 SessionPasswordNeededError。发生这种情况时,只需使用 password = 再次使用该方法:



import getpass
from telethon.errors import SessionPasswordNeededError
client.sign_in(phone)
try:
      client.sign_in(code=input('Enter code: '))
except SessionPasswordNeededError:
      client.sign_in(password=getpass.getpass())

上面提到的 .start() 方法也会为您处理这个问题,但您必须事先设置 password= 参数(不会被询问)。


如果您没有启用 2FA,但您想通过库来启用,请使用 client.edit_2fa()。


使用此功能时请务必了解您在做什么,您不会遇到任何问题。请注意,如果您只想设置电子邮件/提示并保持当前密码不变,则需要“重做”2fa。



from telethon.errors import EmailUnconfirmedError
# 第一时间设置 二次密码
client.edit_2fa(new_password='supersecurepassword')
# 修改二次密码:
client.edit_2fa(current_password='supersecurepassword',new_password='changedmymind')
# 移除二次密码 (i.e. removes 2FA):
client.edit_2fa(current_password='changedmymind', new_password=None)
# 设置一个新密码和安全邮箱
try:
      client.edit_2fa(new_password='memes and dreams',email='[email protected]')
      # 提示错误 (你需要检查邮件来完成二次验证设置)
except EmailUnconfirmedError:
      # You can put email checking code here if desired.
      pass
# Also take note that unless you remove 2FA or explicitly
# give email parameter again it will keep the last used setting
# Set hint after already setting password:
client.edit_2fa(current_password='memes and dreams',new_password='memes and dreams',hint='It keeps you alive')


1237 0

评论