gpt4 book ai didi

python-3.x - Telethon 在 python 中的第一步

转载 作者:行者123 更新时间:2023-12-01 21:38:30 26 4
gpt4 key购买 nike

好吧,所以我一直打算使用 Telethon 通过 Python 在 Telegram 上自动执行一些操作,但我不确定我是否理解它的要点。

首先,您需要一个 api_id 和一个 api_hash。为此,您转到 my.telegram并转到 API 开发工具。在那里,您会收到一个代码到您的 Telegram android 手机,提交后,您会收到一个唯一的 ID/哈希。第一个问题,发送给您的这段代码是否是生成应用程序所必需的?

现在在 python 中,您可以按如下方式启动客户端。

from telethon import TelegramClient

api_id=12345
api_hash='abcdef12345ghij'

client=TelegramClient('name of the session',api_id,api_hash)

您可以尝试连接客户端,但可能会导致未授权或手机未注册,因此您可以使用开始,这将决定是登录还是注册。在start中可以设置的参数中,有force_sms (bool, optional)强制telegram分享短信注册登录所需的code。我的问题是,如果电话没有注册,还有什么其他方式可以使用 Telegram ?我的意思是,他们无法将其发送到移动应用程序,因为该手机没有。

如果手机没有被注册是可能的,这是否意味着您用来获取 ID/哈希值的手机不一定与您创建客户端的手机相同?

由于此方法有回调,您可以输入发送到手机的代码并连接到 Telegram 。

连接客户端的另一种方法是使用 StringSession。我找到了这段代码:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession

# Generating a new one
with TelegramClient(StringSession(), api_id, api_hash) as client:
print(client.session.save())

# Converting SQLite (or any) to StringSession
with TelegramClient(name, api_id, api_hash) as client:
print(StringSession.save(client.session))

# Usage
string = '1aaNk8EX-YRfwoRsebUkugFvht6DUPi_Q25UOCzOAqzc...'
with TelegramClient(StringSession(string), api_id, api_hash) as client:
client.loop.run_until_complete(client.send_message('me', 'Hi'))

这本身就带来了几个问题。根据文档,这是一种将登录所需的凭据存储在字符串中的方法,包括授权 key 和电话。

这是如何获取授权 key 的?另一种方法是发到你手机上让你输入,可是这里呢?如何指定要连接的电话?这是您只能或只能在手机获得访问权限后使用的方法吗?

在代码中,这可能吗?

#Obtain an api_id, api_hash from phone 777777777

from telethon import TelegramClient
from telethon.sessions import StringSession

api_id=12345
api_hash='abcdef12345ghij'
client=TelegramClient('name of the session',api_id,api_hash)

client.start(phone='5555555',force_sms=True,code_callback=True,first_name='John',last_name='Doe')
#Asked to input the code sent to the phone 555555 by sms. Is this code the authentication key?

string = StringSession.save(client.session) #Now I can connect whenever I want using string session.

最后两个问题

是否可以为同一号码设置多个 session ,即使他们不同时尝试连接?例如,使用不同的 api/hash 在不同时间启动同一部手机,或者第一个 session 存储在 Telegram 中,创建第二个 session 会破坏第一个 Telegram 的链接?

能不能跳过注册时使用的验证码?

亲切的问候

最佳答案

is this code you are sent in order to generate an app necessary any more?

是的,就像许多提供 API 的在线服务一样,您注册您的开发人员帐户并获得一个 token (在 Telegram 的情况下,api_idapi_hash 组合),可用于访问 API(完全或有较少限制)。

您的应用程序绑定(bind)到您的用户帐户似乎有点令人困惑,但这并不意味着它只能在您的帐户中使用。您,开发人员,创建一个应用程序,任何其他用户(甚至机器人)都可以使用您的 api_idapi_hash 运行您的应用程序。

例如,当您使用 Telegram for Android 或 Telegram Desktop 时,您正在运行他们开发的应用程序,并使用 api_idapi_hash 登录各自的开发者,而不是您自己的。

if the phone is not signed up, what other means could have telegram used?

Telegram 可以向电话号码发送短信或调用电话。您可以使用 https://tl.telethon.dev找到send code在撰写本文时返回 SentCode .这带有 SentCodeType目前可以表示:通过应用程序、电话、闪光电话或短信发送。

does this mean the phone with which you got your id/hash is is not necessarily the same with which you create the client?

如上所述,api_idapi_hash 是给应用程序开发者的,而不是给用户的这将登录到您的应用程序。当您开始时,这个人通常是同一个人(您,开发人员),但是当您发布应用程序时,任何人都可以登录而无需提供他们的 api_idapi_hash。当然,您需要保守这些 secret 以尽量减少人们在他们的应用程序中使用您的 key ,尽管这实际上不可行。

How is this obtaining the authorization key?

StringSession 将生成的授权 key 嵌入到字符串本身中用于加密。下次您使用客户端时,您只需要这个 key ,因为 Telegram 已经知道您是谁,因为您之前已登录。

How can you specify the phone to which you want to connect?

没有必要。 Telegram 会记住使用特定授权 key 登录的帐户。在官方客户端中,您可以看到哪些设备已登录并终止它们的 session (使它们的授权 key 无效)以将它们注销。

Is this a method you can only, or you should only use after the phone has been given access?

您也可以使用 StringSession 登录,只需打印它并在以后重用它。在这种情况下,StringSession 将开始为空,Telethon 将生成一个授权 key ,您将登录,保存 session 将生成可以重复使用的内容。

Can you have more than one session for the same number, even if they don't try to connect at the same time?

是的,这就是当您使用 Telegram for Android 和 Telegram Desktop 时会发生的情况。在 Telethon 中添加三分之一也没有什么不同。

Can you skip in any way the verification code using for signing up?

不,因为 Telegram 需要验证电话是否存在并且正在使用中。

关于python-3.x - Telethon 在 python 中的第一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61657596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com