1111
1212namespace Discord \Http ;
1313
14+ use Composer \InstalledVersions ;
1415use Discord \Http \Exceptions \BadRequestException ;
1516use Discord \Http \Exceptions \ContentTooLongException ;
1617use Discord \Http \Exceptions \InvalidTokenException ;
2425use Psr \Log \LoggerInterface ;
2526use React \EventLoop \LoopInterface ;
2627use React \Promise \Deferred ;
27- use React \Promise \ExtendedPromiseInterface ;
28+ use React \Promise \PromiseInterface ;
2829use SplQueue ;
2930
3031/**
@@ -127,6 +128,11 @@ class Http
127128 */
128129 protected $ waiting = 0 ;
129130
131+ /**
132+ * Whether react/promise v3 is used, if false, using v2
133+ */
134+ protected $ promiseV3 = true ;
135+
130136 /**
131137 * Http wrapper constructor.
132138 *
@@ -141,6 +147,10 @@ public function __construct(string $token, LoopInterface $loop, LoggerInterface
141147 $ this ->logger = $ logger ;
142148 $ this ->driver = $ driver ;
143149 $ this ->queue = new SplQueue ;
150+
151+ if (str_starts_with (InstalledVersions::getVersion ('react/promise ' ), '0.3. ' )) {
152+ $ this ->promiseV3 = true ;
153+ }
144154 }
145155
146156 /**
@@ -160,9 +170,9 @@ public function setDriver(DriverInterface $driver): void
160170 * @param mixed $content
161171 * @param array $headers
162172 *
163- * @return ExtendedPromiseInterface
173+ * @return PromiseInterface
164174 */
165- public function get ($ url , $ content = null , array $ headers = []): ExtendedPromiseInterface
175+ public function get ($ url , $ content = null , array $ headers = []): PromiseInterface
166176 {
167177 if (! ($ url instanceof Endpoint)) {
168178 $ url = Endpoint::bind ($ url );
@@ -178,9 +188,9 @@ public function get($url, $content = null, array $headers = []): ExtendedPromise
178188 * @param mixed $content
179189 * @param array $headers
180190 *
181- * @return ExtendedPromiseInterface
191+ * @return PromiseInterface
182192 */
183- public function post ($ url , $ content = null , array $ headers = []): ExtendedPromiseInterface
193+ public function post ($ url , $ content = null , array $ headers = []): PromiseInterface
184194 {
185195 if (! ($ url instanceof Endpoint)) {
186196 $ url = Endpoint::bind ($ url );
@@ -196,9 +206,9 @@ public function post($url, $content = null, array $headers = []): ExtendedPromis
196206 * @param mixed $content
197207 * @param array $headers
198208 *
199- * @return ExtendedPromiseInterface
209+ * @return PromiseInterface
200210 */
201- public function put ($ url , $ content = null , array $ headers = []): ExtendedPromiseInterface
211+ public function put ($ url , $ content = null , array $ headers = []): PromiseInterface
202212 {
203213 if (! ($ url instanceof Endpoint)) {
204214 $ url = Endpoint::bind ($ url );
@@ -214,9 +224,9 @@ public function put($url, $content = null, array $headers = []): ExtendedPromise
214224 * @param mixed $content
215225 * @param array $headers
216226 *
217- * @return ExtendedPromiseInterface
227+ * @return PromiseInterface
218228 */
219- public function patch ($ url , $ content = null , array $ headers = []): ExtendedPromiseInterface
229+ public function patch ($ url , $ content = null , array $ headers = []): PromiseInterface
220230 {
221231 if (! ($ url instanceof Endpoint)) {
222232 $ url = Endpoint::bind ($ url );
@@ -232,9 +242,9 @@ public function patch($url, $content = null, array $headers = []): ExtendedPromi
232242 * @param mixed $content
233243 * @param array $headers
234244 *
235- * @return ExtendedPromiseInterface
245+ * @return PromiseInterface
236246 */
237- public function delete ($ url , $ content = null , array $ headers = []): ExtendedPromiseInterface
247+ public function delete ($ url , $ content = null , array $ headers = []): PromiseInterface
238248 {
239249 if (! ($ url instanceof Endpoint)) {
240250 $ url = Endpoint::bind ($ url );
@@ -251,9 +261,9 @@ public function delete($url, $content = null, array $headers = []): ExtendedProm
251261 * @param mixed $content
252262 * @param array $headers
253263 *
254- * @return ExtendedPromiseInterface
264+ * @return PromiseInterface
255265 */
256- public function queueRequest (string $ method , Endpoint $ url , $ content , array $ headers = []): ExtendedPromiseInterface
266+ public function queueRequest (string $ method , Endpoint $ url , $ content , array $ headers = []): PromiseInterface
257267 {
258268 $ deferred = new Deferred ();
259269
@@ -318,21 +328,21 @@ protected function guessContent(&$content)
318328 * @param Request $request
319329 * @param Deferred $deferred
320330 *
321- * @return ExtendedPromiseInterface
331+ * @return PromiseInterface
322332 */
323- protected function executeRequest (Request $ request , Deferred $ deferred = null ): ExtendedPromiseInterface
333+ protected function executeRequest (Request $ request , Deferred $ deferred = null ): PromiseInterface
324334 {
325335 if ($ deferred === null ) {
326336 $ deferred = new Deferred ();
327337 }
328338
329339 if ($ this ->rateLimit ) {
330- $ deferred ->reject ($ this ->rateLimit );
340+ $ deferred ->reject (new RateLimitException ( $ this ->rateLimit ) );
331341
332342 return $ deferred ->promise ();
333343 }
334344
335- $ this ->driver ->runRequest ($ request )->done (function (ResponseInterface $ response ) use ($ request , $ deferred ) {
345+ $ this ->driver ->runRequest ($ request )->{ $ this -> promiseV3 ? ' then ' : ' done ' } (function (ResponseInterface $ response ) use ($ request , $ deferred ) {
336346 $ data = json_decode ((string ) $ response ->getBody ());
337347 $ statusCode = $ response ->getStatusCode ();
338348
@@ -383,7 +393,7 @@ protected function executeRequest(Request $request, Deferred $deferred = null):
383393 });
384394 }
385395
386- $ deferred ->reject ($ rateLimit ->isGlobal () ? $ this ->rateLimit : $ rateLimit );
396+ $ deferred ->reject (new RateLimitException ( $ rateLimit ->isGlobal () ? $ this ->rateLimit : $ rateLimit) );
387397 }
388398 // Bad Gateway
389399 // Cloudflare SSL Handshake error
0 commit comments