【问题标题】:FastAPI as backend for TelethonFastAPI 作为 Telethon 的后端
【发布时间】:2021-03-24 18:39:31
【问题描述】:

我正在尝试使 api auth 与 Telethon 一起工作。我正在向初始化电报客户端的端点发送请求,并尝试向电报发送代码请求。但是有 input() 并且我没有找到任何将代码作为变量传递的解决方案

@router.get('/code')
async def send_code_request(phone: str):
    client = get_telegram_client(phone)
    await client.start(phone)
    return {'msg': 'code sent'}

【问题讨论】:

    标签: fastapi telethon python-3.9


    【解决方案1】:

    我假设您为此使用 .start()

    .start() 接受默认为input() 的回调,您可以像这样传递自己的输入。

    client.start(code_callback=your_callback) 你的回调应该返回代码。

    这一切都可以在start docs中找到

    【讨论】:

    • y 这是唯一的方法。不,我需要考虑如何通过 rest api 处理这个
    • 您可能想为您的问题提供更多代码。我发布的方法应该足以通过rest api处理
    • 你有例子吗?我可以提供更多代码,但目前只有一个端点。我会把它添加到问题中
    【解决方案2】:

    我找到了更简单的解决方案,但有一个缺点 - 当通过会话 sign_in() 方法进行授权时,需要先执行 send_code_request() 方法,因此会有 2 条相同的代码消息

    async def get_telegram_client(session: str = None) -> TelegramClient:
    return TelegramClient(
        StringSession(session),
        api_id=settings.TELEGRAM_API_ID,
        api_hash=settings.TELEGRAM_API_HASH
    )
    
    @router.post('/code')
    async def send_authorizarion_code(payload: TelegramSendCode):
        client = await get_telegram_client()
        await client.connect()
        try:
            await client.send_code_request(payload.phone)
        except FloodWaitError as e:
            return {
                'FloodWaitError': {
                    'phone_number': e.request.phone_number,
                    'seconds': e.seconds
                }}
        else:
            return {
                'msg': 'code sent',
                'session': client.session.save()
            }
    
    
    @router.post('/auth')
    async def authorize(payload: TelegramAuth):
        client = await get_telegram_client(payload.session)
        await client.connect()
        await client.send_code_request(payload.phone)
        await client.sign_in(code=payload.code, phone=payload.phone)
        return {'msg': 'signed in'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      相关资源
      最近更新 更多