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

如何捕获SendMultiMediaRequest引发的61秒等待异常?

捕获SendMultiMediaRequest触发的“A wait of 61 seconds is required”异常

我需要捕获由SendMultiMediaRequest引发的“A wait of 61 seconds is required”异常,但官方文档里找不到相关说明。实际场景中,给部分用户发送图片时会出现这个错误;整体发送流程正常,但部分本应可以接收消息的用户会抛出通用Exception异常,我需要精准追踪这个异常。

我的代码如下:

from telethon import TelegramClient, errors

client = TelegramClient('session', api_id=API_ID, api_hash=API_HASH)

message = "Hello"
files = ['img/11.jpg', 'img/22.jpg', 'img/33.jpg', 'img/44.jpg', 'img/55.jpg']


async def main():
    for user in db.get_users(name_table=table):
        try:
            if db.check_invited(name_table=table, user_name=user) != "TRUE":
                await client.send_message(entity=user, message=message, file=files)
                print('Ok')

        except errors.BadRequestError as e:
            print(e)

        except Exception as e:
            print(e)

解决方案

这个错误是Telegram的限流机制触发的,属于errors.FloodWaitError的范畴,可通过以下方式精准捕获:

  1. 优先捕获官方定义的限流异常
    FloodWaitError是Telethon专门用于处理限流等待的异常类,包含seconds属性可直接获取需要等待的时长,是最规范的处理方式。

  2. 文本匹配兜底
    如果遇到版本兼容问题导致FloodWaitError未被触发,可在通用Exception中匹配错误文本做兜底处理。

修改后的代码:

from telethon import TelegramClient, errors
import asyncio

client = TelegramClient('session', api_id=API_ID, api_hash=API_HASH)

message = "Hello"
files = ['img/11.jpg', 'img/22.jpg', 'img/33.jpg', 'img/44.jpg', 'img/55.jpg']


async def main():
    for user in db.get_users(name_table=table):
        try:
            if db.check_invited(name_table=table, user_name=user) != "TRUE":
                await client.send_message(entity=user, message=message, file=files)
                print('Ok')

        except errors.BadRequestError as e:
            print(f"请求错误: {e}")

        except errors.FloodWaitError as e:
            print(f"触发限流,需等待{e.seconds}秒")
            # 可选:自动等待后重试
            await asyncio.sleep(e.seconds)
            # 重试逻辑可根据需求添加

        except Exception as e:
            error_msg = str(e)
            if "A wait of 61 seconds is required" in error_msg:
                print("触发61秒限流:", error_msg)
                # 自定义处理逻辑
            else:
                print("未知异常:", error_msg)

说明

  • 优先使用FloodWaitError捕获,能直接获取等待时长,便于后续自动重试或提示
  • 文本匹配作为兜底,应对特殊版本下的异常封装差异
  • 捕获到限流后建议添加等待逻辑,避免重复触发限制导致更严重的封禁

内容的提问来源于stack exchange,提问作者Сергей Викторович

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:10:27