Skip to content

Commit 5bd9992

Browse files
authored
Add unexpected 429 response handling (#14)
1 parent d1416a4 commit 5bd9992

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/Discord/Http.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use React\EventLoop\LoopInterface;
2323
use React\Promise\Deferred;
2424
use React\Promise\ExtendedPromiseInterface;
25+
use RuntimeException;
2526
use SplQueue;
2627
use Throwable;
2728

@@ -37,7 +38,7 @@ class Http
3738
*
3839
* @var string
3940
*/
40-
public const VERSION = 'v10.1.1';
41+
public const VERSION = 'v10.1.2';
4142

4243
/**
4344
* Current Discord HTTP API version.
@@ -316,6 +317,32 @@ protected function executeRequest(Request $request, Deferred $deferred = null):
316317

317318
// Discord Rate-limit
318319
if ($statusCode == 429) {
320+
if (! isset($data->global)) {
321+
if ($response->hasHeader('X-RateLimit-Global')) {
322+
$data->global = $response->getHeader('X-RateLimit-Global')[0] == true;
323+
} else {
324+
// Some other 429
325+
$this->logger->error($request. ' does not contain global rate-limit value');
326+
$rateLimitError = new RuntimeException('No rate limit global response', $statusCode);
327+
$deferred->reject($rateLimitError);
328+
$request->getDeferred()->reject($rateLimitError);
329+
return;
330+
}
331+
}
332+
333+
if (! isset($data->retry_after)) {
334+
if ($response->hasHeader('Retry-After')) {
335+
$data->retry_after = $response->getHeader('Retry-After')[0];
336+
} else {
337+
// Some other 429
338+
$this->logger->error($request. ' does not contain retry after rate-limit value');
339+
$rateLimitError = new RuntimeException('No rate limit retry after response', $statusCode);
340+
$deferred->reject($rateLimitError);
341+
$request->getDeferred()->reject($rateLimitError);
342+
return;
343+
}
344+
}
345+
319346
$rateLimit = new RateLimit($data->global, $data->retry_after);
320347
$this->logger->warning($request.' hit rate-limit: '.$rateLimit);
321348

0 commit comments

Comments
 (0)