使用 Telethon 自动登录 Telegram 客户端 (python)

Dav*_*ker 4 python telegram python-telegram-bot telegram-bot telethon

我正在尝试使用 Telethon 库编写一个访问 Telegram 客户端的电报机器人。下面的代码中一切正常,但运行代码时,Telegram Auth 过程是通过终端运行的。有没有办法自动化该过程,以便我可以使用 Python 登录客户端(无需在终端中输入)。

Auth 过程要求:

  • 电话号码
  • 密码
  • 安全码

我想要实现的是,当用户调用某个命令时,机器人会启动客户端登录过程,并要求用户输入密码和安全代码,然后用于登录客户端。该机器人将使用 python-telegram-bot 库来管理与用户的对话,同时它将使用 Telethon 库来连接到客户端。这可能吗?谢谢

这是主文件:(一个工作测试示例,尝试在使用 python-telegram-bot 时登录 Telethon Telegram 客户端)

from telethon import TelegramClient
from karim.secrets import secrets
import asyncio

# this def gets called when the /telethon command is sent by the user to the bot
def telethonMessage(update, context):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    api_id = secrets.get_var('API_ID')
    api_hash = secrets.get_var('API_HASH')
    client = TelegramClient('anon', api_id, api_hash, loop=loop)
    with client:
        loop.run_until_complete(send_telethon_message(client, update.effective_user.id))
     

async def send_telethon_message(client, user_id):
    me = await client.get_me()
    print('TELETHON: {}', me.username)
    await client.send_message(user_id, 'Testing Telethon')
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我在终端中收到以下过程:

  • 请输入您的电话(或机器人令牌):
  • 请输入您收到的代码:
  • 请输入您的密码:

Tib*_*. M 5

对用户进行身份验证的另一种方法是使用本节中记录send_code_requestsign_in方法

作为一个完整的例子:

async def main():
    client = TelegramClient('anon', api_id, api_hash)
    assert await client.connect()
    if not client.is_user_authorized():
        await client.send_code_request(phone_number)
        me = await client.sign_in(phone_number, input('Enter code: '))
Run Code Online (Sandbox Code Playgroud)

然而,所有这些都可以通过调用 .start() 来完成:

async def main():
    client = TelegramClient('anon', api_id, api_hash)
    await client.start()
Run Code Online (Sandbox Code Playgroud)

显示的代码正是.start()在幕后执行的操作(进行一些额外的检查),以便您知道如何签名,以防您input()出于任何原因想要避免使用(默认)

完整阅读本节以了解如何处理边缘情况,例如需要 2FA 密码时。