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)
使用上面的代码,我在终端中收到以下过程:
对用户进行身份验证的另一种方法是使用本节中记录send_code_request的sign_in方法
作为一个完整的例子:
Run Code Online (Sandbox Code Playgroud)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: '))然而,所有这些都可以通过调用 .start() 来完成:
Run Code Online (Sandbox Code Playgroud)async def main(): client = TelegramClient('anon', api_id, api_hash) await client.start()显示的代码正是
.start()在幕后执行的操作(进行一些额外的检查),以便您知道如何签名,以防您input()出于任何原因想要避免使用(默认)。
完整阅读本节以了解如何处理边缘情况,例如需要 2FA 密码时。
| 归档时间: |
|
| 查看次数: |
17464 次 |
| 最近记录: |