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

使用balebot Python SDK批量发消息遇HIT_LIMIT,加time.sleep()仍失效

解决BaleBot发送批量消息时的HIT_LIMIT错误

我之前也碰到过BaleBot这个限流坑,你的情况很典型——虽然加了time.sleep(2),但因为send_message是异步执行的,循环会直接往下走,根本没等上一条消息发送完成就发起下一个请求,实际发送频率还是远超Bale的API限制,所以依然会触发HIT_LIMIT。

先看你遇到的错误详情:

BotErrorResponse { _id: '1001', _body: { code: 403, tag: 'HIT_LIMIT', data: {}, retryIn: null }, code: 403, tag: 'HIT_LIMIT', data: {}, retryIn: null }

这个403错误明确是触发了平台的发送频率限制,解决的核心是严格控制每一条消息的发送间隔,确保异步请求不会并发触发。

修正后的代码实现

我们可以把批量发送改成队列式的串行发送,每次只发一条,等回调返回后再发起下一条,同时加上足够的间隔时间:

import time
from balebot.models.messages import TextMessage
from balebot.models.base_models import Peer, PeerType

def success(response, user_data):
    print("success : ", response)
    print(user_data)
    # 发送成功后,继续发下一个用户
    send_next_message(user_data["bot"], user_data["remaining_peers"])

def failure(response, user_data):
    print("failure : ", response)
    print(user_data)
    # 如果是HIT_LIMIT,等待5秒后重试当前用户
    if response.tag == "HIT_LIMIT":
        time.sleep(5)
        send_single_message(user_data["bot"], user_data["current_peer"], user_data["remaining_peers"])
    else:
        # 其他错误,直接跳过当前用户,发下一个
        send_next_message(user_data["bot"], user_data["remaining_peers"])

def send_single_message(bot, peer, remaining_peers):
    bot.send_message(
        TextMessage("Text"),
        Peer(peer_type=PeerType.user, peer_id=peer["id"], access_hash=peer["accessHash"]),
        success_callback=success,
        failure_callback=failure,
        user_data={"bot": bot, "current_peer": peer, "remaining_peers": remaining_peers}
    )

def send_next_message(bot, remaining_peers):
    if remaining_peers:
        next_peer = remaining_peers.pop(0)
        # 这里设置足够的间隔,比如5秒(根据Bale的限流规则调整)
        time.sleep(5)
        send_single_message(bot, next_peer, remaining_peers)

def send_message(bot, update):
    # 复制用户列表,避免修改原数据
    peers_to_send = save_peers.copy()
    send_next_message(bot, peers_to_send)

关键调整点说明

  1. 串行发送代替循环异步发送:通过递归调用send_next_message,确保每一条消息的发送都等待上一条的回调完成后再开始,彻底避免并发请求。
  2. 针对HIT_LIMIT的重试逻辑:在失败回调中检测到HIT_LIMIT时,延长等待时间后重试当前用户,而不是直接跳过。
  3. 调整间隔时间:把sleep时间从2秒延长到5秒(你可以根据Bale官方的限流规则进一步调整,比如有些场景可能需要10秒间隔)。

另外,建议你确认Bale Bot官方文档里的具体限流额度(比如每分钟允许发送的消息数),这样可以更精准地设置间隔时间,避免再次触发限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:48:39