Completed
Pull Request — master (#6)
by
unknown
02:19
created
src/Smoqadam/Telegram.php 3 patches
Indentation   +513 added lines, -513 removed lines patch added patch discarded remove patch
@@ -11,518 +11,518 @@
 block discarded – undo
11 11
 
12 12
 class Telegram {
13 13
 
14
-    const PARSE_MARKDOWN = 'Markdown';
15
-    const PARSE_HTML     = 'HTML';
16
-
17
-    const ACTION_TYPING         = 'typing';
18
-    const ACTION_UPLOAD_PHOTO   = 'upload_photo';
19
-    const ACTION_RECORD_VIDEO   = 'record_video';
20
-    const ACTION_UPLOAD_VIDEO   = 'upload_video';
21
-    const ACTION_RECORD_AUDIO   = 'record_audio';
22
-    const ACTION_UPLOAD_AUDIO   = 'upload_audio';
23
-    const ACTION_UPLOAD_DOC     = 'upload_document';
24
-    const ACTION_FIND_LOCATION  = 'find_location';
25
-
26
-    public $api = 'https://api.telegram.org/bot';
27
-
28
-    /**
29
-     * returned json from telegram api parse to object and save to result
30
-     * @var
31
-     */
32
-    public $result;
33
-
34
-    /**
35
-     * @name State of bot
36
-     * state of bot
37
-     * @var object
38
-     */
39
-    public $state;
40
-
41
-    /**
42
-     * commands in regex and callback
43
-     * @var array
44
-     */
45
-    private $commands = [];
46
-
47
-    /**
48
-     * InlineQuery in regex and callback
49
-     * @var array
50
-     */
51
-    private $inlines = [];
52
-
53
-    /**
54
-     * callbacks
55
-     * @var array
56
-     */
57
-    private $callbacks = [];
58
-
59
-    /**
60
-     * available telegram bot commands
61
-     * @var array
62
-     */
63
-    private $available_commands = [
64
-        'getMe',
65
-        'sendMessage',
66
-        'forwardMessage',
67
-        'sendPhoto',
68
-        'sendAudio',
69
-        'sendDocument',
70
-        'sendSticker',
71
-        'sendVideo',
72
-        'sendLocation',
73
-        'sendChatAction',
74
-        'getUserProfilePhotos',
75
-        'answerInlineQuery',
76
-        'getUpdates',
77
-        'setWebhook',
78
-    ];
79
-
80
-    /**
81
-     * pre patterns you can use in regex
82
-     * @var array
83
-     */
84
-    private $patterns = [
85
-        ':any' => '.*',
86
-        ':num' => '[0-9]{0,}',
87
-        ':str' => '[a-zA-z]{0,}',
88
-    ];
89
-
90
-    /**
91
-     *
92
-     * @param String $token Telegram api token , taken by botfather
93
-     */
94
-    public function __construct($token) {
95
-        $this->api .= $token;
96
-    }
97
-
98
-    /**
99
-     * add new command to the bot
100
-     * @param String $cmd
101
-     * @param \Closure $func
102
-     */
103
-    public function cmd($cmd, $func) {
104
-        $this->commands[] = new Trigger($cmd, $func);
105
-    }
106
-
107
-
108
-    public function PDO(){
109
-
110
-        $servername ='YOUR_SERVER_NAME';
111
-        $username = 'YOUR_USERNAME';
112
-        $password ='YOUR_PASSWORD';
113
-        $dbname = 'YOUR_DATABASE_NAME';
114
-        try {
115
-            $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]);
116
-            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
117
-
118
-            return $conn;
119
-        }
120
-        catch(PDOException $e)
121
-        {
122
-            return $e->getMessage();
123
-        }
124
-    }
125
-
126
-    /**
127
-     * add new InlineQuery to the bot
128
-     * @param String $cmd
129
-     * @param \Closure $func
130
-     */
131
-    public function inlineQuery($cmd, $func) {
132
-        $this->inlines[] = new Trigger($cmd, $func);
133
-    }
134
-
135
-    /**
136
-     * this method check for received payload(command, inlinequery and so on) and
137
-     * then execute the correct function
138
-     *
139
-     * @param bool $sleep
140
-     */
141
-    public function run($sleep = false) {
142
-        $result = $this->getUpdates();
143
-        while (true) {
144
-            $update_id = isset($result->update_id) ? $result->update_id : 1;
145
-            $result = $this->getUpdates($update_id + 1);
146
-
147
-            $this->processPayload($result);
148
-
149
-            if ($sleep !== false)
150
-                sleep($sleep);
151
-        }
152
-    }
153
-
154
-    /**
155
-     * this method used for setWebhook sended payload
156
-     */
157
-    public function process($payload) {
158
-        $result = $this->convertToObject($payload, true);
159
-
160
-        return $this->processPayload($result);
161
-    }
162
-
163
-    private function processPayload($result) {
164
-        if ($result) {
165
-            try {
166
-                $this->result = $result;
167
-
168
-                // now i select the right triggers for payload received by Telegram
169
-                if( isset($this->result->message->text) ) {
170
-                    $payload = $this->result->message->text;
171
-                    $triggers = $this->commands;
172
-                } elseif ( isset($this->result->inline_query) ) {
173
-                    $payload = $this->result->inline_query->query;
174
-                    $triggers = $this->inlines;
175
-                } else {
176
-                    throw new \Exception("Error Processing Request", 1);
177
-                }
178
-
179
-                $args = null;
180
-
181
-                foreach ($triggers as &$trigger) {
182
-                    // replace public patterns to regex pattern
183
-                    $searchs = array_keys($this->patterns);
184
-                    $replaces = array_values($this->patterns);
185
-                    $pattern = str_replace($searchs, $replaces, $trigger->pattern);
186
-
187
-                    //find args pattern
188
-                    $args = $this->getArgs($pattern, $payload);
189
-
190
-                    $pattern = '/^' . $pattern . '/i';
191
-
192
-                    preg_match($pattern, $payload, $matches);
193
-
194
-                    if (isset($matches[0])) {
195
-                        $func = $trigger->callback;
196
-                        return call_user_func($func, $args);
197
-                    }
198
-                }
199
-            } catch (\Exception $e) {
200
-                error_log($e->getMessage());
201
-                echo "\r\n Exception :: " . $e->getMessage();
202
-            }
203
-        } else {
204
-            echo "\r\nNo new message\r\n";
205
-        }
206
-    }
207
-
208
-    /**
209
-     * get arguments part in regex
210
-     * @param $pattern
211
-     * @param $payload
212
-     * @return mixed|null
213
-     */
214
-    private function getArgs(&$pattern, $payload) {
215
-        $args = null;
216
-        // if command has argument
217
-        if (preg_match('/<<.*>>/', $pattern, $matches)) {
218
-
219
-            $args_pattern = $matches[0];
220
-            //remove << and >> from patterns
221
-            $tmp_args_pattern = str_replace(['<<', '>>'], ['(', ')'], $pattern);
222
-
223
-            //if args set
224
-            if (preg_match('/' . $tmp_args_pattern . '/i', $payload, $matches)) {
225
-                //remove first element
226
-                array_shift($matches);
227
-                if (isset($matches[0])) {
228
-                    //set args
229
-                    $args = array_shift($matches);
230
-
231
-                    //remove args pattern from main pattern
232
-                    $pattern = str_replace($args_pattern, '', $pattern);
233
-                }
234
-            }
235
-        }
236
-        return $args;
237
-    }
238
-
239
-    /**
240
-     * execute telegram api commands
241
-     * @param $command
242
-     * @param array $params
243
-     */
244
-    private function exec($command, $params = []) {
245
-        if (in_array($command, $this->available_commands)) {
246
-            // convert json to array then get the last messages info
247
-            $output = json_decode($this->curl_get_contents($this->api . '/' . $command, $params), true);
248
-
249
-            return $this->convertToObject($output);
250
-        } else {
251
-            echo 'command not found';
252
-        }
253
-    }
254
-
255
-    private function convertToObject($jsonObject , $webhook = false) {
256
-        if( ! $webhook) {
257
-            if ($jsonObject['ok']) {
258
-                //error_log(print_r($jsonObject, true));
259
-
260
-                // remove unwanted array elements
261
-                $output = end($jsonObject);
262
-
263
-                $result = is_array($output) ? end($output) : $output;
264
-                if ( ! empty($result)) {
265
-                    // convert to object
266
-                    return json_decode(json_encode($result));
267
-                }
268
-            }
269
-        } else {
270
-            return json_decode(json_encode($jsonObject));
271
-        }
272
-    }
273
-
274
-    /**
275
-     * get the $url content with CURL
276
-     * @param $url
277
-     * @param $params
278
-     * @return mixed
279
-     */
280
-    private function curl_get_contents($url, $params) {
281
-        $ch = curl_init();
282
-
283
-        curl_setopt($ch, CURLOPT_URL, $url);
284
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
285
-        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
286
-        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
287
-        curl_setopt($ch, CURLOPT_POST, count($params));
288
-        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
289
-
290
-        $result = curl_exec($ch);
291
-
292
-        curl_close($ch);
293
-
294
-        return $result;
295
-    }
296
-
297
-    /**
298
-     * Get current chat id
299
-     * @param null $chat_id
300
-     * @return int
301
-     */
302
-    public function getChatId($chat_id = null) {
303
-        try {
304
-            if ($chat_id)
305
-                return $chat_id;
306
-
307
-            if( isset($this->result->message) ) {
308
-                return $this->result->message->chat->id;
309
-            } elseif ( isset($this->result->inline_query) ) {
310
-                return $this->result->inline_query->from->id;
311
-            } else {
312
-                throw new \Exception("Error Processing Request", 1);
313
-            }
314
-        } catch (\Exception $e) {
315
-            error_log($e->getMessage());
316
-        }
317
-    }
318
-
319
-    /**
320
-     * @param null $offset
321
-     * @param int $limit
322
-     * @param int $timeout
323
-     */
324
-    public function getUpdates($offset = null, $limit = 1, $timeout = 1) {
325
-        return $this->exec('getUpdates', [
326
-            'offset' => $offset,
327
-            'limit' => $limit,
328
-            'timeout' => $timeout
329
-        ]);
330
-    }
331
-
332
-    /**
333
-     * send message
334
-     * @param $text
335
-     * @param $chat_id
336
-     * @param bool $disable_web_page_preview
337
-     * @param null $reply_to_message_id
338
-     * @param null $reply_markup
339
-     */
340
-    public function sendMessage($text, $chat_id = null, $disable_web_page_preview = false, $reply_to_message_id = null, $reply_markup = null) {
341
-        $this->sendChatAction(self::ACTION_TYPING, $chat_id);
342
-        return $this->exec('sendMessage', [
343
-            'chat_id' => $this->getChatId($chat_id),
344
-            'text' => $text,
345
-            'disable_web_page_preview' => $disable_web_page_preview,
346
-            'reply_to_message_id' => $reply_to_message_id,
347
-            'reply_markup' => json_encode($reply_markup)
348
-        ]);
349
-    }
350
-
351
-    /**
352
-     * Get me
353
-     */
354
-    public function getMe() {
355
-        return $this->exec('getMe');
356
-    }
357
-
358
-    /**
359
-     * @param $from_id
360
-     * @param $message_id
361
-     * @param null $chat_id
362
-     */
363
-    public function forwardMessage($from_id, $message_id, $chat_id = null) {
364
-        return $this->exec('forwardMessage', [
365
-            'chat_id' => $this->getChatId($chat_id),
366
-            'from_chat_id' => $from_id,
367
-            'message_id' => $message_id,
368
-        ]);
369
-    }
370
-
371
-    /**
372
-     * @param $photo photo file patch
373
-     * @param null $chat_id
374
-     * @param null $caption
375
-     * @param null $reply_to_message_id
376
-     * @param null $reply_markup
377
-     */
378
-    public function sendPhoto($photo, $chat_id = null, $caption = null, $reply_to_message_id = null, $reply_markup = null) {
379
-        $res = $this->exec('sendPhoto', [
380
-            'chat_id' => $this->getChatId($chat_id),
381
-            'photo' => $photo,
382
-            'caption' => $caption,
383
-            'reply_to_message_id' => $reply_to_message_id,
384
-            'reply_markup' => json_encode($reply_markup)
385
-        ]);
386
-
387
-        return $res;
388
-    }
389
-
390
-    /**
391
-     * @param $video video file path
392
-     * @param null $chat_id
393
-     * @param null $reply_to_message_id
394
-     * @param null $reply_markup
395
-     */
396
-    public function sendVideo($video, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
397
-        $res = $this->exec('sendVideo', [
398
-            'chat_id' => $this->getChatId($chat_id),
399
-            'video' => $video,
400
-            'reply_to_message_id' => $reply_to_message_id,
401
-            'reply_markup' => json_encode($reply_markup)
402
-        ]);
403
-
404
-        return $res;
405
-    }
406
-
407
-    /**
408
-     *
409
-     * @param $sticker
410
-     * @param null $chat_id
411
-     * @param null $reply_to_message_id
412
-     * @param null $reply_markup
413
-     */
414
-    public function sendSticker($sticker, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
415
-        $res = $this->exec('sendSticker', [
416
-            'chat_id' => $this->getChatId($chat_id),
417
-            'sticker' => $sticker,
418
-            'reply_to_message_id' => $reply_to_message_id,
419
-            'reply_markup' => json_encode($reply_markup)
420
-        ]);
421
-
422
-        return $res;
423
-        // as soons as possible
424
-    }
425
-
426
-    /**
427
-     * @param $latitude
428
-     * @param $longitude
429
-     * @param null $chat_id
430
-     * @param null $reply_to_message_id
431
-     * @param null $reply_markup
432
-     */
433
-    public function sendLocation($latitude, $longitude, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
434
-        $res = $this->exec('sendLocation', [
435
-            'chat_id' => $this->getChatId($chat_id),
436
-            'latitude' => $latitude,
437
-            'longitude' => $longitude,
438
-            'reply_to_message_id' => $reply_to_message_id,
439
-            'reply_markup' => json_encode($reply_markup)
440
-        ]);
441
-
442
-        return $res;
443
-    }
444
-
445
-    /**
446
-     * @param $document
447
-     * @param null $chat_id
448
-     * @param null $reply_to_message_id
449
-     * @param null $reply_markup
450
-     */
451
-    public function sendDocument($document, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
452
-        $res = $this->exec('sendDocument', [
453
-            'chat_id' => $this->getChatId($chat_id),
454
-            'document' => $document,
455
-            'reply_to_message_id' => $reply_to_message_id,
456
-            'reply_markup' => json_encode($reply_markup)
457
-        ]);
458
-
459
-        return $res;
460
-    }
461
-
462
-    public function sendAudio($audio, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
463
-        $res = $this->exec('sendAudio', [
464
-            'chat_id' => $this->getChatId($chat_id),
465
-            'audio' => $audio,
466
-            'reply_to_message_id' => $reply_to_message_id,
467
-            'reply_markup' => json_encode($reply_markup)
468
-        ]);
469
-
470
-        return $res;
471
-    }
472
-
473
-    /**
474
-     * send chat action : Telegram::ACTION_TYPING , ...
475
-     * @param $action
476
-     * @param null $chat_id
477
-     */
478
-    public function sendChatAction($action, $chat_id = null) {
479
-        $res = $this->exec('sendChatAction', [
480
-            'chat_id' => $this->getChatId($chat_id),
481
-            'action' => $action
482
-        ]);
483
-
484
-        return $res;
485
-    }
486
-
487
-    /**
488
-     * @param $user_id
489
-     * @param null $offset
490
-     * @param null $limit
491
-     */
492
-    public function getUserProfilePhotos($user_id, $offset = null, $limit = null) {
493
-        $res = $this->exec('getUserProfilePhotos', [
494
-            'user_id' => $user_id,
495
-            'offset' => $offset,
496
-            'limit' => $limit
497
-        ]);
498
-
499
-        return $res;
500
-    }
501
-
502
-
503
-    public function answerInlineQuery($inline_query_id, $results, $cache_time = 0, $is_personal = false, $next_offset = '', $switch_pm_text = '', $switch_pm_parameter = '') {
504
-        $res = $this->exec('answerInlineQuery', [
505
-            'inline_query_id' => $inline_query_id,
506
-            'results' => json_encode($results),
507
-            'cache_time' => $cache_time,
508
-            'is_personal' => $is_personal,
509
-            'next_offset' => $next_offset,
510
-            'switch_pm_text' => $switch_pm_text,
511
-            'switch_pm_parameter' => $switch_pm_parameter
512
-        ]);
513
-
514
-        return $res;
515
-    }
516
-
517
-    /**
518
-     * @param $url
519
-     */
520
-    public function setWebhook($url) {
521
-        $res = $this->exec('setWebhook', [
522
-            'url' => $url
523
-        ]);
524
-
525
-        return $res;
526
-    }
14
+	const PARSE_MARKDOWN = 'Markdown';
15
+	const PARSE_HTML     = 'HTML';
16
+
17
+	const ACTION_TYPING         = 'typing';
18
+	const ACTION_UPLOAD_PHOTO   = 'upload_photo';
19
+	const ACTION_RECORD_VIDEO   = 'record_video';
20
+	const ACTION_UPLOAD_VIDEO   = 'upload_video';
21
+	const ACTION_RECORD_AUDIO   = 'record_audio';
22
+	const ACTION_UPLOAD_AUDIO   = 'upload_audio';
23
+	const ACTION_UPLOAD_DOC     = 'upload_document';
24
+	const ACTION_FIND_LOCATION  = 'find_location';
25
+
26
+	public $api = 'https://api.telegram.org/bot';
27
+
28
+	/**
29
+	 * returned json from telegram api parse to object and save to result
30
+	 * @var
31
+	 */
32
+	public $result;
33
+
34
+	/**
35
+	 * @name State of bot
36
+	 * state of bot
37
+	 * @var object
38
+	 */
39
+	public $state;
40
+
41
+	/**
42
+	 * commands in regex and callback
43
+	 * @var array
44
+	 */
45
+	private $commands = [];
46
+
47
+	/**
48
+	 * InlineQuery in regex and callback
49
+	 * @var array
50
+	 */
51
+	private $inlines = [];
52
+
53
+	/**
54
+	 * callbacks
55
+	 * @var array
56
+	 */
57
+	private $callbacks = [];
58
+
59
+	/**
60
+	 * available telegram bot commands
61
+	 * @var array
62
+	 */
63
+	private $available_commands = [
64
+		'getMe',
65
+		'sendMessage',
66
+		'forwardMessage',
67
+		'sendPhoto',
68
+		'sendAudio',
69
+		'sendDocument',
70
+		'sendSticker',
71
+		'sendVideo',
72
+		'sendLocation',
73
+		'sendChatAction',
74
+		'getUserProfilePhotos',
75
+		'answerInlineQuery',
76
+		'getUpdates',
77
+		'setWebhook',
78
+	];
79
+
80
+	/**
81
+	 * pre patterns you can use in regex
82
+	 * @var array
83
+	 */
84
+	private $patterns = [
85
+		':any' => '.*',
86
+		':num' => '[0-9]{0,}',
87
+		':str' => '[a-zA-z]{0,}',
88
+	];
89
+
90
+	/**
91
+	 *
92
+	 * @param String $token Telegram api token , taken by botfather
93
+	 */
94
+	public function __construct($token) {
95
+		$this->api .= $token;
96
+	}
97
+
98
+	/**
99
+	 * add new command to the bot
100
+	 * @param String $cmd
101
+	 * @param \Closure $func
102
+	 */
103
+	public function cmd($cmd, $func) {
104
+		$this->commands[] = new Trigger($cmd, $func);
105
+	}
106
+
107
+
108
+	public function PDO(){
109
+
110
+		$servername ='YOUR_SERVER_NAME';
111
+		$username = 'YOUR_USERNAME';
112
+		$password ='YOUR_PASSWORD';
113
+		$dbname = 'YOUR_DATABASE_NAME';
114
+		try {
115
+			$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]);
116
+			$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
117
+
118
+			return $conn;
119
+		}
120
+		catch(PDOException $e)
121
+		{
122
+			return $e->getMessage();
123
+		}
124
+	}
125
+
126
+	/**
127
+	 * add new InlineQuery to the bot
128
+	 * @param String $cmd
129
+	 * @param \Closure $func
130
+	 */
131
+	public function inlineQuery($cmd, $func) {
132
+		$this->inlines[] = new Trigger($cmd, $func);
133
+	}
134
+
135
+	/**
136
+	 * this method check for received payload(command, inlinequery and so on) and
137
+	 * then execute the correct function
138
+	 *
139
+	 * @param bool $sleep
140
+	 */
141
+	public function run($sleep = false) {
142
+		$result = $this->getUpdates();
143
+		while (true) {
144
+			$update_id = isset($result->update_id) ? $result->update_id : 1;
145
+			$result = $this->getUpdates($update_id + 1);
146
+
147
+			$this->processPayload($result);
148
+
149
+			if ($sleep !== false)
150
+				sleep($sleep);
151
+		}
152
+	}
153
+
154
+	/**
155
+	 * this method used for setWebhook sended payload
156
+	 */
157
+	public function process($payload) {
158
+		$result = $this->convertToObject($payload, true);
159
+
160
+		return $this->processPayload($result);
161
+	}
162
+
163
+	private function processPayload($result) {
164
+		if ($result) {
165
+			try {
166
+				$this->result = $result;
167
+
168
+				// now i select the right triggers for payload received by Telegram
169
+				if( isset($this->result->message->text) ) {
170
+					$payload = $this->result->message->text;
171
+					$triggers = $this->commands;
172
+				} elseif ( isset($this->result->inline_query) ) {
173
+					$payload = $this->result->inline_query->query;
174
+					$triggers = $this->inlines;
175
+				} else {
176
+					throw new \Exception("Error Processing Request", 1);
177
+				}
178
+
179
+				$args = null;
180
+
181
+				foreach ($triggers as &$trigger) {
182
+					// replace public patterns to regex pattern
183
+					$searchs = array_keys($this->patterns);
184
+					$replaces = array_values($this->patterns);
185
+					$pattern = str_replace($searchs, $replaces, $trigger->pattern);
186
+
187
+					//find args pattern
188
+					$args = $this->getArgs($pattern, $payload);
189
+
190
+					$pattern = '/^' . $pattern . '/i';
191
+
192
+					preg_match($pattern, $payload, $matches);
193
+
194
+					if (isset($matches[0])) {
195
+						$func = $trigger->callback;
196
+						return call_user_func($func, $args);
197
+					}
198
+				}
199
+			} catch (\Exception $e) {
200
+				error_log($e->getMessage());
201
+				echo "\r\n Exception :: " . $e->getMessage();
202
+			}
203
+		} else {
204
+			echo "\r\nNo new message\r\n";
205
+		}
206
+	}
207
+
208
+	/**
209
+	 * get arguments part in regex
210
+	 * @param $pattern
211
+	 * @param $payload
212
+	 * @return mixed|null
213
+	 */
214
+	private function getArgs(&$pattern, $payload) {
215
+		$args = null;
216
+		// if command has argument
217
+		if (preg_match('/<<.*>>/', $pattern, $matches)) {
218
+
219
+			$args_pattern = $matches[0];
220
+			//remove << and >> from patterns
221
+			$tmp_args_pattern = str_replace(['<<', '>>'], ['(', ')'], $pattern);
222
+
223
+			//if args set
224
+			if (preg_match('/' . $tmp_args_pattern . '/i', $payload, $matches)) {
225
+				//remove first element
226
+				array_shift($matches);
227
+				if (isset($matches[0])) {
228
+					//set args
229
+					$args = array_shift($matches);
230
+
231
+					//remove args pattern from main pattern
232
+					$pattern = str_replace($args_pattern, '', $pattern);
233
+				}
234
+			}
235
+		}
236
+		return $args;
237
+	}
238
+
239
+	/**
240
+	 * execute telegram api commands
241
+	 * @param $command
242
+	 * @param array $params
243
+	 */
244
+	private function exec($command, $params = []) {
245
+		if (in_array($command, $this->available_commands)) {
246
+			// convert json to array then get the last messages info
247
+			$output = json_decode($this->curl_get_contents($this->api . '/' . $command, $params), true);
248
+
249
+			return $this->convertToObject($output);
250
+		} else {
251
+			echo 'command not found';
252
+		}
253
+	}
254
+
255
+	private function convertToObject($jsonObject , $webhook = false) {
256
+		if( ! $webhook) {
257
+			if ($jsonObject['ok']) {
258
+				//error_log(print_r($jsonObject, true));
259
+
260
+				// remove unwanted array elements
261
+				$output = end($jsonObject);
262
+
263
+				$result = is_array($output) ? end($output) : $output;
264
+				if ( ! empty($result)) {
265
+					// convert to object
266
+					return json_decode(json_encode($result));
267
+				}
268
+			}
269
+		} else {
270
+			return json_decode(json_encode($jsonObject));
271
+		}
272
+	}
273
+
274
+	/**
275
+	 * get the $url content with CURL
276
+	 * @param $url
277
+	 * @param $params
278
+	 * @return mixed
279
+	 */
280
+	private function curl_get_contents($url, $params) {
281
+		$ch = curl_init();
282
+
283
+		curl_setopt($ch, CURLOPT_URL, $url);
284
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
285
+		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
286
+		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
287
+		curl_setopt($ch, CURLOPT_POST, count($params));
288
+		curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
289
+
290
+		$result = curl_exec($ch);
291
+
292
+		curl_close($ch);
293
+
294
+		return $result;
295
+	}
296
+
297
+	/**
298
+	 * Get current chat id
299
+	 * @param null $chat_id
300
+	 * @return int
301
+	 */
302
+	public function getChatId($chat_id = null) {
303
+		try {
304
+			if ($chat_id)
305
+				return $chat_id;
306
+
307
+			if( isset($this->result->message) ) {
308
+				return $this->result->message->chat->id;
309
+			} elseif ( isset($this->result->inline_query) ) {
310
+				return $this->result->inline_query->from->id;
311
+			} else {
312
+				throw new \Exception("Error Processing Request", 1);
313
+			}
314
+		} catch (\Exception $e) {
315
+			error_log($e->getMessage());
316
+		}
317
+	}
318
+
319
+	/**
320
+	 * @param null $offset
321
+	 * @param int $limit
322
+	 * @param int $timeout
323
+	 */
324
+	public function getUpdates($offset = null, $limit = 1, $timeout = 1) {
325
+		return $this->exec('getUpdates', [
326
+			'offset' => $offset,
327
+			'limit' => $limit,
328
+			'timeout' => $timeout
329
+		]);
330
+	}
331
+
332
+	/**
333
+	 * send message
334
+	 * @param $text
335
+	 * @param $chat_id
336
+	 * @param bool $disable_web_page_preview
337
+	 * @param null $reply_to_message_id
338
+	 * @param null $reply_markup
339
+	 */
340
+	public function sendMessage($text, $chat_id = null, $disable_web_page_preview = false, $reply_to_message_id = null, $reply_markup = null) {
341
+		$this->sendChatAction(self::ACTION_TYPING, $chat_id);
342
+		return $this->exec('sendMessage', [
343
+			'chat_id' => $this->getChatId($chat_id),
344
+			'text' => $text,
345
+			'disable_web_page_preview' => $disable_web_page_preview,
346
+			'reply_to_message_id' => $reply_to_message_id,
347
+			'reply_markup' => json_encode($reply_markup)
348
+		]);
349
+	}
350
+
351
+	/**
352
+	 * Get me
353
+	 */
354
+	public function getMe() {
355
+		return $this->exec('getMe');
356
+	}
357
+
358
+	/**
359
+	 * @param $from_id
360
+	 * @param $message_id
361
+	 * @param null $chat_id
362
+	 */
363
+	public function forwardMessage($from_id, $message_id, $chat_id = null) {
364
+		return $this->exec('forwardMessage', [
365
+			'chat_id' => $this->getChatId($chat_id),
366
+			'from_chat_id' => $from_id,
367
+			'message_id' => $message_id,
368
+		]);
369
+	}
370
+
371
+	/**
372
+	 * @param $photo photo file patch
373
+	 * @param null $chat_id
374
+	 * @param null $caption
375
+	 * @param null $reply_to_message_id
376
+	 * @param null $reply_markup
377
+	 */
378
+	public function sendPhoto($photo, $chat_id = null, $caption = null, $reply_to_message_id = null, $reply_markup = null) {
379
+		$res = $this->exec('sendPhoto', [
380
+			'chat_id' => $this->getChatId($chat_id),
381
+			'photo' => $photo,
382
+			'caption' => $caption,
383
+			'reply_to_message_id' => $reply_to_message_id,
384
+			'reply_markup' => json_encode($reply_markup)
385
+		]);
386
+
387
+		return $res;
388
+	}
389
+
390
+	/**
391
+	 * @param $video video file path
392
+	 * @param null $chat_id
393
+	 * @param null $reply_to_message_id
394
+	 * @param null $reply_markup
395
+	 */
396
+	public function sendVideo($video, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
397
+		$res = $this->exec('sendVideo', [
398
+			'chat_id' => $this->getChatId($chat_id),
399
+			'video' => $video,
400
+			'reply_to_message_id' => $reply_to_message_id,
401
+			'reply_markup' => json_encode($reply_markup)
402
+		]);
403
+
404
+		return $res;
405
+	}
406
+
407
+	/**
408
+	 *
409
+	 * @param $sticker
410
+	 * @param null $chat_id
411
+	 * @param null $reply_to_message_id
412
+	 * @param null $reply_markup
413
+	 */
414
+	public function sendSticker($sticker, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
415
+		$res = $this->exec('sendSticker', [
416
+			'chat_id' => $this->getChatId($chat_id),
417
+			'sticker' => $sticker,
418
+			'reply_to_message_id' => $reply_to_message_id,
419
+			'reply_markup' => json_encode($reply_markup)
420
+		]);
421
+
422
+		return $res;
423
+		// as soons as possible
424
+	}
425
+
426
+	/**
427
+	 * @param $latitude
428
+	 * @param $longitude
429
+	 * @param null $chat_id
430
+	 * @param null $reply_to_message_id
431
+	 * @param null $reply_markup
432
+	 */
433
+	public function sendLocation($latitude, $longitude, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
434
+		$res = $this->exec('sendLocation', [
435
+			'chat_id' => $this->getChatId($chat_id),
436
+			'latitude' => $latitude,
437
+			'longitude' => $longitude,
438
+			'reply_to_message_id' => $reply_to_message_id,
439
+			'reply_markup' => json_encode($reply_markup)
440
+		]);
441
+
442
+		return $res;
443
+	}
444
+
445
+	/**
446
+	 * @param $document
447
+	 * @param null $chat_id
448
+	 * @param null $reply_to_message_id
449
+	 * @param null $reply_markup
450
+	 */
451
+	public function sendDocument($document, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
452
+		$res = $this->exec('sendDocument', [
453
+			'chat_id' => $this->getChatId($chat_id),
454
+			'document' => $document,
455
+			'reply_to_message_id' => $reply_to_message_id,
456
+			'reply_markup' => json_encode($reply_markup)
457
+		]);
458
+
459
+		return $res;
460
+	}
461
+
462
+	public function sendAudio($audio, $chat_id = null, $reply_to_message_id = null, $reply_markup = null) {
463
+		$res = $this->exec('sendAudio', [
464
+			'chat_id' => $this->getChatId($chat_id),
465
+			'audio' => $audio,
466
+			'reply_to_message_id' => $reply_to_message_id,
467
+			'reply_markup' => json_encode($reply_markup)
468
+		]);
469
+
470
+		return $res;
471
+	}
472
+
473
+	/**
474
+	 * send chat action : Telegram::ACTION_TYPING , ...
475
+	 * @param $action
476
+	 * @param null $chat_id
477
+	 */
478
+	public function sendChatAction($action, $chat_id = null) {
479
+		$res = $this->exec('sendChatAction', [
480
+			'chat_id' => $this->getChatId($chat_id),
481
+			'action' => $action
482
+		]);
483
+
484
+		return $res;
485
+	}
486
+
487
+	/**
488
+	 * @param $user_id
489
+	 * @param null $offset
490
+	 * @param null $limit
491
+	 */
492
+	public function getUserProfilePhotos($user_id, $offset = null, $limit = null) {
493
+		$res = $this->exec('getUserProfilePhotos', [
494
+			'user_id' => $user_id,
495
+			'offset' => $offset,
496
+			'limit' => $limit
497
+		]);
498
+
499
+		return $res;
500
+	}
501
+
502
+
503
+	public function answerInlineQuery($inline_query_id, $results, $cache_time = 0, $is_personal = false, $next_offset = '', $switch_pm_text = '', $switch_pm_parameter = '') {
504
+		$res = $this->exec('answerInlineQuery', [
505
+			'inline_query_id' => $inline_query_id,
506
+			'results' => json_encode($results),
507
+			'cache_time' => $cache_time,
508
+			'is_personal' => $is_personal,
509
+			'next_offset' => $next_offset,
510
+			'switch_pm_text' => $switch_pm_text,
511
+			'switch_pm_parameter' => $switch_pm_parameter
512
+		]);
513
+
514
+		return $res;
515
+	}
516
+
517
+	/**
518
+	 * @param $url
519
+	 */
520
+	public function setWebhook($url) {
521
+		$res = $this->exec('setWebhook', [
522
+			'url' => $url
523
+		]);
524
+
525
+		return $res;
526
+	}
527 527
 
528 528
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -105,11 +105,11 @@  discard block
 block discarded – undo
105 105
     }
106 106
 
107 107
 
108
-    public function PDO(){
108
+    public function PDO() {
109 109
 
110
-        $servername ='YOUR_SERVER_NAME';
110
+        $servername = 'YOUR_SERVER_NAME';
111 111
         $username = 'YOUR_USERNAME';
112
-        $password ='YOUR_PASSWORD';
112
+        $password = 'YOUR_PASSWORD';
113 113
         $dbname = 'YOUR_DATABASE_NAME';
114 114
         try {
115 115
             $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]);
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
 
118 118
             return $conn;
119 119
         }
120
-        catch(PDOException $e)
120
+        catch (PDOException $e)
121 121
         {
122 122
             return $e->getMessage();
123 123
         }
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
         $result = $this->getUpdates();
143 143
         while (true) {
144 144
             $update_id = isset($result->update_id) ? $result->update_id : 1;
145
-            $result = $this->getUpdates($update_id + 1);
145
+            $result = $this->getUpdates($update_id+1);
146 146
 
147 147
             $this->processPayload($result);
148 148
 
@@ -166,13 +166,13 @@  discard block
 block discarded – undo
166 166
                 $this->result = $result;
167 167
 
168 168
                 // now i select the right triggers for payload received by Telegram
169
-                if( isset($this->result->message->text) ) {
169
+                if (isset($this->result->message->text)) {
170 170
                     $payload = $this->result->message->text;
171 171
                     $triggers = $this->commands;
172
-                } elseif ( isset($this->result->inline_query) ) {
172
+                } elseif (isset($this->result->inline_query)) {
173 173
                     $payload = $this->result->inline_query->query;
174 174
                     $triggers = $this->inlines;
175
-                } else {
175
+                }else {
176 176
                     throw new \Exception("Error Processing Request", 1);
177 177
                 }
178 178
 
@@ -187,7 +187,7 @@  discard block
 block discarded – undo
187 187
                     //find args pattern
188 188
                     $args = $this->getArgs($pattern, $payload);
189 189
 
190
-                    $pattern = '/^' . $pattern . '/i';
190
+                    $pattern = '/^'.$pattern.'/i';
191 191
 
192 192
                     preg_match($pattern, $payload, $matches);
193 193
 
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
                         return call_user_func($func, $args);
197 197
                     }
198 198
                 }
199
-            } catch (\Exception $e) {
199
+            }catch (\Exception $e) {
200 200
                 error_log($e->getMessage());
201
-                echo "\r\n Exception :: " . $e->getMessage();
201
+                echo "\r\n Exception :: ".$e->getMessage();
202 202
             }
203
-        } else {
203
+        }else {
204 204
             echo "\r\nNo new message\r\n";
205 205
         }
206 206
     }
@@ -221,7 +221,7 @@  discard block
 block discarded – undo
221 221
             $tmp_args_pattern = str_replace(['<<', '>>'], ['(', ')'], $pattern);
222 222
 
223 223
             //if args set
224
-            if (preg_match('/' . $tmp_args_pattern . '/i', $payload, $matches)) {
224
+            if (preg_match('/'.$tmp_args_pattern.'/i', $payload, $matches)) {
225 225
                 //remove first element
226 226
                 array_shift($matches);
227 227
                 if (isset($matches[0])) {
@@ -244,16 +244,16 @@  discard block
 block discarded – undo
244 244
     private function exec($command, $params = []) {
245 245
         if (in_array($command, $this->available_commands)) {
246 246
             // convert json to array then get the last messages info
247
-            $output = json_decode($this->curl_get_contents($this->api . '/' . $command, $params), true);
247
+            $output = json_decode($this->curl_get_contents($this->api.'/'.$command, $params), true);
248 248
 
249 249
             return $this->convertToObject($output);
250
-        } else {
250
+        }else {
251 251
             echo 'command not found';
252 252
         }
253 253
     }
254 254
 
255
-    private function convertToObject($jsonObject , $webhook = false) {
256
-        if( ! $webhook) {
255
+    private function convertToObject($jsonObject, $webhook = false) {
256
+        if (!$webhook) {
257 257
             if ($jsonObject['ok']) {
258 258
                 //error_log(print_r($jsonObject, true));
259 259
 
@@ -261,12 +261,12 @@  discard block
 block discarded – undo
261 261
                 $output = end($jsonObject);
262 262
 
263 263
                 $result = is_array($output) ? end($output) : $output;
264
-                if ( ! empty($result)) {
264
+                if (!empty($result)) {
265 265
                     // convert to object
266 266
                     return json_decode(json_encode($result));
267 267
                 }
268 268
             }
269
-        } else {
269
+        }else {
270 270
             return json_decode(json_encode($jsonObject));
271 271
         }
272 272
     }
@@ -304,14 +304,14 @@  discard block
 block discarded – undo
304 304
             if ($chat_id)
305 305
                 return $chat_id;
306 306
 
307
-            if( isset($this->result->message) ) {
307
+            if (isset($this->result->message)) {
308 308
                 return $this->result->message->chat->id;
309
-            } elseif ( isset($this->result->inline_query) ) {
309
+            } elseif (isset($this->result->inline_query)) {
310 310
                 return $this->result->inline_query->from->id;
311
-            } else {
311
+            }else {
312 312
                 throw new \Exception("Error Processing Request", 1);
313 313
             }
314
-        } catch (\Exception $e) {
314
+        }catch (\Exception $e) {
315 315
             error_log($e->getMessage());
316 316
         }
317 317
     }
Please login to merge, or discard this patch.
Braces   +7 added lines, -6 removed lines patch added patch discarded remove patch
@@ -116,8 +116,7 @@  discard block
 block discarded – undo
116 116
             $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
117 117
 
118 118
             return $conn;
119
-        }
120
-        catch(PDOException $e)
119
+        } catch(PDOException $e)
121 120
         {
122 121
             return $e->getMessage();
123 122
         }
@@ -146,8 +145,9 @@  discard block
 block discarded – undo
146 145
 
147 146
             $this->processPayload($result);
148 147
 
149
-            if ($sleep !== false)
150
-                sleep($sleep);
148
+            if ($sleep !== false) {
149
+                            sleep($sleep);
150
+            }
151 151
         }
152 152
     }
153 153
 
@@ -301,8 +301,9 @@  discard block
 block discarded – undo
301 301
      */
302 302
     public function getChatId($chat_id = null) {
303 303
         try {
304
-            if ($chat_id)
305
-                return $chat_id;
304
+            if ($chat_id) {
305
+                            return $chat_id;
306
+            }
306 307
 
307 308
             if( isset($this->result->message) ) {
308 309
                 return $this->result->message->chat->id;
Please login to merge, or discard this patch.