1111
1212namespace Discord \Http ;
1313
14+ use Discord \Http \Exceptions \BadRequestException ;
1415use Discord \Http \Exceptions \ContentTooLongException ;
1516use Discord \Http \Exceptions \InvalidTokenException ;
17+ use Discord \Http \Exceptions \MethodNotAllowedException ;
1618use Discord \Http \Exceptions \NoPermissionsException ;
1719use Discord \Http \Exceptions \NotFoundException ;
20+ use Discord \Http \Exceptions \RateLimitException ;
1821use Discord \Http \Exceptions \RequestFailedException ;
1922use Discord \Http \Multipart \MultipartBody ;
20- use Exception ;
2123use Psr \Http \Message \ResponseInterface ;
2224use Psr \Log \LoggerInterface ;
2325use React \EventLoop \LoopInterface ;
2426use React \Promise \Deferred ;
2527use React \Promise \ExtendedPromiseInterface ;
26- use RuntimeException ;
2728use SplQueue ;
28- use Throwable ;
2929
3030/**
3131 * Discord HTTP client.
@@ -39,7 +39,7 @@ class Http
3939 *
4040 * @var string
4141 */
42- public const VERSION = 'v10.2.3 ' ;
42+ public const VERSION = 'v10.3.0 ' ;
4343
4444 /**
4545 * Current Discord HTTP API version.
@@ -344,7 +344,7 @@ protected function executeRequest(Request $request, Deferred $deferred = null):
344344 } else {
345345 // Some other 429
346346 $ this ->logger ->error ($ request .' does not contain global rate-limit value ' );
347- $ rateLimitError = new RuntimeException ('No rate limit global response ' , $ statusCode );
347+ $ rateLimitError = new RateLimitException ('No rate limit global response ' , $ statusCode );
348348 $ deferred ->reject ($ rateLimitError );
349349 $ request ->getDeferred ()->reject ($ rateLimitError );
350350
@@ -358,7 +358,7 @@ protected function executeRequest(Request $request, Deferred $deferred = null):
358358 } else {
359359 // Some other 429
360360 $ this ->logger ->error ($ request .' does not contain retry after rate-limit value ' );
361- $ rateLimitError = new RuntimeException ('No rate limit retry after response ' , $ statusCode );
361+ $ rateLimitError = new RateLimitException ('No rate limit retry after response ' , $ statusCode );
362362 $ deferred ->reject ($ rateLimitError );
363363 $ request ->getDeferred ()->reject ($ rateLimitError );
364364
@@ -408,7 +408,7 @@ protected function executeRequest(Request $request, Deferred $deferred = null):
408408 $ deferred ->resolve ($ response );
409409 $ request ->getDeferred ()->resolve ($ data );
410410 }
411- }, function (Exception $ e ) use ($ request , $ deferred ) {
411+ }, function (\ Exception $ e ) use ($ request , $ deferred ) {
412412 $ this ->logger ->warning ($ request .' failed: ' .$ e ->getMessage ());
413413
414414 $ deferred ->reject ($ e );
@@ -488,9 +488,9 @@ protected function checkQueue(): void
488488 *
489489 * @param ResponseInterface $response
490490 *
491- * @return Throwable
491+ * @return \ Throwable
492492 */
493- public function handleError (ResponseInterface $ response ): Throwable
493+ public function handleError (ResponseInterface $ response ): \ Throwable
494494 {
495495 $ reason = $ response ->getReasonPhrase ().' - ' ;
496496
@@ -499,7 +499,7 @@ public function handleError(ResponseInterface $response): Throwable
499499
500500 // attempt to prettyify the response content
501501 if (($ content = json_decode ($ errorBody )) !== null ) {
502- if (isset ($ content ->code )) {
502+ if (! empty ($ content ->code )) {
503503 $ errorCode = $ content ->code ;
504504 }
505505 $ reason .= json_encode ($ content , JSON_PRETTY_PRINT );
@@ -508,12 +508,16 @@ public function handleError(ResponseInterface $response): Throwable
508508 }
509509
510510 switch ($ response ->getStatusCode ()) {
511+ case 400 :
512+ return new BadRequestException ($ reason , $ errorCode );
511513 case 401 :
512514 return new InvalidTokenException ($ reason , $ errorCode );
513515 case 403 :
514516 return new NoPermissionsException ($ reason , $ errorCode );
515517 case 404 :
516518 return new NotFoundException ($ reason , $ errorCode );
519+ case 405 :
520+ return new MethodNotAllowedException ($ reason , $ errorCode );
517521 case 500 :
518522 if (strpos (strtolower ($ errorBody ), 'longer than 2000 characters ' ) !== false ||
519523 strpos (strtolower ($ errorBody ), 'string value is too long ' ) !== false ) {
0 commit comments