使用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)
关键调整点说明
- 串行发送代替循环异步发送:通过递归调用
send_next_message,确保每一条消息的发送都等待上一条的回调完成后再开始,彻底避免并发请求。 - 针对HIT_LIMIT的重试逻辑:在失败回调中检测到
HIT_LIMIT时,延长等待时间后重试当前用户,而不是直接跳过。 - 调整间隔时间:把sleep时间从2秒延长到5秒(你可以根据Bale官方的限流规则进一步调整,比如有些场景可能需要10秒间隔)。
另外,建议你确认Bale Bot官方文档里的具体限流额度(比如每分钟允许发送的消息数),这样可以更精准地设置间隔时间,避免再次触发限制。
内容的提问来源于stack exchange,提问作者GreatReza
相关产品推荐
相关产品推荐

