You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telethon send_gift函数跨脚本调用报错:Cannot send requests while disconnected

解决TelegramClient调用send_gift时报错"Cannot send requests while disconnected"

问题原因

  1. client.start()是异步函数,原代码未使用await,导致客户端还未完成连接就执行后续请求
  2. 调用client(functions.xxxRequest())时未加await,这些请求方法都是异步的,必须等待执行完成
  3. 缺少客户端关闭逻辑,可能引发资源占用问题

修改后的完整代码

relayer.py
import asyncio
from telethon import TelegramClient, functions
from telethon.tl.types import InputInvoiceStarGift
import config

async def send_gift(username, gift_id=config.teddy_id):
    client = TelegramClient(session_name, api_id, api_hash)
    try:
        # 等待客户端完成连接初始化
        await client.start(phone=config.phone, password=config.two_factor)
        
        receiver_peer = await client.get_input_entity(username)
        print(receiver_peer)

        invoice = InputInvoiceStarGift(
            peer=receiver_peer,
            gift_id=gift_id
        )

        print(f"Generated Invoice: {invoice}")

        # 异步调用支付表单请求,添加await
        payment_form = await client(functions.payments.GetPaymentFormRequest(invoice=invoice))

        if payment_form:
            print("Payment form retrieved successfully!")

            # 异步调用发送礼物请求,添加await
            payment_result = await client(functions.payments.SendStarsFormRequest(
                form_id=payment_form.form_id,
                invoice=invoice
            ))

            print(f"Payment successful: {payment_result.stringify()}")
    except Exception as e:
        print(f"An error occurred: {e}")
    finally:
        # 确保客户端最终关闭,释放资源
        await client.disconnect()

关键修改点

  • 在client.start()前添加await,等待客户端完成连接流程
  • 所有client(functions.xxxRequest())调用前添加await,保证异步请求执行完成
  • 添加finally块,无论是否发生异常,都强制关闭客户端,避免资源泄漏

内容的提问来源于stack exchange,提问作者Артем Куулар

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:48:11