From a5d41c9f6c4adc652f56c55da4f05da63873c9ef Mon Sep 17 00:00:00 2001 From: ckohen Date: Fri, 30 Apr 2021 12:48:37 -0700 Subject: [PATCH] refactor(RequestHandler): use x-ratelimit-reset-after when present (#5511) --- src/rest/RequestHandler.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/rest/RequestHandler.js b/src/rest/RequestHandler.js index d5d729501312..2ede1f5a7a01 100644 --- a/src/rest/RequestHandler.js +++ b/src/rest/RequestHandler.js @@ -17,7 +17,11 @@ function getAPIOffset(serverDate) { return new Date(serverDate).getTime() - Date.now(); } -function calculateReset(reset, serverDate) { +function calculateReset(reset, resetAfter, serverDate) { + // Use direct reset time when available, server date becomes irrelevant in this case + if (resetAfter) { + return Date.now() + Number(resetAfter) * 1000; + } return new Date(Number(reset) * 1000).getTime() - getAPIOffset(serverDate); } @@ -152,12 +156,14 @@ class RequestHandler { const limit = res.headers.get('x-ratelimit-limit'); const remaining = res.headers.get('x-ratelimit-remaining'); const reset = res.headers.get('x-ratelimit-reset'); + const resetAfter = res.headers.get('x-ratelimit-reset-after'); this.limit = limit ? Number(limit) : Infinity; this.remaining = remaining ? Number(remaining) : 1; - this.reset = reset ? calculateReset(reset, serverDate) : Date.now(); + + this.reset = reset || resetAfter ? calculateReset(reset, resetAfter, serverDate) : Date.now(); // https://github.com/discordapp/discord-api-docs/issues/182 - if (request.route.includes('reactions')) { + if (!resetAfter && request.route.includes('reactions')) { this.reset = new Date(serverDate).getTime() - getAPIOffset(serverDate) + 250; }