Discord 速率限制:为什么机器人会被减速
速率限制是 Discord 对机器人或用户在短时间内能发送的请求数量设定的上限。 当机器人超过上限时,Discord 会返回 HTTP 429 错误和等待时间,机器人必须暂停后才能再次尝试。
限制如何应用
机器人采取的每一个操作都是对 Discord API 的一次请求:发送消息、添加角色、编辑频道。Discord 按"桶"统计请求,通常按路由计算,有时也按服务器或频道计算。机器人还有一个全局上限,大约每秒 50 个请求。
响应中包含的标头会说明还剩多少请求,以及桶何时重置。写得好的机器人会读取这些信息,并在被阻止之前放慢速度。如果仍然超出,429 响应会附带一个 Retry-After 值,说明需要等待多少秒。
你为什么会注意到它们
- 大规模操作(例如删除许多消息或修改许多角色)会被刻意放慢。
- 在短时间内反复修改频道名称或主题,会按频道受到限制。
- 添加大量反应或突发发送消息,会触发短暂的停顿。
对成员来说,这看起来只是机器人回应得慢,而不是错误。这是系统在正常工作。
更严重的情况:临时封禁
如果一个应用发出了太多错误请求,例如十分钟内出现数千次 401、403 或 429 响应,Discord 可能会在 Cloudflare 层暂时封锁其 IP 地址。托管在共享机器上的机器人随后可能会失败,即使你的服务器一切正常。等待是唯一的解决办法。
切勿试图通过额外账号或脚本绕过速率限制。它们的存在是为了保护平台,绕过它们可能会导致封禁。
作为所有者你可以做什么
- 把大型任务分散开来,而不是一次全部运行。
- 避免按计时器反复重命名频道。
- 优先选择会排队请求并遵守限制的机器人。
速率限制与 Noxyr
Noxyr 的服务器日志在每个频道中最多每隔几秒发布一次,每次最多十条,因此突袭或大规模清理不会刷屏日志频道,详见服务器日志文档。Noxyr 自己的实时聊天发送也有限制,以防止刷屏。自定义机器人有一条相关规则:每次迁移到新的主机都会重新进行一次 Discord 登录,因此两次迁移之间需要等待五分钟,参见自定义机器人托管。
常见问题
Discord 上的 HTTP 429 是什么意思?
请求太多。Discord 在告诉机器人等待 Retry-After 值所示的时间后再尝试。
速率限制就是封禁吗?
不是。它只是短暂的停顿。只有反复滥用才可能导致更长时间的临时封锁。
为什么我的机器人在大规模清理时回应很慢?
批量操作受到 Discord 的速率限制,因此机器人必须把它们分散开来执行。