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,提问作者Артур Жумабеков
相关产品推荐
相关产品推荐

