17
17
use Longman \TelegramBot \Entities \ChosenInlineResult ;
18
18
use Longman \TelegramBot \Entities \InlineQuery ;
19
19
use Longman \TelegramBot \Entities \Message ;
20
+ use Longman \TelegramBot \Entities \Payments \PreCheckoutQuery ;
21
+ use Longman \TelegramBot \Entities \Payments \ShippingQuery ;
20
22
use Longman \TelegramBot \Entities \ReplyToMessage ;
21
23
use Longman \TelegramBot \Entities \Update ;
22
24
use Longman \TelegramBot \Entities \User ;
@@ -141,7 +143,9 @@ protected static function defineTables()
141
143
'edited_message ' ,
142
144
'inline_query ' ,
143
145
'message ' ,
146
+ 'pre_checkout_query ' ,
144
147
'request_limiter ' ,
148
+ 'shipping_query ' ,
145
149
'telegram_update ' ,
146
150
'user ' ,
147
151
'user_chat ' ,
@@ -300,30 +304,36 @@ public static function entitiesArrayToJson($entities, $default = null)
300
304
/**
301
305
* Insert entry to telegram_update table
302
306
*
303
- * @todo Add missing values! See https://core.telegram.org/bots/api#update
304
- *
305
- * @param string $id
306
- * @param string $chat_id
307
- * @param string $message_id
308
- * @param string $inline_query_id
309
- * @param string $chosen_inline_result_id
310
- * @param string $callback_query_id
311
- * @param string $edited_message_id
307
+ * @param string $update_id
308
+ * @param string|null $chat_id
309
+ * @param string|null $message_id
310
+ * @param string|null $edited_message_id
311
+ * @param string|null $channel_post_id
312
+ * @param string|null $edited_channel_post_id
313
+ * @param string|null $inline_query_id
314
+ * @param string|null $chosen_inline_result_id
315
+ * @param string|null $callback_query_id
316
+ * @param string|null $shipping_query_id
317
+ * @param string|null $pre_checkout_query_id
312
318
*
313
319
* @return bool If the insert was successful
314
320
* @throws TelegramException
315
321
*/
316
- public static function insertTelegramUpdate (
317
- $ id ,
322
+ protected static function insertTelegramUpdate (
323
+ $ update_id ,
318
324
$ chat_id = null ,
319
325
$ message_id = null ,
326
+ $ edited_message_id = null ,
327
+ $ channel_post_id = null ,
328
+ $ edited_channel_post_id = null ,
320
329
$ inline_query_id = null ,
321
330
$ chosen_inline_result_id = null ,
322
331
$ callback_query_id = null ,
323
- $ edited_message_id = null
332
+ $ shipping_query_id = null ,
333
+ $ pre_checkout_query_id = null
324
334
) {
325
- if ($ message_id === null && $ inline_query_id === null && $ chosen_inline_result_id === null && $ callback_query_id === null && $ edited_message_id === null ) {
326
- throw new TelegramException ('message_id, inline_query_id, chosen_inline_result_id, callback_query_id, edited_message_id are all null ' );
335
+ if ($ message_id === null && $ edited_message_id === null && $ channel_post_id === null && $ edited_channel_post_id === null && $ inline_query_id === null && $ chosen_inline_result_id === null && $ callback_query_id === null && $ shipping_query_id === null && $ pre_checkout_query_id === null ) {
336
+ throw new TelegramException ('message_id, edited_message_id, channel_post_id, edited_channel_post_id, inline_query_id, chosen_inline_result_id, callback_query_id, shipping_query_id, pre_checkout_query_id are all null ' );
327
337
}
328
338
329
339
if (!self ::isDbConnected ()) {
@@ -333,18 +343,22 @@ public static function insertTelegramUpdate(
333
343
try {
334
344
$ sth = self ::$ pdo ->prepare ('
335
345
INSERT IGNORE INTO ` ' . TB_TELEGRAM_UPDATE . '`
336
- (`id`, `chat_id`, `message_id`, `inline_query_id`, `chosen_inline_result_id`, `callback_query_id`, `edited_message_id `)
346
+ (`id`, `chat_id`, `message_id`, `edited_message_id`, `channel_post_id`, `edited_channel_post_id`, ` inline_query_id`, `chosen_inline_result_id`, `callback_query_id`, `shipping_query_id`, `pre_checkout_query_id `)
337
347
VALUES
338
- (:id, :chat_id, :message_id, :inline_query_id, :chosen_inline_result_id, :callback_query_id, :edited_message_id )
348
+ (:id, :chat_id, :message_id, :edited_message_id, :channel_post_id, :edited_channel_post_id, : inline_query_id, :chosen_inline_result_id, :callback_query_id, :shipping_query_id, :pre_checkout_query_id )
339
349
' );
340
350
341
- $ sth ->bindValue (':id ' , $ id );
351
+ $ sth ->bindValue (':id ' , $ update_id );
342
352
$ sth ->bindValue (':chat_id ' , $ chat_id );
343
353
$ sth ->bindValue (':message_id ' , $ message_id );
344
354
$ sth ->bindValue (':edited_message_id ' , $ edited_message_id );
355
+ $ sth ->bindValue (':channel_post_id ' , $ channel_post_id );
356
+ $ sth ->bindValue (':edited_channel_post_id ' , $ edited_channel_post_id );
345
357
$ sth ->bindValue (':inline_query_id ' , $ inline_query_id );
346
358
$ sth ->bindValue (':chosen_inline_result_id ' , $ chosen_inline_result_id );
347
359
$ sth ->bindValue (':callback_query_id ' , $ callback_query_id );
360
+ $ sth ->bindValue (':shipping_query_id ' , $ shipping_query_id );
361
+ $ sth ->bindValue (':pre_checkout_query_id ' , $ pre_checkout_query_id );
348
362
349
363
return $ sth ->execute ();
350
364
} catch (PDOException $ e ) {
@@ -497,115 +511,56 @@ public static function insertRequest(Update $update)
497
511
return false ;
498
512
}
499
513
500
- $ update_id = $ update ->getUpdateId ();
501
- $ update_type = $ update ->getUpdateType ();
502
-
503
- // @todo Make this simpler: if ($message = $update->getMessage()) ...
504
- if ($ update_type === 'message ' ) {
505
- $ message = $ update ->getMessage ();
506
-
507
- if (self ::insertMessageRequest ($ message )) {
508
- $ message_id = $ message ->getMessageId ();
509
- $ chat_id = $ message ->getChat ()->getId ();
510
-
511
- return self ::insertTelegramUpdate (
512
- $ update_id ,
513
- $ chat_id ,
514
- $ message_id
515
- );
516
- }
517
- } elseif ($ update_type === 'edited_message ' ) {
518
- $ edited_message = $ update ->getEditedMessage ();
519
-
520
- if (self ::insertEditedMessageRequest ($ edited_message )) {
521
- $ edited_message_local_id = self ::$ pdo ->lastInsertId ();
522
- $ chat_id = $ edited_message ->getChat ()->getId ();
523
-
524
- return self ::insertTelegramUpdate (
525
- $ update_id ,
526
- $ chat_id ,
527
- null ,
528
- null ,
529
- null ,
530
- null ,
531
- $ edited_message_local_id
532
- );
533
- }
534
- } elseif ($ update_type === 'channel_post ' ) {
535
- $ channel_post = $ update ->getChannelPost ();
536
-
537
- if (self ::insertMessageRequest ($ channel_post )) {
538
- $ message_id = $ channel_post ->getMessageId ();
539
- $ chat_id = $ channel_post ->getChat ()->getId ();
540
-
541
- return self ::insertTelegramUpdate (
542
- $ update_id ,
543
- $ chat_id ,
544
- $ message_id
545
- );
546
- }
547
- } elseif ($ update_type === 'edited_channel_post ' ) {
548
- $ edited_channel_post = $ update ->getEditedChannelPost ();
549
-
550
- if (self ::insertEditedMessageRequest ($ edited_channel_post )) {
551
- $ edited_channel_post_local_id = self ::$ pdo ->lastInsertId ();
552
- $ chat_id = $ edited_channel_post ->getChat ()->getId ();
553
-
554
- return self ::insertTelegramUpdate (
555
- $ update_id ,
556
- $ chat_id ,
557
- null ,
558
- null ,
559
- null ,
560
- null ,
561
- $ edited_channel_post_local_id
562
- );
563
- }
564
- } elseif ($ update_type === 'inline_query ' ) {
565
- $ inline_query = $ update ->getInlineQuery ();
566
-
567
- if (self ::insertInlineQueryRequest ($ inline_query )) {
568
- $ inline_query_id = $ inline_query ->getId ();
569
-
570
- return self ::insertTelegramUpdate (
571
- $ update_id ,
572
- null ,
573
- null ,
574
- $ inline_query_id
575
- );
576
- }
577
- } elseif ($ update_type === 'chosen_inline_result ' ) {
578
- $ chosen_inline_result = $ update ->getChosenInlineResult ();
579
-
580
- if (self ::insertChosenInlineResultRequest ($ chosen_inline_result )) {
581
- $ chosen_inline_result_local_id = self ::$ pdo ->lastInsertId ();
582
-
583
- return self ::insertTelegramUpdate (
584
- $ update_id ,
585
- null ,
586
- null ,
587
- null ,
588
- $ chosen_inline_result_local_id
589
- );
590
- }
591
- } elseif ($ update_type === 'callback_query ' ) {
592
- $ callback_query = $ update ->getCallbackQuery ();
593
-
594
- if (self ::insertCallbackQueryRequest ($ callback_query )) {
595
- $ callback_query_id = $ callback_query ->getId ();
596
-
597
- return self ::insertTelegramUpdate (
598
- $ update_id ,
599
- null ,
600
- null ,
601
- null ,
602
- null ,
603
- $ callback_query_id
604
- );
605
- }
514
+ $ chat_id = null ;
515
+ $ message_id = null ;
516
+ $ edited_message_id = null ;
517
+ $ channel_post_id = null ;
518
+ $ edited_channel_post_id = null ;
519
+ $ inline_query_id = null ;
520
+ $ chosen_inline_result_id = null ;
521
+ $ callback_query_id = null ;
522
+ $ shipping_query_id = null ;
523
+ $ pre_checkout_query_id = null ;
524
+
525
+ if (($ message = $ update ->getMessage ()) && self ::insertMessageRequest ($ message )) {
526
+ $ chat_id = $ message ->getChat ()->getId ();
527
+ $ message_id = $ message ->getMessageId ();
528
+ } elseif (($ edited_message = $ update ->getEditedMessage ()) && self ::insertEditedMessageRequest ($ edited_message )) {
529
+ $ chat_id = $ edited_message ->getChat ()->getId ();
530
+ $ edited_message_id = self ::$ pdo ->lastInsertId ();
531
+ } elseif (($ channel_post = $ update ->getChannelPost ()) && self ::insertMessageRequest ($ channel_post )) {
532
+ $ chat_id = $ channel_post ->getChat ()->getId ();
533
+ $ channel_post_id = $ channel_post ->getMessageId ();
534
+ } elseif (($ edited_channel_post = $ update ->getEditedChannelPost ()) && self ::insertEditedMessageRequest ($ edited_channel_post )) {
535
+ $ chat_id = $ edited_channel_post ->getChat ()->getId ();
536
+ $ edited_channel_post_id = self ::$ pdo ->lastInsertId ();
537
+ } elseif (($ inline_query = $ update ->getInlineQuery ()) && self ::insertInlineQueryRequest ($ inline_query )) {
538
+ $ inline_query_id = $ inline_query ->getId ();
539
+ } elseif (($ chosen_inline_result = $ update ->getChosenInlineResult ()) && self ::insertChosenInlineResultRequest ($ chosen_inline_result )) {
540
+ $ chosen_inline_result_id = self ::$ pdo ->lastInsertId ();
541
+ } elseif (($ callback_query = $ update ->getCallbackQuery ()) && self ::insertCallbackQueryRequest ($ callback_query )) {
542
+ $ callback_query_id = $ callback_query ->getId ();
543
+ } elseif (($ shipping_query = $ update ->getShippingQuery ()) && self ::insertShippingQueryRequest ($ shipping_query )) {
544
+ $ shipping_query_id = $ shipping_query ->getId ();
545
+ } elseif (($ pre_checkout_query = $ update ->getPreCheckoutQuery ()) && self ::insertPreCheckoutQueryRequest ($ pre_checkout_query )) {
546
+ $ pre_checkout_query_id = $ pre_checkout_query ->getId ();
547
+ } else {
548
+ return false ;
606
549
}
607
550
608
- return false ;
551
+ return self ::insertTelegramUpdate (
552
+ $ update ->getUpdateId (),
553
+ $ chat_id ,
554
+ $ message_id ,
555
+ $ edited_message_id ,
556
+ $ channel_post_id ,
557
+ $ edited_channel_post_id ,
558
+ $ inline_query_id ,
559
+ $ chosen_inline_result_id ,
560
+ $ callback_query_id ,
561
+ $ shipping_query_id ,
562
+ $ pre_checkout_query_id
563
+ );
609
564
}
610
565
611
566
/**
@@ -766,9 +721,96 @@ public static function insertCallbackQueryRequest(CallbackQuery $callback_query)
766
721
}
767
722
768
723
/**
769
- * Insert Message request in db
724
+ * Insert shipping query request into database
725
+ *
726
+ * @param ShippingQuery $shipping_query
770
727
*
771
- * @todo Complete with new fields: https://core.telegram.org/bots/api#message
728
+ * @return bool If the insert was successful
729
+ * @throws TelegramException
730
+ */
731
+ public static function insertShippingQueryRequest (ShippingQuery $ shipping_query )
732
+ {
733
+ if (!self ::isDbConnected ()) {
734
+ return false ;
735
+ }
736
+
737
+ try {
738
+ $ sth = self ::$ pdo ->prepare ('
739
+ INSERT IGNORE INTO ` ' . TB_SHIPPING_QUERY . '`
740
+ (`id`, `user_id`, `chat_id`, `invoice_payload`, `shipping_address`, `created_at`)
741
+ VALUES
742
+ (:id, :user_id, :chat_id, :invoice_payload, :shipping_address, :created_at)
743
+ ' );
744
+
745
+ $ date = self ::getTimestamp ();
746
+ $ user_id = null ;
747
+
748
+ $ user = $ shipping_query ->getFrom ();
749
+ if ($ user instanceof User) {
750
+ $ user_id = $ user ->getId ();
751
+ self ::insertUser ($ user , $ date );
752
+ }
753
+
754
+ $ sth ->bindValue (':id ' , $ shipping_query ->getId ());
755
+ $ sth ->bindValue (':user_id ' , $ user_id );
756
+ $ sth ->bindValue (':invoice_payload ' , $ shipping_query ->getInvoicePayload ());
757
+ $ sth ->bindValue (':shipping_address ' , $ shipping_query ->getShippingAddress ());
758
+ $ sth ->bindValue (':created_at ' , $ date );
759
+
760
+ return $ sth ->execute ();
761
+ } catch (PDOException $ e ) {
762
+ throw new TelegramException ($ e ->getMessage ());
763
+ }
764
+ }
765
+
766
+ /**
767
+ * Insert pre checkout query request into database
768
+ *
769
+ * @param PreCheckoutQuery $pre_checkout_query
770
+ *
771
+ * @return bool If the insert was successful
772
+ * @throws TelegramException
773
+ */
774
+ public static function insertPreCheckoutQueryRequest (PreCheckoutQuery $ pre_checkout_query )
775
+ {
776
+ if (!self ::isDbConnected ()) {
777
+ return false ;
778
+ }
779
+
780
+ try {
781
+ $ sth = self ::$ pdo ->prepare ('
782
+ INSERT IGNORE INTO ` ' . TB_PRE_CHECKOUT_QUERY . '`
783
+ (`id`, `user_id`, `currency`, `total_amount`, `invoice_payload`, `shipping_option_id`, `order_info`, `created_at`)
784
+ VALUES
785
+ (:id, :user_id, :currency, :total_amount, :invoice_payload, :shipping_option_id, :order_info, :created_at)
786
+ ' );
787
+
788
+ $ date = self ::getTimestamp ();
789
+ $ user_id = null ;
790
+
791
+ $ user = $ pre_checkout_query ->getFrom ();
792
+ if ($ user instanceof User) {
793
+ $ user_id = $ user ->getId ();
794
+ self ::insertUser ($ user , $ date );
795
+ }
796
+
797
+ $ sth ->bindValue (':id ' , $ pre_checkout_query ->getId ());
798
+ $ sth ->bindValue (':user_id ' , $ user_id );
799
+ $ sth ->bindValue (':currency ' , $ pre_checkout_query ->getCurrency ());
800
+ $ sth ->bindValue (':total_amount ' , $ pre_checkout_query ->getTotalAmount ());
801
+ $ sth ->bindValue (':invoice_payload ' , $ pre_checkout_query ->getInvoicePayload ());
802
+ $ sth ->bindValue (':shipping_option_id ' , $ pre_checkout_query ->getShippingOptionId ());
803
+ $ sth ->bindValue (':order_info ' , $ pre_checkout_query ->getOrderInfo ());
804
+ $ sth ->bindValue (':created_at ' , $ date );
805
+
806
+ return $ sth ->execute ();
807
+ } catch (PDOException $ e ) {
808
+ throw new TelegramException ($ e ->getMessage ());
809
+ }
810
+ }
811
+
812
+ /**
813
+ * Insert Message request in db
772
814
*
773
815
* @param Message $message
774
816
*
0 commit comments