Telethon send_gift函数跨脚本调用报错:Cannot send requests while disconnected
解决TelegramClient调用send_gift时报错"Cannot send requests while disconnected"
问题原因
client.start()是异步函数,原代码未使用await,导致客户端还未完成连接就执行后续请求- 调用
client(functions.xxxRequest())时未加await,这些请求方法都是异步的,必须等待执行完成 - 缺少客户端关闭逻辑,可能引发资源占用问题
修改后的完整代码
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,提问作者Артем Куулар
相关产品推荐
相关产品推荐

