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

使用Telethon封装Account类时触发Cannot send requests while disconnected错误

解决Telethon多账户类中ConnectionError的问题

问题根源

  1. 执行顺序错误:你在__init__中直接调用run_until_disconnected(),该方法会阻塞线程,导致后续run()方法(事件处理器注册)永远无法执行,客户端没有任何消息处理逻辑。
  2. 未完成连接流程:手动创建TelegramClient时,不像with上下文会自动完成登录连接,必须显式调用start()方法完成账户登录,否则客户端处于断开状态,调用run_until_disconnected()会抛出连接错误。
  3. 事件注册时机错误:消息处理器必须在客户端启动前完成注册,否则无法捕获后续的新消息。

修正后的Account类实现

from telethon import TelegramClient, events

class Account:
    def __init__(self, acc):
        # 初始化客户端,保留system_version参数避免被识别为非官方客户端
        self.client = TelegramClient(
            acc['name'], 
            acc['api_id'], 
            acc['api_hash'],
            system_version="4.16.30-vxCUSTOM"
        )
        # 初始化阶段注册消息处理器
        self._setup_message_handler()

    def _setup_message_handler(self):
        @self.client.on(events.NewMessage(chats=list_channels))
        async def my_event_handler(event):
            # 这里编写你的消息处理逻辑
            print(f"收到消息:{event.message.text}")

    async def run(self):
        # 先完成登录连接
        await self.client.start()
        # 运行事件循环直到断开
        await self.client.run_until_disconnected()

多账户运行示例

Telethon基于异步IO,需用asyncio同时运行多个账户的事件循环:

import asyncio

async def main():
    # 定义多个账户配置
    accounts_config = [
        {'name': 'account1', 'api_id': 123456, 'api_hash': 'your_api_hash_1'},
        {'name': 'account2', 'api_id': 654321, 'api_hash': 'your_api_hash_2'}
    ]

    # 创建账户实例并启动任务
    tasks = []
    for acc in accounts_config:
        account = Account(acc)
        tasks.append(account.run())
    
    await asyncio.gather(*tasks)

if __name__ == "__main__":
    asyncio.run(main())

关键说明

  • 保留system_version参数,避免Telegram服务器识别为非官方客户端导致限制。
  • 第一次运行时,每个账户会提示输入手机号和验证码,验证后生成会话文件(对应acc['name']的文件),后续启动无需重复验证。
  • 事件处理器必须在client.start()前注册,否则无法捕获启动后的新消息。

内容的提问来源于stack exchange,提问作者Default

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:52:35