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

Telethon脚本运行1分钟后断开所有会话,俄区账号异常求助

问题描述
  • 脚本启动后开始解析消息,但约1分钟后会断开所有会话,包括桌面端和移动端的Telegram会话;
  • 使用白俄罗斯或格鲁吉亚号码的账号时脚本可正常运行,但使用3个不同的俄罗斯号码账号时均出现异常。每次运行前都会删除会话文件,并使用独立的api_id和api_hash。

相关脚本代码:

from telethon.sync import TelegramClient
from telethon import events

async def get_participants_fullname(group):
    users = {}
    async for partic in client.iter_participants(group):
        lastname = partic.last_name if partic.last_name else ""
        users[partic.id] = f"{partic.first_name} {lastname}".strip()
    return users

async def process_message(event, group):
       participants = await get_participants_fullname(event.chat_id)
       # send the request with message data

with TelegramClient('session', api_id, api_hash) as client:
    async def get_groups():
        dialogs = await client.get_dialogs()
        groups = {dialog.id: dialog.title for dialog in dialogs if dialog.is_group}
        return groups


    @client.on(events.NewMessage(incoming=True))
    async def handle_new_message(event):
        await process_message(event, await get_groups())


    print('Listening for new messages...')
    client.run_until_disconnected()
问题分析与解决建议

会话强制断开问题

  • 频繁触发限流机制
    脚本每收到一条消息就会拉取所有对话列表、遍历群成员,短时间内密集的API请求会触发Telegram的反滥用限制,直接强制账号下线(覆盖所有端会话)。
    优化方案:

    • 缓存群列表和成员数据:把群列表存入全局变量,每隔10-30分钟刷新一次;群成员按群ID缓存,仅在成员变动时重新拉取。
    • 添加请求延迟:在get_participants_fullname的遍历循环中加入asyncio.sleep(0.1),降低单请求频率。
  • 同步-异步混合冲突
    使用telethon.sync同步客户端却嵌套异步函数,容易导致事件循环紊乱,引发会话异常断开。
    优化方案:改用纯异步写法,替换导入语句为from telethon import TelegramClient,用asyncio.run()启动客户端,示例:

    import asyncio
    from telethon import TelegramClient, events
    
    # 其他函数保持不变...
    
    async def main():
        async with TelegramClient('session', api_id, api_hash) as client:
            # 缓存群列表
            cached_groups = await get_groups()
            # 定义事件处理器(可直接使用cached_groups,无需每次拉取)
            @client.on(events.NewMessage(incoming=True))
            async def handle_new_message(event):
                await process_message(event, cached_groups)
            
            print('Listening for new messages...')
            await client.run_until_disconnected()
    
    asyncio.run(main())
    

俄区账号异常问题

  • 俄区API限制更严格
    俄区账号的API请求阈值更低,同样的请求频率在非俄区账号没问题,但会触发俄区的限制规则。
    优化方案:
    • 严格执行上述缓存和延迟策略,把请求频率降到最低。
    • 使用俄区本地代理节点连接Telegram,避免跨区域请求被额外拦截。
  • 账号验证未完全完成
    俄区账号可能需要额外的验证步骤(如短信、两步验证),脚本登录时若未正确完成验证,会导致会话不稳定。
    优化方案:运行脚本时手动完成所有验证步骤,确保账号登录状态正常后再让脚本监听消息。

内容的提问来源于stack exchange,提问作者Артур Жумабеков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:14:58