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

get_chat_history与get_chat_members方法持续触发FloodWait错误求助

问题排查与解决方案

1. 异步代码误用同步sleep

你的异步上下文里用了同步的sleep(Err.value),这会阻塞整个事件循环,导致等待逻辑完全失效,Telegram的限流判断不会因为这种同步等待而解除。必须替换为异步等待:

import asyncio

# 替换原代码中的sleep(Err.value)
await asyncio.sleep(Err.value)

2. 主动添加请求冷却,降低调用频率

get_chat_members和get_chat_history是Telegram严格限流的接口,即使处理了单次FloodWait,短时间内连续请求仍会触发重复限制。建议在每次成功请求后主动添加1-2秒的异步延迟:

# 示例:获取成员后添加冷却
async for members in tg_cl.get_chat_members(target):
    members_chat.append(members)
    break
await asyncio.sleep(1.5)

3. 复用客户端连接,避免频繁初始化

你的代码每次操作都用async with tg_cl:重新创建客户端连接,频繁的连接建立会提升账号风险评分,更容易触发限流。建议全局初始化一次客户端,后续所有操作复用该实例:

# 全局初始化客户端
tg_cl = TelegramClient(...)
await tg_cl.start()

# 复用实例执行操作
try:
    async for members in tg_cl.get_chat_members(target):
        members_chat.append(members)
        break
except FloodWait as Err:
    print(f"Flood wait: {Err.value} seconds")
    await asyncio.sleep(Err.value)

4. 检查账号与IP状态

  • 确认账号是否有批量加群、频繁拉取成员等异常操作记录,若账号被Telegram标记为可疑,限流会持续收紧,建议暂停操作12-24小时后再测试。
  • 检查当前IP是否属于共享IP池(如公共VPS、批量代理IP),若该IP上存在大量Telegram请求,会被全局限流,建议更换专属IP或切换网络环境。

5. 修正接口调用逻辑

  • 对于get_chat_members:若仅需少量成员,直接用limit参数指定数量,避免不必要的分页请求:
async for members in tg_cl.get_chat_members(target, limit=1):
    members_chat.append(members)
  • 对于get_chat_history:offset_id=-1的用法可能不符合你所用库(如Telethon)的规范,若仅需最新一条消息,直接使用limit=1即可:
async for messages in tg_cl.get_chat_history(chat, limit=1):
    count_messages = messages.id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:00:52