Completed
Push — master ( 7d8814...97f336 )
by Irfaq
03:18
created

Api::getChatMember()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 0
cts 3
cp 0
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Telegram\Bot;
4
5
use Illuminate\Contracts\Container\Container;
6
use Telegram\Bot\Commands\CommandBus;
7
use Telegram\Bot\Events\EmitsEvents;
8
use Telegram\Bot\Events\UpdateWasReceived;
9
use Telegram\Bot\Exceptions\TelegramSDKException;
10
use Telegram\Bot\FileUpload\InputFile;
11
use Telegram\Bot\HttpClients\HttpClientInterface;
12
use Telegram\Bot\Objects\Chat;
13
use Telegram\Bot\Objects\ChatMember;
14
use Telegram\Bot\Objects\File;
15
use Telegram\Bot\Objects\Message;
16
use Telegram\Bot\Objects\UnknownObject;
17
use Telegram\Bot\Objects\Update;
18
use Telegram\Bot\Objects\User;
19
use Telegram\Bot\Objects\UserProfilePhotos;
20
use Telegram\Bot\Keyboard\Keyboard;
21
22
/**
23
 * Class Api.
24
 *
25
 * @mixin Commands\CommandBus
26
 */
27
class Api
28
{
29
    use EmitsEvents;
30
31
    /**
32
     * @var string Version number of the Telegram Bot PHP SDK.
33
     */
34
    const VERSION = '3.0.0';
35
36
    /**
37
     * @var string The name of the environment variable that contains the Telegram Bot API Access Token.
38
     */
39
    const BOT_TOKEN_ENV_NAME = 'TELEGRAM_BOT_TOKEN';
40
41
    /**
42
     * @var TelegramClient The Telegram client service.
43
     */
44
    protected $client;
45
46
    /**
47
     * @var string Telegram Bot API Access Token.
48
     */
49
    protected $accessToken = null;
50
51
    /**
52
     * @var TelegramResponse|null Stores the last request made to Telegram Bot API.
53
     */
54
    protected $lastResponse;
55
56
    /**
57
     * @var bool Indicates if the request to Telegram will be asynchronous (non-blocking).
58
     */
59
    protected $isAsyncRequest = false;
60
61
    /**
62
     * @var CommandBus|null Telegram Command Bus.
63
     */
64
    protected $commandBus = null;
65
66
    /**
67
     * @var Container IoC Container
68
     */
69
    protected static $container = null;
70
71
    /**
72
     * Timeout of the request in seconds.
73
     *
74
     * @var int
75
     */
76
    protected $timeOut = 60;
77
78
    /**
79
     * Connection timeout of the request in seconds.
80
     *
81
     * @var int
82
     */
83
    protected $connectTimeOut = 10;
84
85
    /**
86
     * Instantiates a new Telegram super-class object.
87
     *
88
     *
89
     * @param string              $token                      The Telegram Bot API Access Token.
90
     * @param bool                $async                      (Optional) Indicates if the request to Telegram
91
     *                                                        will be asynchronous (non-blocking).
92
     * @param HttpClientInterface $httpClientHandler          (Optional) Custom HTTP Client Handler.
93
     *
94
     * @throws TelegramSDKException
95
     */
96 66
    public function __construct($token = null, $async = false, $httpClientHandler = null)
97
    {
98 66
        $this->accessToken = isset($token) ? $token : getenv(static::BOT_TOKEN_ENV_NAME);
99 66
        if (!$this->accessToken) {
100 2
            throw new TelegramSDKException('Required "token" not supplied in config and could not find fallback environment variable "'.static::BOT_TOKEN_ENV_NAME.'"');
101
        }
102
103 66
        if (isset($async)) {
104 66
            $this->setAsyncRequest($async);
105 66
        }
106
107 66
        $this->client = new TelegramClient($httpClientHandler);
108 66
        $this->commandBus = new CommandBus($this);
109 66
    }
110
111
    /**
112
     * Invoke Bots Manager.
113
     *
114
     * @param $config
115
     *
116
     * @return BotsManager
117
     */
118
    public static function manager($config)
119
    {
120
        return new BotsManager($config);
121
    }
122
123
    /**
124
     * Returns the TelegramClient service.
125
     *
126
     * @return TelegramClient
127
     */
128 6
    public function getClient()
129
    {
130 6
        return $this->client;
131
    }
132
133
    /**
134
     * Returns Telegram Bot API Access Token.
135
     *
136
     * @return string
137
     */
138 42
    public function getAccessToken()
139
    {
140 42
        return $this->accessToken;
141
    }
142
143
    /**
144
     * Returns the last response returned from API request.
145
     *
146
     * @return TelegramResponse
147
     */
148 2
    public function getLastResponse()
149
    {
150 2
        return $this->lastResponse;
151
    }
152
153
    /**
154
     * Sets the bot access token to use with API requests.
155
     *
156
     * @param string $accessToken The bot access token to save.
157
     *
158
     * @throws \InvalidArgumentException
159
     *
160
     * @return Api
161
     */
162 8
    public function setAccessToken($accessToken)
163
    {
164 8
        if (is_string($accessToken)) {
165 2
            $this->accessToken = $accessToken;
166
167 2
            return $this;
168
        }
169
170 6
        throw new \InvalidArgumentException('The Telegram bot access token must be of type "string"');
171
    }
172
173
    /**
174
     * Make this request asynchronous (non-blocking).
175
     *
176
     * @param bool $isAsyncRequest
177
     *
178
     * @return Api
179
     */
180 66
    public function setAsyncRequest($isAsyncRequest)
181
    {
182 66
        $this->isAsyncRequest = $isAsyncRequest;
183
184 66
        return $this;
185
    }
186
187
    /**
188
     * Check if this is an asynchronous request (non-blocking).
189
     *
190
     * @return bool
191
     */
192 42
    public function isAsyncRequest()
193
    {
194 42
        return $this->isAsyncRequest;
195
    }
196
197
    /**
198
     * Returns SDK's Command Bus.
199
     *
200
     * @return CommandBus
201
     */
202 8
    public function getCommandBus()
203
    {
204 8
        return $this->commandBus;
205
    }
206
207
    /**
208
     * A simple method for testing your bot's auth token.
209
     * Returns basic information about the bot in form of a User object.
210
     *
211
     * @link https://core.telegram.org/bots/api#getme
212
     *
213
     * @throws TelegramSDKException
214
     *
215
     * @return User
216
     */
217 4
    public function getMe()
218
    {
219 4
        $response = $this->post('getMe');
220
221 2
        return new User($response->getDecodedBody());
222
    }
223
224
    /**
225
     * Send text messages.
226
     *
227
     * <code>
228
     * $params = [
229
     *   'chat_id'                  => '',
230
     *   'text'                     => '',
231
     *   'parse_mode'               => '',
232
     *   'disable_web_page_preview' => '',
233
     *   'disable_notification'     => '',
234
     *   'reply_to_message_id'      => '',
235
     *   'reply_markup'             => '',
236
     * ];
237
     * </code>
238
     *
239
     * @link https://core.telegram.org/bots/api#sendmessage
240
     *
241
     * @param array    $params
242
     *
243
     * @var int|string $params ['chat_id']
244
     * @var string     $params ['text']
245
     * @var string     $params ['parse_mode']
246
     * @var bool       $params ['disable_web_page_preview']
247
     * @var bool       $params ['disable_notification']
248
     * @var int        $params ['reply_to_message_id']
249
     * @var string     $params ['reply_markup']
250
     *
251
     * @throws TelegramSDKException
252
     *
253
     * @return Message
254
     */
255 4
    public function sendMessage(array $params)
256
    {
257 4
        $response = $this->post('sendMessage', $params);
258
259 4
        return new Message($response->getDecodedBody());
260
    }
261
262
    /**
263
     * Forward messages of any kind.
264
     *
265
     * <code>
266
     * $params = [
267
     *   'chat_id'              => '',
268
     *   'from_chat_id'         => '',
269
     *   'disable_notification' => '',
270
     *   'message_id'           => '',
271
     * ];
272
     * </code>
273
     *
274
     * @link https://core.telegram.org/bots/api#forwardmessage
275
     *
276
     * @param array    $params
277
     *
278
     * @var int|string $params ['chat_id']
279
     * @var int        $params ['from_chat_id']
280
     * @var bool       $params ['disable_notification']
281
     * @var int        $params ['message_id']
282
     *
283
     * @throws TelegramSDKException
284
     *
285
     * @return Message
286
     */
287 2
    public function forwardMessage(array $params)
288
    {
289 2
        $response = $this->post('forwardMessage', $params);
290
291 2
        return new Message($response->getDecodedBody());
292
    }
293
294
    /**
295
     * Send Photos.
296
     *
297
     * <code>
298
     * $params = [
299
     *   'chat_id'              => '',
300
     *   'photo'                => '',
301
     *   'caption'              => '',
302
     *   'disable_notification' => '',
303
     *   'reply_to_message_id'  => '',
304
     *   'reply_markup'         => '',
305
     * ];
306
     * </code>
307
     *
308
     * @link https://core.telegram.org/bots/api#sendphoto
309
     *
310
     * @param array    $params
311
     *
312
     * @var int|string $params ['chat_id']
313
     * @var string     $params ['photo']
314
     * @var string     $params ['caption']
315
     * @var bool       $params ['disable_notification']
316
     * @var int        $params ['reply_to_message_id']
317
     * @var string     $params ['reply_markup']
318
     *
319
     * @throws TelegramSDKException
320
     *
321
     * @return Message
322
     */
323 4
    public function sendPhoto(array $params)
324
    {
325 4
        $response = $this->uploadFile('sendPhoto', $params);
326
327 4
        return new Message($response->getDecodedBody());
328
    }
329
330
    /**
331
     * Send regular audio files.
332
     *
333
     * <code>
334
     * $params = [
335
     *   'chat_id'              => '',
336
     *   'audio'                => '',
337
     *   'duration'             => '',
338
     *   'performer'            => '',
339
     *   'title'                => '',
340
     *   'disable_notification' => '',
341
     *   'reply_to_message_id'  => '',
342
     *   'reply_markup'         => '',
343
     * ];
344
     * </code>
345
     *
346
     * @link https://core.telegram.org/bots/api#sendaudio
347
     *
348
     * @param array    $params
349
     *
350
     * @var int|string $params ['chat_id']
351
     * @var string     $params ['audio']
352
     * @var int        $params ['duration']
353
     * @var string     $params ['performer']
354
     * @var string     $params ['title']
355
     * @var bool       $params ['disable_notification']
356
     * @var int        $params ['reply_to_message_id']
357
     * @var string     $params ['reply_markup']
358
     *
359
     * @throws TelegramSDKException
360
     *
361
     * @return Message
362
     */
363 2
    public function sendAudio(array $params)
364
    {
365 2
        $response = $this->uploadFile('sendAudio', $params);
366
367 2
        return new Message($response->getDecodedBody());
368
    }
369
370
    /**
371
     * Send general files.
372
     *
373
     * <code>
374
     * $params = [
375
     *   'chat_id'              => '',
376
     *   'document'             => '',
377
     *   'caption'              => '',
378
     *   'disable_notification' => '',
379
     *   'reply_to_message_id'  => '',
380
     *   'reply_markup'         => '',
381
     * ];
382
     * </code>
383
     *
384
     * @link https://core.telegram.org/bots/api#senddocument
385
     *
386
     * @param array    $params
387
     *
388
     * @var int|string $params ['chat_id']
389
     * @var string     $params ['document']
390
     * @var string     $params ['caption']
391
     * @var bool       $params ['disable_notification']
392
     * @var int        $params ['reply_to_message_id']
393
     * @var string     $params ['reply_markup']
394
     *
395
     * @throws TelegramSDKException
396
     *
397
     * @return Message
398
     */
399 2
    public function sendDocument(array $params)
400
    {
401 2
        $response = $this->uploadFile('sendDocument', $params);
402
403 2
        return new Message($response->getDecodedBody());
404
    }
405
406
    /**
407
     * Send .webp stickers.
408
     *
409
     * <code>
410
     * $params = [
411
     *   'chat_id'              => '',
412
     *   'sticker'              => '',
413
     *   'disable_notification' => '',
414
     *   'reply_to_message_id'  => '',
415
     *   'reply_markup'         => '',
416
     * ];
417
     * </code>
418
     *
419
     * @link https://core.telegram.org/bots/api#sendsticker
420
     *
421
     * @param array    $params
422
     *
423
     * @var int|string $params ['chat_id']
424
     * @var string     $params ['sticker']
425
     * @var bool       $params ['disable_notification']
426
     * @var int        $params ['reply_to_message_id']
427
     * @var string     $params ['reply_markup']
428
     *
429
     * @throws TelegramSDKException
430
     *
431
     * @return Message
432
     */
433 2
    public function sendSticker(array $params)
434
    {
435 2
        if (is_file($params['sticker']) && (pathinfo($params['sticker'], PATHINFO_EXTENSION) !== 'webp')) {
436
            throw new TelegramSDKException('Invalid Sticker Provided. Supported Format: Webp');
437
        }
438
439 2
        $response = $this->uploadFile('sendSticker', $params);
440
441 2
        return new Message($response->getDecodedBody());
442
    }
443
444
    /**
445
     * Send Video File, Telegram clients support mp4 videos (other formats may be sent as Document).
446
     *
447
     * <code>
448
     * $params = [
449
     *   'chat_id'              => '',
450
     *   'video'                => '',
451
     *   'duration'             => '',
452
     *   'width'                => '',
453
     *   'height'               => '',
454
     *   'caption'              => '',
455
     *   'disable_notification' => '',
456
     *   'reply_to_message_id'  => '',
457
     *   'reply_markup'         => '',
458
     * ];
459
     * </code>
460
     *
461
     * @see  sendDocument
462
     * @link https://core.telegram.org/bots/api#sendvideo
463
     *
464
     * @param array    $params
465
     *
466
     * @var int|string $params ['chat_id']
467
     * @var string     $params ['video']
468
     * @var int        $params ['duration']
469
     * @var int        $params ['width']
470
     * @var int        $params ['height']
471
     * @var string     $params ['caption']
472
     * @var bool       $params ['disable_notification']
473
     * @var int        $params ['reply_to_message_id']
474
     * @var string     $params ['reply_markup']
475
     *
476
     * @throws TelegramSDKException
477
     *
478
     * @return Message
479
     */
480 2
    public function sendVideo(array $params)
481
    {
482 2
        $response = $this->uploadFile('sendVideo', $params);
483
484 2
        return new Message($response->getDecodedBody());
485
    }
486
487
    /**
488
     * Send voice audio files.
489
     *
490
     * <code>
491
     * $params = [
492
     *   'chat_id'              => '',
493
     *   'voice'                => '',
494
     *   'duration'             => '',
495
     *   'disable_notification' => '',
496
     *   'reply_to_message_id'  => '',
497
     *   'reply_markup'         => '',
498
     * ];
499
     * </code>
500
     *
501
     * @link https://core.telegram.org/bots/api#sendaudio
502
     *
503
     * @param array    $params
504
     *
505
     * @var int|string $params ['chat_id']
506
     * @var string     $params ['voice']
507
     * @var int        $params ['duration']
508
     * @var bool       $params ['disable_notification']
509
     * @var int        $params ['reply_to_message_id']
510
     * @var string     $params ['reply_markup']
511
     *
512
     * @throws TelegramSDKException
513
     *
514
     * @return Message
515
     */
516 2
    public function sendVoice(array $params)
517
    {
518 2
        $response = $this->uploadFile('sendVoice', $params);
519
520 2
        return new Message($response->getDecodedBody());
521
    }
522
523
    /**
524
     * Send point on the map.
525
     *
526
     * <code>
527
     * $params = [
528
     *   'chat_id'              => '',
529
     *   'latitude'             => '',
530
     *   'longitude'            => '',
531
     *   'disable_notification' => '',
532
     *   'reply_to_message_id'  => '',
533
     *   'reply_markup'         => '',
534
     * ];
535
     * </code>
536
     *
537
     * @link https://core.telegram.org/bots/api#sendlocation
538
     *
539
     * @param array    $params
540
     *
541
     * @var int|string $params ['chat_id']
542
     * @var float      $params ['latitude']
543
     * @var float      $params ['longitude']
544
     * @var bool       $params ['disable_notification']
545
     * @var int        $params ['reply_to_message_id']
546
     * @var string     $params ['reply_markup']
547
     *
548
     * @throws TelegramSDKException
549
     *
550
     * @return Message
551
     */
552 2
    public function sendLocation(array $params)
553
    {
554 2
        $response = $this->post('sendLocation', $params);
555
556 2
        return new Message($response->getDecodedBody());
557
    }
558
559
    /**
560
     * Send information about a venue.
561
     *
562
     * <code>
563
     * $params = [
564
     *   'chat_id'              => '',
565
     *   'latitude'             => '',
566
     *   'longitude'            => '',
567
     *   'title'                => '',
568
     *   'address'              => '',
569
     *   'foursquare_id'        => '',
570
     *   'disable_notification' => '',
571
     *   'reply_to_message_id'  => '',
572
     *   'reply_markup'         => '',
573
     * ];
574
     * </code>
575
     *
576
     * @link https://core.telegram.org/bots/api#sendvenue
577
     *
578
     * @param array    $params
579
     *
580
     * @var int|string $params ['chat_id']
581
     * @var float      $params ['latitude']
582
     * @var float      $params ['longitude']
583
     * @var string     $params ['title']
584
     * @var string     $params ['address']
585
     * @var string     $params ['foursquare_id']
586
     * @var bool       $params ['disable_notification']
587
     * @var int        $params ['reply_to_message_id']
588
     * @var string     $params ['reply_markup']
589
     *
590
     * @throws TelegramSDKException
591
     *
592
     * @return Message
593
     */
594
    public function sendVenue(array $params)
595
    {
596
        $response = $this->post('sendVenue', $params);
597
598
        return new Message($response->getDecodedBody());
599
    }
600
601
    /**
602
     * Send phone contacts.
603
     *
604
     * <code>
605
     * $params = [
606
     *   'chat_id'              => '',
607
     *   'phone_number'         => '',
608
     *   'first_name'           => '',
609
     *   'last_name'            => '',
610
     *   'disable_notification' => '',
611
     *   'reply_to_message_id'  => '',
612
     *   'reply_markup'         => '',
613
     * ];
614
     * </code>
615
     *
616
     * @link https://core.telegram.org/bots/api#sendcontact
617
     *
618
     * @param array    $params
619
     *
620
     * @var int|string $params ['chat_id']
621
     * @var string     $params ['phone_number']
622
     * @var string     $params ['first_name']
623
     * @var string     $params ['last_name']
624
     * @var bool       $params ['disable_notification']
625
     * @var int        $params ['reply_to_message_id']
626
     * @var string     $params ['reply_markup']
627
     *
628
     * @throws TelegramSDKException
629
     *
630
     * @return Message
631
     */
632
    public function sendContact(array $params)
633
    {
634
        $response = $this->post('sendContact', $params);
635
636
        return new Message($response->getDecodedBody());
637
    }
638
639
    /**
640
     * Broadcast a Chat Action.
641
     *
642
     * <code>
643
     * $params = [
644
     *   'chat_id' => '',
645
     *   'action'  => '',
646
     * ];
647
     * </code>
648
     *
649
     * @link https://core.telegram.org/bots/api#sendchataction
650
     *
651
     * @param array    $params
652
     *
653
     * @var int|string $params ['chat_id']
654
     * @var string     $params ['action']
655
     *
656
     * @throws TelegramSDKException
657
     *
658
     * @return bool
659
     */
660 4
    public function sendChatAction(array $params)
661
    {
662
        $validActions = [
663 4
            'typing',
664 4
            'upload_photo',
665 4
            'record_video',
666 4
            'upload_video',
667 4
            'record_audio',
668 4
            'upload_audio',
669 4
            'upload_document',
670 4
            'find_location',
671 4
        ];
672
673 4
        if (isset($params['action']) && in_array($params['action'], $validActions)) {
674 2
            $this->post('sendChatAction', $params);
675
676 2
            return true;
677
        }
678
679 2
        throw new TelegramSDKException('Invalid Action! Accepted value: '.implode(', ', $validActions));
680
    }
681
682
    /**
683
     * Returns a list of profile pictures for a user.
684
     *
685
     * <code>
686
     * $params = [
687
     *   'user_id' => '',
688
     *   'offset'  => '',
689
     *   'limit'   => '',
690
     * ];
691
     * </code>
692
     *
693
     * @link https://core.telegram.org/bots/api#getuserprofilephotos
694
     *
695
     * @param array $params
696
     *
697
     * @var int     $params ['user_id']
698
     * @var int     $params ['offset']
699
     * @var int     $params ['limit']
700
     *
701
     * @throws TelegramSDKException
702
     *
703
     * @return UserProfilePhotos
704
     */
705
    public function getUserProfilePhotos(array $params)
706
    {
707
        $response = $this->post('getUserProfilePhotos', $params);
708
709
        return new UserProfilePhotos($response->getDecodedBody());
710
    }
711
712
    /**
713
     * Returns basic info about a file and prepare it for downloading.
714
     *
715
     * <code>
716
     * $params = [
717
     *   'file_id' => '',
718
     * ];
719
     * </code>
720
     *
721
     * The file can then be downloaded via the link
722
     * https://api.telegram.org/file/bot<token>/<file_path>,
723
     * where <file_path> is taken from the response.
724
     *
725
     * @link https://core.telegram.org/bots/api#getFile
726
     *
727
     * @param array $params
728
     *
729
     * @var string  $params ['file_id']
730
     *
731
     * @throws TelegramSDKException
732
     *
733
     * @return File
734
     */
735 2
    public function getFile(array $params)
736
    {
737 2
        $response = $this->post('getFile', $params);
738
739 2
        return new File($response->getDecodedBody());
740
    }
741
742
    /**
743
     * Kick a user from a group or a supergroup.
744
     *
745
     * In the case of supergroups, the user will not be able to return to the group on their own using
746
     * invite links etc., unless unbanned first.
747
     *
748
     * The bot must be an administrator in the group for this to work.
749
     *
750
     * <code>
751
     * $params = [
752
     *   'chat_id'              => '',
753
     *   'user_id'              => '',
754
     * ];
755
     * </code>
756
     *
757
     * @link https://core.telegram.org/bots/api#kickchatmember
758
     *
759
     * @param array    $params
760
     *
761
     * @var int|string $params ['chat_id']
762
     * @var int        $params ['user_id']
763
     *
764
     * @throws TelegramSDKException
765
     *
766
     * @return bool
767
     */
768
    public function kickChatMember(array $params)
769
    {
770
        $this->post('kickChatMember', $params);
771
772
        return true;
773
    }
774
775
    /**
776
     * Unban a previously kicked user in a supergroup.
777
     *
778
     * The user will not return to the group automatically, but will be able to join via link, etc.
779
     *
780
     * The bot must be an administrator in the group for this to work.
781
     *
782
     * <code>
783
     * $params = [
784
     *   'chat_id'              => '',
785
     *   'user_id'              => '',
786
     * ];
787
     * </code>
788
     *
789
     * @link https://core.telegram.org/bots/api#unbanchatmember
790
     *
791
     * @param array    $params
792
     *
793
     * @var int|string $params ['chat_id']
794
     * @var int        $params ['user_id']
795
     *
796
     * @throws TelegramSDKException
797
     *
798
     * @return bool
799
     */
800
    public function unbanChatMember(array $params)
801
    {
802
        $this->post('unbanChatMember', $params);
803
804
        return true;
805
    }
806
807
    /**
808
     * Get up to date information about the chat (current name of the user for one-on-one conversations,
809
     * current username of a user, group or channel,
810
     *
811
     * <code>
812
     * $params = [
813
     *   'chat_id'  => '',
814
     * ];
815
     * </code>
816
     *
817
     * @link https://core.telegram.org/bots/api#getchat
818
     *
819
     * @param array $params
820
     *
821
     * @var string|int  $params ['chat_id'] Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)
822
     *
823
     * @throws TelegramSDKException
824
     *
825
     * @return Chat
826
     */
827
    public function getChat(array $params)
828
    {
829
        $response = $this->post('getChat', $params);
830
831
        return new Chat($response->getDecodedBody());
832
    }
833
834
    /**
835
     * Get a list of administrators in a chat.
836
     *
837
     * <code>
838
     * $params = [
839
     *   'chat_id'  => '',
840
     * ];
841
     * </code>
842
     *
843
     * @link https://core.telegram.org/bots/api#getchatadministrators
844
     *
845
     * @param array $params
846
     *
847
     * @var string|int  $params ['chat_id'] Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername);
848
     *
849
     * @throws TelegramSDKException
850
     *
851
     * @return ChatMember[]
852
     */
853
    public function getChatAdministrators(array $params)
854
    {
855
        $response = $this->post('getChatAdministrators', $params);
856
857
        return collect($response->getResult())
858
            ->map(function ($admin) {
859
                return new ChatMember($admin);
860
            })
861
            ->all();
862
    }
863
864
    /**
865
     * Get the number of members in a chat
866
     *
867
     * <code>
868
     * $params = [
869
     *   'chat_id'  => '',
870
     * ];
871
     * </code>
872
     *
873
     * @link https://core.telegram.org/bots/api#getchatmemberscount
874
     *
875
     * @param array $params
876
     *
877
     * @var string|int  $params ['chat_id'] Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)
878
     *
879
     * @throws TelegramSDKException
880
     *
881
     * @return int
882
     */
883
    public function getChatMembersCount(array $params)
884
    {
885
        $response = $this->post('getChatMembersCount', $params);
886
887
        return $response->getResult();
888
    }
889
890
    /**
891
     * Get information about a member of a chat.
892
     *
893
     * <code>
894
     * $params = [
895
     *   'chat_id'  => '',
896
     *   'user_id'  => '',
897
     * ];
898
     * </code>
899
     *
900
     * @link https://core.telegram.org/bots/api#getchatmember
901
     *
902
     * @param array $params
903
     *
904
     * @var string|int  $params ['chat_id'] Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)
905
     * @var int         $params ['user_id'] Unique identifier of the target user.
906
     *
907
     * @throws TelegramSDKException
908
     *
909
     * @return ChatMember
910
     */
911
    public function getChatMember(array $params)
912
    {
913
        $response = $this->post('getChatMember', $params);
914
915
        return new ChatMember($response->getDecodedBody());
916
    }
917
918
    /**
919
     * Send answers to callback queries sent from inline keyboards.
920
     *
921
     * he answer will be displayed to the user as a notification at the top of the chat screen or as an alert.
922
     *
923
     * <code>
924
     * $params = [
925
     *   'callback_query_id'  => '',
926
     *   'text'               => '',
927
     *   'show_alert'         => '',
928
     * ];
929
     * </code>
930
     *
931
     * @link https://core.telegram.org/bots/api#answerCallbackQuery
932
     *
933
     * @param array $params
934
     *
935
     * @var string  $params ['callback_query_id']
936
     * @var string  $params ['text']
937
     * @var bool    $params ['show_alert']
938
     *
939
     * @throws TelegramSDKException
940
     *
941
     * @return bool
942
     */
943
    public function answerCallbackQuery(array $params)
944
    {
945
        $this->post('answerCallbackQuery', $params);
946
947
        return true;
948
    }
949
950
951
    /**
952
     * Edit text messages sent by the bot or via the bot (for inline bots).
953
     *
954
     * <code>
955
     * $params = [
956
     *   'chat_id'                  => '',
957
     *   'message_id'               => '',
958
     *   'inline_message_id'        => '',
959
     *   'text'                     => '',
960
     *   'parse_mode'               => '',
961
     *   'disable_web_page_preview' => '',
962
     *   'reply_markup'             => '',
963
     * ];
964
     * </code>
965
     *
966
     * @link https://core.telegram.org/bots/api#editMessageText
967
     *
968
     * @param array    $params
969
     *
970
     * @var int|string $params ['chat_id']
971
     * @var int        $params ['message_id']
972
     * @var string     $params ['inline_message_id']
973
     * @var string     $params ['text']
974
     * @var string     $params ['parse_mode']
975
     * @var bool       $params ['disable_web_page_preview']
976
     * @var string     $params ['reply_markup']
977
     *
978
     * @throws TelegramSDKException
979
     *
980
     * @return Message|bool
981
     */
982
    public function editMessageText(array $params)
983
    {
984
        $response = $this->post('editMessageText', $params);
985
986
        return new Message($response->getDecodedBody());
987
    }
988
989
    /**
990
     * Edit captions of messages sent by the bot or via the bot (for inline bots).
991
     *
992
     * <code>
993
     * $params = [
994
     *   'chat_id'                  => '',
995
     *   'message_id'               => '',
996
     *   'inline_message_id'        => '',
997
     *   'caption'                  => '',
998
     *   'reply_markup'             => '',
999
     * ];
1000
     * </code>
1001
     *
1002
     * @link https://core.telegram.org/bots/api#editMessageCaption
1003
     *
1004
     * @param array    $params
1005
     *
1006
     * @var int|string $params ['chat_id']
1007
     * @var int        $params ['message_id']
1008
     * @var string     $params ['inline_message_id']
1009
     * @var string     $params ['caption']
1010
     * @var string     $params ['reply_markup']
1011
     *
1012
     * @throws TelegramSDKException
1013
     *
1014
     * @return Message|bool
1015
     */
1016
    public function editMessageCaption(array $params)
1017
    {
1018
        $response = $this->post('editMessageCaption', $params);
1019
1020
        return new Message($response->getDecodedBody());
1021
    }
1022
1023
    /**
1024
     * Edit only the reply markup of messages sent by the bot or via the bot (for inline bots).
1025
     *
1026
     * <code>
1027
     * $params = [
1028
     *   'chat_id'                  => '',
1029
     *   'message_id'               => '',
1030
     *   'inline_message_id'        => '',
1031
     *   'reply_markup'             => '',
1032
     * ];
1033
     * </code>
1034
     *
1035
     * @link https://core.telegram.org/bots/api#editMessageReplyMarkup
1036
     *
1037
     * @param array    $params
1038
     *
1039
     * @var int|string $params ['chat_id']
1040
     * @var int        $params ['message_id']
1041
     * @var string     $params ['inline_message_id']
1042
     * @var string     $params ['reply_markup']
1043
     *
1044
     * @throws TelegramSDKException
1045
     *
1046
     * @return Message|bool
1047
     */
1048
    public function editMessageReplyMarkup(array $params)
1049
    {
1050
        $response = $this->post('editMessageReplyMarkup', $params);
1051
1052
        return new Message($response->getDecodedBody());
1053
    }
1054
1055
    /**
1056
     * Use this method to send answers to an inline query.
1057
     *
1058
     * <code>
1059
     * $params = [
1060
     *   'inline_query_id'      => '',
1061
     *   'results'              => [],
1062
     *   'cache_time'           => 0,
1063
     *   'is_personal'          => false,
1064
     *   'next_offset'          => '',
1065
     *   'switch_pm_text'       => '',
1066
     *   'switch_pm_parameter'  => '',
1067
     * ];
1068
     * </code>
1069
     *
1070
     * @link https://core.telegram.org/bots/api#answerinlinequery
1071
     *
1072
     * @param array     $params
1073
     *
1074
     * @var string      $params ['inline_query_id']
1075
     * @var array       $params ['results']
1076
     * @var int|null    $params ['cache_time']
1077
     * @var bool|null   $params ['is_personal']
1078
     * @var string|null $params ['next_offset']
1079
     * @var string|null $params ['switch_pm_text']
1080
     * @var string|null $params ['switch_pm_parameter']
1081
     *
1082
     * @throws TelegramSDKException
1083
     *
1084
     * @return bool
1085
     */
1086
    public function answerInlineQuery(array $params = [])
1087
    {
1088
        if (is_array($params['results'])) {
1089
            $params['results'] = json_encode($params['results']);
1090
        }
1091
1092
        $this->post('answerInlineQuery', $params);
1093
1094
        return true;
1095
    }
1096
1097
    /**
1098
     * Set a Webhook to receive incoming updates via an outgoing webhook.
1099
     *
1100
     * <code>
1101
     * $params = [
1102
     *   'url'         => '',
1103
     *   'certificate' => '',
1104
     * ];
1105
     * </code>
1106
     *
1107
     * @link https://core.telegram.org/bots/api#setwebhook
1108
     *
1109
     * @param array $params
1110
     *
1111
     * @var string  $params ['url']         HTTPS url to send updates to.
1112
     * @var string  $params ['certificate'] Upload your public key certificate so that the root certificate in
1113
     *                                      use can be checked.
1114
     *
1115
     * @throws TelegramSDKException
1116
     *
1117
     * @return TelegramResponse
1118
     */
1119 6
    public function setWebhook(array $params)
1120
    {
1121 6
        if (filter_var($params['url'], FILTER_VALIDATE_URL) === false) {
1122 2
            throw new TelegramSDKException('Invalid URL Provided');
1123
        }
1124
1125 4
        if (parse_url($params['url'], PHP_URL_SCHEME) !== 'https') {
1126 2
            throw new TelegramSDKException('Invalid URL, should be a HTTPS url.');
1127
        }
1128
1129 2
        return $this->uploadFile('setWebhook', $params);
1130
    }
1131
1132
    /**
1133
     * Returns webhook updates sent by Telegram.
1134
     * Works only if you set a webhook.
1135
     *
1136
     * @see setWebhook
1137
     *
1138
     * @return Update
1139
     */
1140
    public function getWebhookUpdates($emitUpdateWasReceivedEvent = true)
1141
    {
1142
        $body = json_decode(file_get_contents('php://input'), true);
1143
1144
        $update = new Update($body);
1145
1146
        if ($emitUpdateWasReceivedEvent) {
1147
            $this->emitEvent(new UpdateWasReceived($update, $this));
1148
        }
1149
1150
        return $update;
1151
    }
1152
1153
    /**
1154
     * Removes the outgoing webhook (if any).
1155
     *
1156
     * @throws TelegramSDKException
1157
     *
1158
     * @return TelegramResponse
1159
     */
1160 2
    public function removeWebhook()
1161
    {
1162 2
        $url = '';
1163
1164 2
        return $this->post('setWebhook', compact('url'));
1165
    }
1166
1167
    /**
1168
     * Use this method to receive incoming updates using long polling.
1169
     *
1170
     * <code>
1171
     * $params = [
1172
     *   'offset'  => '',
1173
     *   'limit'   => '',
1174
     *   'timeout' => '',
1175
     * ];
1176
     * </code>
1177
     *
1178
     * @link https://core.telegram.org/bots/api#getupdates
1179
     *
1180
     * @param array  $params
1181
     * @param bool  $emitUpdateWasReceivedEvents
1182
     * @var int|null $params ['offset']
1183
     * @var int|null $params ['limit']
1184
     * @var int|null $params ['timeout']
1185
     *
1186
     * @throws TelegramSDKException
1187
     *
1188
     * @return Update[]
1189
     */
1190 6
    public function getUpdates(array $params = [], $emitUpdateWasReceivedEvents = true)
1191
    {
1192 6
        $response = $this->post('getUpdates', $params);
1193 6
        $updates = $response->getDecodedBody();
1194
1195
        /** @var Update[] $data */
1196 6
        $data = [];
1197 6
        if (isset($updates['result'])) {
1198 6
            foreach ($updates['result'] as $body) {
1199 6
                $update = new Update($body);
1200
1201 6
                if ($emitUpdateWasReceivedEvents) {
1202 6
                    $this->emitEvent(new UpdateWasReceived($update, $this));
1203 6
                }
1204
1205 6
                $data[] = $update;
1206 6
            }
1207 6
        }
1208
1209 6
        return $data;
1210
    }
1211
1212
1213
    /**
1214
     * Builds a custom keyboard markup.
1215
     *
1216
     * <code>
1217
     * $params = [
1218
     *   'keyboard'          => '',
1219
     *   'resize_keyboard'   => '',
1220
     *   'one_time_keyboard' => '',
1221
     *   'selective'         => '',
1222
     * ];
1223
     * </code>
1224
     *
1225
     * @deprecated Use Telegram\Bot\Keyboard\Keyboard::make(array $params = []) instead.
1226
     *             To be removed in next major version.
1227
     *
1228
     * @link       https://core.telegram.org/bots/api#replykeyboardmarkup
1229
     *
1230
     * @param array $params
1231
     *
1232
     * @var array   $params ['keyboard']
1233
     * @var bool    $params ['resize_keyboard']
1234
     * @var bool    $params ['one_time_keyboard']
1235
     * @var bool    $params ['selective']
1236
     *
1237
     * @return string
1238
     */
1239
    public function replyKeyboardMarkup(array $params)
1240
    {
1241
        return Keyboard::make($params);
1242
    }
1243
1244
    /**
1245
     * Hide the current custom keyboard and display the default letter-keyboard.
1246
     *
1247
     * <code>
1248
     * $params = [
1249
     *   'hide_keyboard' => true,
1250
     *   'selective'     => false,
1251
     * ];
1252
     * </code>
1253
     *
1254
     * @deprecated Use Telegram\Bot\Keyboard\Keyboard::hide(array $params = []) instead.
1255
     *             To be removed in next major version.
1256
     *
1257
     * @link       https://core.telegram.org/bots/api#replykeyboardhide
1258
     *
1259
     * @param array $params
1260
     *
1261
     * @var bool    $params ['hide_keyboard']
1262
     * @var bool    $params ['selective']
1263
     *
1264
     * @return string
1265
     */
1266
    public static function replyKeyboardHide(array $params = [])
1267
    {
1268
        return Keyboard::hide($params);
1269
    }
1270
1271
    /**
1272
     * Display a reply interface to the user (act as if the user has selected the bot‘s message and tapped ’Reply').
1273
     *
1274
     * <code>
1275
     * $params = [
1276
     *   'force_reply' => true,
1277
     *   'selective'   => false,
1278
     * ];
1279
     * </code>
1280
     *
1281
     * @deprecated Use Telegram\Bot\Keyboard\Keyboard::forceReply(array $params = []) instead.
1282
     *             To be removed in next major version.
1283
     *
1284
     * @link       https://core.telegram.org/bots/api#forcereply
1285
     *
1286
     * @param array $params
1287
     *
1288
     * @var bool    $params ['force_reply']
1289
     * @var bool    $params ['selective']
1290
     *
1291
     * @return string
1292
     */
1293
    public static function forceReply(array $params = [])
1294
    {
1295
        return Keyboard::forceReply($params);
1296
    }
1297
1298
    /**
1299
     * Processes Inbound Commands.
1300
     *
1301
     * @param bool $webhook
1302
     *
1303
     * @return Update|Update[]
1304
     */
1305 6
    public function commandsHandler($webhook = false)
1306
    {
1307 6
        if ($webhook) {
1308
            $update = $this->getWebhookUpdates();
1309
            $this->processCommand($update);
1310
1311
            return $update;
1312
        }
1313
1314 6
        $updates = $this->getUpdates();
1315 6
        $highestId = -1;
1316
1317 6
        foreach ($updates as $update) {
1318 6
            $highestId = $update->getUpdateId();
1319 6
            $this->processCommand($update);
1320 6
        }
1321
1322
        //An update is considered confirmed as soon as getUpdates is called with an offset higher than its update_id.
1323 6
        if ($highestId != -1) {
1324 6
            $params = [];
1325 6
            $params['offset'] = $highestId + 1;
1326 6
            $params['limit'] = 1;
1327 6
            $this->getUpdates($params);
1328 6
        }
1329
1330 6
        return $updates;
1331
    }
1332
1333
    /**
1334
     * Check update object for a command and process.
1335
     *
1336
     * @param Update $update
1337
     */
1338 6
    public function processCommand(Update $update)
1339
    {
1340 6
        $message = $update->getMessage();
1341
1342 6
        if ($message !== null && $message->has('text')) {
1343 6
            $this->getCommandBus()->handler($message->getText(), $update);
1344 6
        }
1345 6
    }
1346
1347
    /**
1348
     * Helper to Trigger Commands.
1349
     *
1350
     * @param string $name   Command Name
1351
     * @param Update $update Update Object
1352
     *
1353
     * @return mixed
1354
     */
1355
    public function triggerCommand($name, Update $update)
1356
    {
1357
        return $this->getCommandBus()->execute($name, $update->getMessage()->getText(), $update);
1358
    }
1359
1360
    /**
1361
     * Determine if a given type is the message.
1362
     *
1363
     * @deprecated Call method isType directly on Message object
1364
     *             To be removed in next major version.
1365
     *
1366
     * @param string         $type
1367
     * @param Update|Message $object
1368
     *
1369
     * @throws \InvalidArgumentException
1370
     *
1371
     * @return bool
1372
     */
1373 View Code Duplication
    public function isMessageType($type, $object)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1374
    {
1375
        if ($object === null) {
1376
            return null;
1377
        }
1378
        
1379
        if ($object instanceof Update) {
1380
            if ($object->has('message')) {
1381
                $object = $object->getMessage();
1382
            }else{
1383
                throw new \InvalidArgumentException('The object must be or contain a message');
1384
            }
1385
        }
1386
        
1387
        return $object->isType($type);
1388
    }
1389
1390
    /**
1391
     * Detect Message Type Based on Update or Message Object.
1392
     *
1393
     * @deprecated Call method detectType directly on Message object
1394
     *             To be removed in next major version.
1395
     *
1396
     * @param Update|Message $object
1397
     *
1398
     * @throws \InvalidArgumentException
1399
     *
1400
     * @return string|null
1401
     */
1402 View Code Duplication
    public function detectMessageType($object)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1403
    {
1404
        if ($object === null) {
1405
            return null;
1406
        }
1407
        
1408
        if ($object instanceof Update) {
1409
            if ($object->has('message')) {
1410
                $object = $object->getMessage();
1411
            } else {
1412
                throw new \InvalidArgumentException('The object must be or contain a message');
1413
            }
1414
        }
1415
1416
        return $object->detectType();
1417
    }
1418
1419
    /**
1420
     * Sends a GET request to Telegram Bot API and returns the result.
1421
     *
1422
     * @param string $endpoint
1423
     * @param array  $params
1424
     *
1425
     * @throws TelegramSDKException
1426
     *
1427
     * @return TelegramResponse
1428
     */
1429
    protected function get($endpoint, $params = [])
1430
    {
1431
        if (array_key_exists('reply_markup', $params)) {
1432
            $params['reply_markup'] = (string)$params['reply_markup'];
1433
        }
1434
1435
        return $this->sendRequest(
1436
            'GET',
1437
            $endpoint,
1438
            $params
1439
        );
1440
    }
1441
1442
    /**
1443
     * Sends a POST request to Telegram Bot API and returns the result.
1444
     *
1445
     * @param string $endpoint
1446
     * @param array  $params
1447
     * @param bool   $fileUpload Set true if a file is being uploaded.
1448
     *
1449
     * @return TelegramResponse
1450
     */
1451 40
    protected function post($endpoint, array $params = [], $fileUpload = false)
1452
    {
1453 40
        if ($fileUpload) {
1454 16
            $params = ['multipart' => $params];
1455 16
        } else {
1456
1457 24
            if (array_key_exists('reply_markup', $params)) {
1458
                $params['reply_markup'] = (string)$params['reply_markup'];
1459
            }
1460
1461 24
            $params = ['form_params' => $params];
1462
        }
1463
1464 40
        return $this->sendRequest(
1465 40
            'POST',
1466 40
            $endpoint,
1467
            $params
1468 40
        );
1469
    }
1470
1471
    /**
1472
     * Sends a multipart/form-data request to Telegram Bot API and returns the result.
1473
     * Used primarily for file uploads.
1474
     *
1475
     * @param string $endpoint
1476
     * @param array  $params
1477
     *
1478
     * @throws TelegramSDKException
1479
     *
1480
     * @return TelegramResponse
1481
     */
1482 16
    protected function uploadFile($endpoint, array $params = [])
1483
    {
1484 16
        $i = 0;
1485 16
        $multipart_params = [];
1486 16
        foreach ($params as $name => $contents) {
1487 16
            if (is_null($contents)) {
1488
                continue;
1489
            }
1490
1491 16
            if (!is_resource($contents) && $name !== 'url') {
1492 14
                $validUrl = filter_var($contents, FILTER_VALIDATE_URL);
1493 14
                $contents = (is_file($contents) || $validUrl) ? (new InputFile($contents))->open() : (string)$contents;
1494 14
            }
1495
1496 16
            $multipart_params[$i]['name'] = $name;
1497 16
            $multipart_params[$i]['contents'] = $contents;
1498 16
            ++$i;
1499 16
        }
1500
1501 16
        return $this->post($endpoint, $multipart_params, true);
1502
    }
1503
1504
    /**
1505
     * Sends a request to Telegram Bot API and returns the result.
1506
     *
1507
     * @param string $method
1508
     * @param string $endpoint
1509
     * @param array  $params
1510
     *
1511
     * @throws TelegramSDKException
1512
     *
1513
     * @return TelegramResponse
1514
     */
1515 40
    protected function sendRequest(
1516
        $method,
1517
        $endpoint,
1518
        array $params = []
1519
    ) {
1520 40
        $request = $this->request($method, $endpoint, $params);
1521
1522 40
        return $this->lastResponse = $this->client->sendRequest($request);
1523
    }
1524
1525
    /**
1526
     * Instantiates a new TelegramRequest entity.
1527
     *
1528
     * @param string $method
1529
     * @param string $endpoint
1530
     * @param array  $params
1531
     *
1532
     * @return TelegramRequest
1533
     */
1534 40
    protected function request(
1535
        $method,
1536
        $endpoint,
1537
        array $params = []
1538
    ) {
1539 40
        return new TelegramRequest(
1540 40
            $this->getAccessToken(),
1541 40
            $method,
1542 40
            $endpoint,
1543 40
            $params,
1544 40
            $this->isAsyncRequest(),
1545 40
            $this->getTimeOut(),
1546 40
            $this->getConnectTimeOut()
1547 40
        );
1548
    }
1549
1550
    /**
1551
     * Magic method to process any "get" requests.
1552
     *
1553
     * @param $method
1554
     * @param $arguments
1555
     *
1556
     * @throws TelegramSDKException
1557
     *
1558
     * @return bool|TelegramResponse|UnknownObject
1559
     */
1560 2
    public function __call($method, $arguments)
1561
    {
1562 2
        if (preg_match('/^\w+Commands?/', $method, $matches)) {
1563 2
            return call_user_func_array([$this->getCommandBus(), $matches[0]], $arguments);
1564
        }
1565
1566
        $action = substr($method, 0, 3);
1567
        if ($action === 'get') {
1568
            /* @noinspection PhpUndefinedFunctionInspection */
1569
            $class_name = studly_case(substr($method, 3));
1570
            $class = 'Telegram\Bot\Objects\\'.$class_name;
1571
            $response = $this->post($method, $arguments[0] ?: []);
1572
1573
            if (class_exists($class)) {
1574
                return new $class($response->getDecodedBody());
1575
            }
1576
1577
            return $response;
1578
        }
1579
        $response = $this->post($method, $arguments[0]);
1580
1581
        return new UnknownObject($response->getDecodedBody());
1582
    }
1583
1584
    /**
1585
     * Set the IoC Container.
1586
     *
1587
     * @param $container Container instance
1588
     *
1589
     * @return void
1590
     */
1591 2
    public static function setContainer(Container $container)
1592
    {
1593 2
        self::$container = $container;
1594 2
    }
1595
1596
    /**
1597
     * Get the IoC Container.
1598
     *
1599
     * @return Container
1600
     */
1601 2
    public function getContainer()
1602
    {
1603 2
        return self::$container;
1604
    }
1605
1606
    /**
1607
     * Check if IoC Container has been set.
1608
     *
1609
     * @return boolean
1610
     */
1611
    public function hasContainer()
1612
    {
1613
        return self::$container !== null;
1614
    }
1615
1616
    /**
1617
     * @return int
1618
     */
1619 40
    public function getTimeOut()
1620
    {
1621 40
        return $this->timeOut;
1622
    }
1623
1624
    /**
1625
     * @param int $timeOut
1626
     *
1627
     * @return $this
1628
     */
1629 2
    public function setTimeOut($timeOut)
1630
    {
1631 2
        $this->timeOut = $timeOut;
1632
1633 2
        return $this;
1634
    }
1635
1636
    /**
1637
     * @return int
1638
     */
1639 40
    public function getConnectTimeOut()
1640
    {
1641 40
        return $this->connectTimeOut;
1642
    }
1643
1644
    /**
1645
     * @param int $connectTimeOut
1646
     *
1647
     * @return $this
1648
     */
1649 2
    public function setConnectTimeOut($connectTimeOut)
1650
    {
1651 2
        $this->connectTimeOut = $connectTimeOut;
1652
1653 2
        return $this;
1654
    }
1655
}
1656