Telethon异步代码报错ConnectionError:无法在断开连接时发送请求
解决Telethon批量发送消息时的ConnectionError问题
你的代码出现ConnectionError: Cannot send requests while disconnected错误,核心原因是Telegram客户端未正确建立连接,还有几处异步代码的使用错误,以下是修复方案:
错误点说明
- 未启动客户端连接:创建
TelegramClient实例后,必须通过await client.start()完成登录连接,否则客户端处于断开状态,无法发送请求。 - 误用同步sleep:
time.sleep()是同步阻塞函数,在异步函数中会卡住整个事件循环,应该用异步的asyncio.sleep()。 - 异步方法未加await:
client.disconnect()是异步方法,必须用await调用才能正确执行。 - 冗余的run函数:不需要额外封装
run()函数,直接用asyncio.run(main())即可。
修复后的完整代码
import asyncio from telethon import TelegramClient # 填入你的API信息 api_id = 13****** api_hash = '8ba0a***********************' message_file = 'messages.txt' async def main(): # 初始化客户端并启动连接 client = TelegramClient('sender', api_id, api_hash) await client.start() # 关键:启动客户端连接 # 读取消息文件 with open(message_file, 'r') as f: messages = f.readlines() # 批量发送消息,间隔60秒 for message in messages: await client.send_message('@Example_recipient', message.strip()) await asyncio.sleep(60) # 使用异步sleep # 正确断开连接 await client.disconnect() # 直接运行主函数 asyncio.run(main())
额外提示
第一次运行时,Telethon会提示你输入手机号和验证码完成登录,登录信息会保存在sender.session文件中,后续运行无需重复登录。
内容的提问来源于stack exchange,提问作者MohaMoney
相关产品推荐
相关产品推荐

