diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 434b83a..8035028 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v1_0.xml b/.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_1.xml
similarity index 55%
rename from .idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v1_0.xml
rename to .idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_1.xml
index dd13cd3..00b2b88 100644
--- a/.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v1_0.xml
+++ b/.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19_1.xml
similarity index 59%
rename from .idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19.xml
rename to .idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19_1.xml
index 015dbda..4d626a6 100644
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19.xml
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_bundle_1_19_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_server_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml
similarity index 60%
rename from .idea/libraries/Maven__com_sun_jersey_jersey_server_1_19.xml
rename to .idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml
index 47f74e7..91d65b2 100644
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_server_1_19.xml
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19_1.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19_1.xml
new file mode 100644
index 0000000..ec38da5
--- /dev/null
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19_1.xml
similarity index 62%
rename from .idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19.xml
rename to .idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19_1.xml
index 2f3fb72..e61c7cb 100644
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19.xml
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_servlet_1_19_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_server_1_19_1.xml
similarity index 59%
rename from .idea/libraries/Maven__com_sun_jersey_jersey_core_1_19.xml
rename to .idea/libraries/Maven__com_sun_jersey_jersey_server_1_19_1.xml
index 3ac29b2..b4ad3de 100644
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19.xml
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_server_1_19_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19.xml
deleted file mode 100644
index 882f842..0000000
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19.xml b/.idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19_1.xml
similarity index 58%
rename from .idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19.xml
rename to .idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19_1.xml
index 8734ae4..943df5a 100644
--- a/.idea/libraries/Maven__com_sun_jersey_jersey_grizzly2_1_19.xml
+++ b/.idea/libraries/Maven__com_sun_jersey_jersey_servlet_1_19_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml
similarity index 68%
rename from .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_1.xml
rename to .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml
index 958a9fa..fdb7ead 100644
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_1.xml
+++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_3.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml
similarity index 59%
rename from .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_3.xml
rename to .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml
index a9f8d49..3a5aa19 100644
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_3.xml
+++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml
similarity index 59%
rename from .idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_1.xml
rename to .idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml
index 793e63d..4b2025a 100644
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_1.xml
+++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b31.xml b/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b34.xml
similarity index 56%
rename from .idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b31.xml
rename to .idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b34.xml
index 874c890..1908e81 100644
--- a/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b31.xml
+++ b/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b34.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b31.xml b/.idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b34.xml
similarity index 65%
rename from .idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b31.xml
rename to .idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b34.xml
index 87ed334..8ef6daa 100644
--- a/.idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b31.xml
+++ b/.idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b34.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b31.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b34.xml
similarity index 60%
rename from .idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b31.xml
rename to .idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b34.xml
index 14746f4..97dd43f 100644
--- a/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b31.xml
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b34.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b31.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b34.xml
similarity index 57%
rename from .idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b31.xml
rename to .idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b34.xml
index e57e76f..e15594e 100644
--- a/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b31.xml
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b34.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b31.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b34.xml
similarity index 58%
rename from .idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b31.xml
rename to .idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b34.xml
index e99f973..00ca710 100644
--- a/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b31.xml
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b34.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_2.xml
similarity index 64%
rename from .idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_2.xml
index 3836fa4..4a0aac2 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_2.xml
similarity index 52%
rename from .idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_2.xml
index cd470f3..8dea8ef 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_2.xml
similarity index 65%
rename from .idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_2.xml
index d9aea91..37260b9 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_2.xml
similarity index 65%
rename from .idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_2.xml
index beb58fe..5ada064 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_2.xml
similarity index 65%
rename from .idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_2.xml
index c069857..04a4246 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_2.xml
similarity index 66%
rename from .idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_2.xml
index 3d6acfa..3024084 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_2.xml
similarity index 65%
rename from .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_2.xml
index e3cc3ce..8c59a6a 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_1.xml b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_2.xml
similarity index 56%
rename from .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_1.xml
rename to .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_2.xml
index 17b61a1..3e399f2 100644
--- a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_1.xml
+++ b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_22_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_json_json_20151123.xml b/.idea/libraries/Maven__org_json_json_20151123.xml
deleted file mode 100644
index 324279d..0000000
--- a/.idea/libraries/Maven__org_json_json_20151123.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_json_json_20160212.xml b/.idea/libraries/Maven__org_json_json_20160212.xml
new file mode 100644
index 0000000..44a278c
--- /dev/null
+++ b/.idea/libraries/Maven__org_json_json_20160212.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 751365b..dce803c 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,83 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -127,25 +66,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
@@ -153,26 +78,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -187,6 +92,7 @@
@@ -208,15 +114,9 @@
-
-
-
-
-
-
@@ -242,30 +142,37 @@
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
true
+ DEFINITION_ORDER
@@ -280,78 +187,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -494,9 +330,8 @@
-
-
+
@@ -528,8 +363,22 @@
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -550,6 +399,14 @@
+
+
+
+
+
+
+
+
@@ -576,6 +433,10 @@
+
+
+
+
@@ -603,12 +464,13 @@
-
+
+
@@ -903,13 +765,12 @@
-
-
-
+
+
@@ -1025,7 +886,7 @@
-
+
@@ -1112,6 +973,7 @@
+ project
@@ -1123,10 +985,12 @@
+
+ /usr/local/bin/node
$PROJECT_DIR$
true
@@ -1207,6 +1071,7 @@
1434808152627
+
1434808152627
@@ -1288,306 +1153,367 @@
-
-
- 1434921270136
-
-
- 1434921270137
-
-
- 1434922215775
-
-
- 1434922215775
-
-
- 1434926059465
-
-
- 1434926059465
-
-
- 1434927087970
-
-
- 1434927087970
-
-
- 1434928139587
-
-
- 1434928139587
-
-
- 1434932225092
-
-
- 1434932225093
+
+
+
+
+
+
+
+
+
+
+
+
1434956620075
+
1434956620075
1434956750907
+
1434956750907
1434999490285
+
1434999490285
1435015027385
+
1435015027385
1435084167629
+
1435084167629
1435108063150
+
1435108063150
1435169633681
+
1435169633681
1435253672379
+
1435253672379
1435262669527
+
1435262669527
1435279428470
+
1435279428471
1435324633695
+
1435324633695
1435326238547
+
1435326238547
1435351149105
+
1435351149105
1435352969379
+
1435352969379
1435522852368
+
1435522852368
1435524383549
+
1435524383549
1435531042174
+
1435531042174
1435612308869
+
1435612308869
1435612610051
+
1435612610051
1435612816385
+
1435612816385
1436699817668
+
1436699817668
1437345691187
+
1437345691187
1437352180849
+
1437352180849
1437412684747
+
1437412684747
1438295674986
+
1438295674986
1438624259422
+
1438624259422
1438626388907
+
1438626388907
1438671471514
+
1438671471514
1438704494358
+
1438704494358
1438714336299
+
1438714336299
1439745791759
+
1439745791759
1439748123685
+
1439748123685
1439751029730
+
1439751029730
1439752857666
+
1439752857666
1440700286055
+
1440700286055
1441719275787
+
1441719275787
1444845084283
+
1444845084283
1444855140616
+
1444855140616
1447282141578
+
1447282141579
1447284479323
+
1447284479323
1447284695900
+
1447284695901
1447967835440
+
1447967835441
1453141929947
+
1453141929950
-
+
+ 1460430348503
+
+
+
+ 1460430348503
+
+
+ 1460430570307
+
+
+
+ 1460430570307
+
+
+ 1460485200872
+
+
+
+ 1460485200873
+
+
+ 1461933537820
+
+
+
+ 1461933537820
+
+
+ 1461936025610
+
+
+
+ 1461936025610
+
+
+ 1461944793495
+
+
+
+ 1461944793495
+
+
-
+
@@ -1599,7 +1525,7 @@
-
+
@@ -1610,27 +1536,27 @@
-
+
-
+
-
+
-
-
+
+
@@ -1678,11 +1604,6 @@
-
-
-
-
-
@@ -1703,7 +1624,12 @@
-
+
+
+
+
+
+
@@ -1711,7 +1637,7 @@
file://$PROJECT_DIR$/src/main/java/org/telegram/services/WeatherService.java
- 172
+ 173
@@ -1723,7 +1649,7 @@
file://$PROJECT_DIR$/src/main/java/org/telegram/services/TransifexService.java
- 323
+ 330
@@ -1734,28 +1660,40 @@
- file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
- 40
+ jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v1.0/TelegramBots-v1.0.jar!/org/telegram/telegrambots/bots/AbsSender.class
+ 343
-
+
- jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v0.1/TelegramBots-v0.1.jar!/org/telegram/telegrambots/TelegramBotsApi.class
- 61
+ file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
+ 1178
-
+
- file://$PROJECT_DIR$/src/main/java/org/telegram/Main.java
- 27
+ file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
+ 1171
-
+
+
+
+ file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
+ 46
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
+ 48
+
+
-
+
@@ -1764,452 +1702,335 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
-
-
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BotAPi.iml b/BotAPi.iml
index 4ff71c6..448ca73 100644
--- a/BotAPi.iml
+++ b/BotAPi.iml
@@ -11,50 +11,50 @@
-
-
-
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/pom.xml b/pom.xml
index fa0cd85..7081b55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
BotApi
org.telegram.botapi
- 1.0
+ 2.0
@@ -24,9 +24,10 @@
UTF-8
UTF-8
- 2.22.1
- 4.5.1
- v1.0
+ 4.5.2
+ v2.3.3.1
+ 20160212
+ 5.1.38
@@ -51,25 +52,10 @@
org.glassfish.jersey.containers
jersey-container-grizzly2-http
-
- org.glassfish.jersey.media
- jersey-media-json-jackson
- ${jersey.version}
-
-
- com.sun.jersey
- jersey-bundle
- 1.19
-
-
- com.sun.jersey
- jersey-grizzly2-servlet
- 1.19
-
org.json
json
- 20151123
+ ${json.version}
commons-io
@@ -89,7 +75,7 @@
mysql
mysql-connector-java
- 5.1.38
+ ${mysql.version}
org.jsoup
diff --git a/src/main/java/org/telegram/Main.java b/src/main/java/org/telegram/Main.java
index aa5a067..474e4ff 100644
--- a/src/main/java/org/telegram/Main.java
+++ b/src/main/java/org/telegram/Main.java
@@ -1,9 +1,19 @@
package org.telegram;
-import org.telegram.services.BotLogger;
import org.telegram.telegrambots.TelegramApiException;
import org.telegram.telegrambots.TelegramBotsApi;
-import org.telegram.updateshandlers.*;
+import org.telegram.telegrambots.logging.BotLogger;
+import org.telegram.telegrambots.logging.BotsFileHandler;
+import org.telegram.updateshandlers.ChannelHandlers;
+import org.telegram.updateshandlers.DirectionsHandlers;
+import org.telegram.updateshandlers.FilesHandlers;
+import org.telegram.updateshandlers.RaeHandlers;
+import org.telegram.updateshandlers.TransifexHandlers;
+import org.telegram.updateshandlers.WeatherHandlers;
+
+import java.io.IOException;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
/**
* @author Ruben Bermudez
@@ -15,6 +25,13 @@ public class Main {
private static final String LOGTAG = "MAIN";
public static void main(String[] args) {
+ BotLogger.setLevel(Level.ALL);
+ BotLogger.registerLogger(new ConsoleHandler());
+ try {
+ BotLogger.registerLogger(new BotsFileHandler());
+ } catch (IOException e) {
+ BotLogger.severe("MAIN", e);
+ }
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
diff --git a/src/main/java/org/telegram/database/ConectionDB.java b/src/main/java/org/telegram/database/ConectionDB.java
index 5a98513..ed74781 100644
--- a/src/main/java/org/telegram/database/ConectionDB.java
+++ b/src/main/java/org/telegram/database/ConectionDB.java
@@ -8,9 +8,15 @@
package org.telegram.database;
import org.telegram.BuildVars;
-import org.telegram.services.BotLogger;
+import org.telegram.telegrambots.logging.BotLogger;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
/**
* @author Ruben Bermudez
diff --git a/src/main/java/org/telegram/database/DatabaseManager.java b/src/main/java/org/telegram/database/DatabaseManager.java
index 861ed4c..7921338 100644
--- a/src/main/java/org/telegram/database/DatabaseManager.java
+++ b/src/main/java/org/telegram/database/DatabaseManager.java
@@ -7,8 +7,8 @@
*/
package org.telegram.database;
-import org.telegram.services.BotLogger;
import org.telegram.structure.WeatherAlert;
+import org.telegram.telegrambots.logging.BotLogger;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -566,6 +566,18 @@ public class DatabaseManager {
return updatedRows > 0;
}
+ public boolean deleteAlertsForUser(Integer userId) {
+ int updatedRows = 0;
+ try {
+ final PreparedStatement preparedStatement = connetion.getPreparedStatement("DELETE FROM WeatherAlert WHERE userId=?");
+ preparedStatement.setInt(1, userId);
+ updatedRows = preparedStatement.executeUpdate();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return updatedRows > 0;
+ }
+
public List getAllAlerts() {
List allAlerts = new ArrayList<>();
diff --git a/src/main/java/org/telegram/services/BotLogger.java b/src/main/java/org/telegram/services/BotLogger.java
deleted file mode 100644
index fd180b9..0000000
--- a/src/main/java/org/telegram/services/BotLogger.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package org.telegram.services;
-
-import org.telegram.BuildVars;
-
-import javax.validation.constraints.NotNull;
-import java.io.*;
-import java.time.LocalDateTime;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @author Ruben Bermudez
- * @version 2.0
- * @brief Logger to file
- * @date 21/01/15
- */
-public class BotLogger {
- private static final Object lockToWrite = new Object();
- private static volatile PrintWriter logginFile;
- private static volatile String currentFileName;
- private static final Logger logger = Logger.getLogger("Tsupport Bot");
- private static volatile LocalDateTime lastFileDate;
- private static LoggerThread loggerThread = new LoggerThread();
- private static final ConcurrentLinkedQueue logsToFile = new ConcurrentLinkedQueue<>();
-
- static {
- logger.setLevel(Level.ALL);
- logger.addHandler(new ConsoleHandler());
- loggerThread.start();
- lastFileDate = LocalDateTime.now();
- if ((currentFileName == null) || (currentFileName.compareTo("") == 0)) {
- currentFileName = dateFormatterForFileName(lastFileDate) + ".log";
- try {
- final File file = new File(currentFileName);
- if (file.exists()) {
- logginFile = new PrintWriter(new BufferedWriter(new FileWriter(currentFileName, true)));
- } else {
- final boolean created = file.createNewFile();
- if (created) {
- logginFile = new PrintWriter(new BufferedWriter(new FileWriter(currentFileName, true)));
- } else {
- throw new NullPointerException("File for logging error");
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
- }
-
- public static void log(@NotNull Level level, String tag, String msg) {
- logger.log(level, String.format("[%s] %s", tag, msg));
- logToFile(level, tag, msg);
- }
-
-
- public static void severe(String tag, String msg) {
- logger.severe(String.format("[%s] %s", tag, msg));
- logToFile(Level.SEVERE, tag, msg);
- }
-
- public static void warn(String tag, String msg) {
- warning(tag, msg);
- }
-
- public static void debug(String tag, String msg) {
- fine(tag, msg);
- }
-
- public static void error(String tag, String msg) {
- severe(tag, msg);
- }
-
- public static void trace(String tag, String msg) {
- finer(tag, msg);
- }
-
- public static void warning(String tag, String msg) {
- logger.warning(String.format("[%s] %s", tag, msg));
- logToFile(Level.WARNING, tag, msg);
- }
-
-
- public static void info(String tag, String msg) {
- logger.info(String.format("[%s] %s", tag, msg));
- logToFile(Level.INFO, tag, msg);
- }
-
-
- public static void config(String tag, String msg) {
- logger.config(String.format("[%s] %s", tag, msg));
- logToFile(Level.CONFIG, tag, msg);
- }
-
-
- public static void fine(String tag, String msg) {
- logger.fine(String.format("[%s] %s", tag, msg));
- logToFile(Level.FINE, tag, msg);
- }
-
-
- public static void finer(String tag, String msg) {
- logger.finer(String.format("[%s] %s", tag, msg));
- logToFile(Level.FINER, tag, msg);
- }
-
-
- public static void finest(String tag, String msg) {
- logger.finest(String.format("[%s] %s", tag, msg));
- logToFile(Level.FINEST, tag, msg);
- }
-
-
- public static void log(@NotNull Level level, @NotNull String tag, @NotNull Throwable throwable) {
- logger.log(level, String.format("[%s] Exception", tag), throwable);
- logToFile(level, tag, throwable);
- }
-
- public static void log(@NotNull Level level, @NotNull String tag, @NotNull String msg, @NotNull Throwable thrown) {
- logger.log(level, msg, thrown);
- logToFile(level, msg, thrown);
- }
-
- public static void severe(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.SEVERE, tag, throwable);
- }
-
- public static void warning(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.WARNING, tag, throwable);
- }
-
- public static void info(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.INFO, tag, throwable);
- }
-
- public static void config(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.CONFIG, tag, throwable);
- }
-
- public static void fine(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.FINE, tag, throwable);
- }
-
- public static void finer(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.FINER, tag, throwable);
- }
-
- public static void finest(@NotNull String tag, @NotNull Throwable throwable) {
- logToFile(Level.FINEST, tag, throwable);
- }
-
- public static void warn(@NotNull String tag, Throwable throwable) {
- warning(tag, throwable);
- }
-
- public static void debug(@NotNull String tag, Throwable throwable) {
- fine(tag, throwable);
- }
-
- public static void error(@NotNull String tag, Throwable throwable) {
- severe(tag, throwable);
- }
-
- public static void trace(@NotNull String tag, Throwable throwable) {
- finer(tag, throwable);
- }
-
- public static void severe(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.SEVERE, tag, msg, throwable);
- }
-
- public static void warning(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.WARNING, tag, msg, throwable);
- }
-
- public static void info(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.INFO, tag, msg, throwable);
- }
-
- public static void config(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.CONFIG, tag, msg, throwable);
- }
-
- public static void fine(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.FINE, tag, msg, throwable);
- }
-
- public static void finer(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.FINER, tag, msg, throwable);
- }
-
- public static void finest(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.FINEST, msg, throwable);
- }
-
- public static void warn(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.WARNING, tag, msg, throwable);
- }
-
- public static void debug(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.FINE, tag, msg, throwable);
- }
-
- public static void error(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.SEVERE, tag, msg, throwable);
- }
-
- public static void trace(@NotNull String msg, @NotNull String tag, @NotNull Throwable throwable) {
- log(Level.FINER, tag, msg, throwable);
- }
-
- private static boolean isCurrentDate(LocalDateTime dateTime) {
- return dateTime.toLocalDate().isEqual(lastFileDate.toLocalDate());
- }
-
- private static String dateFormatterForFileName(@NotNull LocalDateTime dateTime) {
- String dateString = "";
- dateString += dateTime.getDayOfMonth();
- dateString += dateTime.getMonthValue();
- dateString += dateTime.getYear();
- return dateString;
- }
-
- private static String dateFormatterForLogs(@NotNull LocalDateTime dateTime) {
- String dateString = "[";
- dateString += dateTime.getDayOfMonth() + "_";
- dateString += dateTime.getMonthValue() + "_";
- dateString += dateTime.getYear() + "_";
- dateString += dateTime.getHour() + ":";
- dateString += dateTime.getMinute() + ":";
- dateString += dateTime.getSecond();
- dateString += "] ";
- return dateString;
- }
-
- private static void updateAndCreateFile(LocalDateTime dateTime) {
- if (!isCurrentDate(dateTime)) {
- lastFileDate = LocalDateTime.now();
- currentFileName = BuildVars.pathToLogs + dateFormatterForFileName(lastFileDate) + ".log";
- try {
- logginFile.flush();
- logginFile.close();
- final File file = new File(currentFileName);
- if (file.exists()) {
- logginFile = new PrintWriter(new BufferedWriter(new FileWriter(currentFileName, true)));
- } else {
- final boolean created = file.createNewFile();
- if (created) {
- logginFile = new PrintWriter(new BufferedWriter(new FileWriter(currentFileName, true)));
- } else {
- throw new NullPointerException("Error updating log file");
- }
- }
- } catch (IOException ignored) {
- }
- }
- }
-
-
- private static void logToFile(@NotNull Level level, @NotNull String tag, @NotNull Throwable throwable) {
- if (isLoggable(level)) {
- synchronized (lockToWrite) {
- final LocalDateTime currentDate = LocalDateTime.now();
- final String dateForLog = dateFormatterForLogs(currentDate);
- updateAndCreateFile(currentDate);
- logThrowableToFile(level, tag, throwable, dateForLog);
- }
- }
- }
-
-
-
- private static void logToFile(@NotNull Level level, @NotNull String tag, @NotNull String msg) {
- if (isLoggable(level)) {
- synchronized (lockToWrite) {
- final LocalDateTime currentDate = LocalDateTime.now();
- updateAndCreateFile(currentDate);
- final String dateForLog = dateFormatterForLogs(currentDate);
- logMsgToFile(level, tag, msg, dateForLog);
- }
- }
- }
-
- private static void logToFile(Level level, @NotNull String tag, @NotNull String msg, @NotNull Throwable throwable) {
- if (isLoggable(level)) {
- synchronized (lockToWrite) {
- final LocalDateTime currentDate = LocalDateTime.now();
- updateAndCreateFile(currentDate);
- final String dateForLog = dateFormatterForLogs(currentDate);
- logMsgToFile(level, tag, msg, dateForLog);
- logThrowableToFile(level, tag, throwable, dateForLog);
- }
- }
- }
-
- private static void logMsgToFile(@NotNull Level level, @NotNull String tag, @NotNull String msg, @NotNull String dateForLog) {
- final String logMessage = String.format("%s{%s} %s - %s", dateForLog, level.toString(), tag, msg);
- logsToFile.add(logMessage);
- synchronized (logsToFile) {
- logsToFile.notifyAll();
- }
- }
-
- private static void logThrowableToFile(@NotNull Level level, @NotNull String tag, @NotNull Throwable throwable, @NotNull String dateForLog) {
- String throwableLog = String.format("%s{%s} %s - %s", dateForLog, level.toString(), tag, throwable.toString());
- for (StackTraceElement element : throwable.getStackTrace()) {
- throwableLog += "\tat " + element + "\n";
- }
- logsToFile.add(throwableLog);
- synchronized (logsToFile) {
- logsToFile.notifyAll();
- }
- }
-
- private static boolean isLoggable(Level level) {
- return logger.isLoggable(level) && BuildVars.debug;
- }
-
- private static class LoggerThread extends Thread {
-
- @Override
- public void run() {
- while(true) {
- final ConcurrentLinkedQueue stringsToLog = new ConcurrentLinkedQueue<>();
- synchronized (logsToFile) {
- if (logsToFile.isEmpty()) {
- try {
- logsToFile.wait();
- } catch (InterruptedException e) {
- return;
- }
- if (logsToFile.isEmpty()) {
- continue;
- }
- }
- stringsToLog.addAll(logsToFile);
- logsToFile.clear();
- }
-
- stringsToLog.stream().forEach(logginFile::println);
- logginFile.flush();
- }
- }
- }
-}
diff --git a/src/main/java/org/telegram/services/DirectionsService.java b/src/main/java/org/telegram/services/DirectionsService.java
index 305a651..bd96e97 100644
--- a/src/main/java/org/telegram/services/DirectionsService.java
+++ b/src/main/java/org/telegram/services/DirectionsService.java
@@ -12,6 +12,7 @@ import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.telegram.BuildVars;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
diff --git a/src/main/java/org/telegram/services/RaeService.java b/src/main/java/org/telegram/services/RaeService.java
index 13712d9..505fb63 100644
--- a/src/main/java/org/telegram/services/RaeService.java
+++ b/src/main/java/org/telegram/services/RaeService.java
@@ -12,6 +12,7 @@ import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.IOException;
import java.net.URLEncoder;
diff --git a/src/main/java/org/telegram/services/TimerExecutor.java b/src/main/java/org/telegram/services/TimerExecutor.java
index 278313e..68387f6 100644
--- a/src/main/java/org/telegram/services/TimerExecutor.java
+++ b/src/main/java/org/telegram/services/TimerExecutor.java
@@ -1,5 +1,7 @@
package org.telegram.services;
+import org.telegram.telegrambots.logging.BotLogger;
+
import java.time.Clock;
import java.time.Duration;
import java.time.LocalDateTime;
diff --git a/src/main/java/org/telegram/services/TransifexService.java b/src/main/java/org/telegram/services/TransifexService.java
index ce8bb37..ce701ca 100644
--- a/src/main/java/org/telegram/services/TransifexService.java
+++ b/src/main/java/org/telegram/services/TransifexService.java
@@ -8,9 +8,16 @@ import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.telegram.BuildVars;
-import org.telegram.telegrambots.api.methods.SendDocument;
+import org.telegram.telegrambots.api.methods.send.SendDocument;
+import org.telegram.telegrambots.logging.BotLogger;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
/**
* @author Ruben Bermudez
diff --git a/src/main/java/org/telegram/services/WeatherService.java b/src/main/java/org/telegram/services/WeatherService.java
index 880a92a..a7a96ac 100644
--- a/src/main/java/org/telegram/services/WeatherService.java
+++ b/src/main/java/org/telegram/services/WeatherService.java
@@ -11,6 +11,7 @@ import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.telegram.BuildVars;
import org.telegram.database.DatabaseManager;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
diff --git a/src/main/java/org/telegram/updateshandlers/ChannelHandlers.java b/src/main/java/org/telegram/updateshandlers/ChannelHandlers.java
index 85db7c2..1ff8323 100644
--- a/src/main/java/org/telegram/updateshandlers/ChannelHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/ChannelHandlers.java
@@ -1,14 +1,14 @@
package org.telegram.updateshandlers;
import org.telegram.BotConfig;
-import org.telegram.services.BotLogger;
import org.telegram.telegrambots.TelegramApiException;
-import org.telegram.telegrambots.api.methods.SendMessage;
-import org.telegram.telegrambots.api.objects.ForceReplyKeyboard;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
-import org.telegram.telegrambots.api.objects.ReplyKeyboardMarkup;
import org.telegram.telegrambots.api.objects.Update;
+import org.telegram.telegrambots.api.objects.replykeyboard.ForceReplyKeyboard;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardMarkup;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.InvalidObjectException;
import java.util.concurrent.ConcurrentHashMap;
@@ -36,13 +36,17 @@ public class ChannelHandlers extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
- Message message = update.getMessage();
- if (message != null && message.hasText()) {
- try {
- handleIncomingMessage(message);
- } catch (InvalidObjectException e) {
- BotLogger.severe(LOGTAG, e);
+ try {
+ Message message = update.getMessage();
+ if (message != null && message.hasText()) {
+ try {
+ handleIncomingMessage(message);
+ } catch (InvalidObjectException e) {
+ BotLogger.severe(LOGTAG, e);
+ }
}
+ } catch (Exception e) {
+ BotLogger.error(LOGTAG, e);
}
}
diff --git a/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java b/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java
index e53057b..366c9c1 100644
--- a/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java
@@ -4,14 +4,19 @@ import org.json.JSONObject;
import org.telegram.BotConfig;
import org.telegram.Commands;
import org.telegram.database.DatabaseManager;
-import org.telegram.services.BotLogger;
import org.telegram.services.DirectionsService;
import org.telegram.services.LocalisationService;
import org.telegram.telegrambots.TelegramApiException;
import org.telegram.telegrambots.api.methods.BotApiMethod;
-import org.telegram.telegrambots.api.methods.SendMessage;
-import org.telegram.telegrambots.api.objects.*;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
+import org.telegram.telegrambots.api.objects.Message;
+import org.telegram.telegrambots.api.objects.Update;
+import org.telegram.telegrambots.api.objects.replykeyboard.ForceReplyKeyboard;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardHide;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardMarkup;
+import org.telegram.telegrambots.api.objects.replykeyboard.buttons.KeyboardRow;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import org.telegram.telegrambots.updateshandlers.SentCallback;
import java.io.InvalidObjectException;
@@ -44,7 +49,7 @@ public class DirectionsHandlers extends TelegramLongPollingBot {
public void onUpdateReceived(Update update) {
try {
handleDirections(update);
- } catch (InvalidObjectException e) {
+ } catch (Exception e) {
BotLogger.error(LOGTAG, e);
}
}
@@ -71,15 +76,15 @@ public class DirectionsHandlers extends TelegramLongPollingBot {
sendHelpMessage(message, language);
} else if (!message.getText().startsWith("/")) {
if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_ORIGIN_STATUS &&
- message.hasReplayMessage() &&
+ message.isReply() &&
DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) {
onOriginReceived(message, language);
} else if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_DESTINY_STATUS &&
- message.hasReplayMessage() &&
+ message.isReply() &&
DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) {
onDestinationReceived(message, language);
- } else if (!message.hasReplayMessage()) {
+ } else if (!message.isReply()) {
if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == -1) {
sendHelpMessage(message, language);
} else {
@@ -222,9 +227,9 @@ public class DirectionsHandlers extends TelegramLongPollingBot {
sendMessageRequest.setChatId(message.getChatId().toString());
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
HashMap languages = LocalisationService.getInstance().getSupportedLanguages();
- List> commands = new ArrayList<>();
+ List commands = new ArrayList<>();
for (Map.Entry entry : languages.entrySet()) {
- List commandRow = new ArrayList<>();
+ KeyboardRow commandRow = new KeyboardRow();
commandRow.add(entry.getKey() + " --> " + entry.getValue());
commands.add(commandRow);
}
diff --git a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java
index f0c9420..b5d1113 100644
--- a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java
@@ -3,17 +3,18 @@ package org.telegram.updateshandlers;
import org.telegram.BotConfig;
import org.telegram.Commands;
import org.telegram.database.DatabaseManager;
-import org.telegram.services.BotLogger;
import org.telegram.services.Emoji;
import org.telegram.services.LocalisationService;
import org.telegram.telegrambots.TelegramApiException;
-import org.telegram.telegrambots.api.methods.SendDocument;
-import org.telegram.telegrambots.api.methods.SendMessage;
+import org.telegram.telegrambots.api.methods.send.SendDocument;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
-import org.telegram.telegrambots.api.objects.ReplyKeyboardHide;
-import org.telegram.telegrambots.api.objects.ReplyKeyboardMarkup;
import org.telegram.telegrambots.api.objects.Update;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardHide;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardMarkup;
+import org.telegram.telegrambots.api.objects.replykeyboard.buttons.KeyboardRow;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.InvalidObjectException;
import java.util.ArrayList;
@@ -44,8 +45,18 @@ public class FilesHandlers extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
try {
- handleFileUpdate(update);
- } catch (InvalidObjectException e) {
+ if (update.hasMessage()) {
+ try {
+ handleFileUpdate(update);
+ } catch (TelegramApiException e) {
+ if (e.getApiResponse().contains("Bot was blocked by the user")) {
+ if (update.getMessage().getFrom() != null) {
+ DatabaseManager.getInstance().deleteUserForFile(update.getMessage().getFrom().getId());
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
BotLogger.error(LOGTAG, e);
}
}
@@ -55,7 +66,7 @@ public class FilesHandlers extends TelegramLongPollingBot {
return BotConfig.USERNAMEFILES;
}
- private void handleFileUpdate(Update update) throws InvalidObjectException {
+ private void handleFileUpdate(Update update) throws InvalidObjectException, TelegramApiException {
Message message = update.getMessage();
if (message != null && message.hasText()) {
if (languageMessages.contains(message.getFrom().getId())) {
@@ -95,15 +106,11 @@ public class FilesHandlers extends TelegramLongPollingBot {
sendMessageRequest.setText(LocalisationService.getInstance().getString("fileUploaded", language) +
LocalisationService.getInstance().getString("uploadedFileURL", language) + message.getDocument().getFileId());
sendMessageRequest.setChatId(message.getChatId().toString());
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
}
- private void onListCommand(Message message, String language) throws InvalidObjectException {
+ private void onListCommand(Message message, String language) throws InvalidObjectException, TelegramApiException {
HashMap files = DatabaseManager.getInstance().getFilesByUser(message.getFrom().getId());
SendMessage sendMessageRequest = new SendMessage();
if (files.size() > 0) {
@@ -120,14 +127,10 @@ public class FilesHandlers extends TelegramLongPollingBot {
ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide();
replyKeyboardHide.setHideKeyboard(true);
sendMessageRequest.setReplayMarkup(replyKeyboardHide);
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
- private void onDeleteCommand(Message message, String language, String[] parts) throws InvalidObjectException {
+ private void onDeleteCommand(Message message, String language, String[] parts) throws InvalidObjectException, TelegramApiException {
if (DatabaseManager.getInstance().getUserStatusForFile(message.getFrom().getId()) == DELETE_UPLOADED_STATUS &&
parts.length == 2) {
onDeleteCommandWithParameters(message, language, parts[1]);
@@ -136,7 +139,7 @@ public class FilesHandlers extends TelegramLongPollingBot {
}
}
- private void onDeleteCommandWithoutParameters(Message message, String language) throws InvalidObjectException {
+ private void onDeleteCommandWithoutParameters(Message message, String language) throws InvalidObjectException, TelegramApiException {
DatabaseManager.getInstance().addUserForFile(message.getFrom().getId(), DELETE_UPLOADED_STATUS);
SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("deleteUploadedFile", language));
@@ -144,9 +147,9 @@ public class FilesHandlers extends TelegramLongPollingBot {
HashMap files = DatabaseManager.getInstance().getFilesByUser(message.getFrom().getId());
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
if (files.size() > 0) {
- List> commands = new ArrayList<>();
+ List commands = new ArrayList<>();
for (Map.Entry entry : files.entrySet()) {
- List commandRow = new ArrayList<>();
+ KeyboardRow commandRow = new KeyboardRow();
commandRow.add(Commands.deleteCommand + " " + entry.getKey() + " " + Emoji.LEFT_RIGHT_ARROW.toString()
+ " " + entry.getValue());
commands.add(commandRow);
@@ -156,14 +159,10 @@ public class FilesHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setKeyboard(commands);
}
sendMessageRequest.setReplayMarkup(replyKeyboardMarkup);
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
- private void onDeleteCommandWithParameters(Message message, String language, String part) throws InvalidObjectException {
+ private void onDeleteCommandWithParameters(Message message, String language, String part) throws InvalidObjectException, TelegramApiException {
String[] innerParts = part.split(Emoji.LEFT_RIGHT_ARROW.toString(), 2);
boolean removed = DatabaseManager.getInstance().deleteFile(innerParts[0].trim());
SendMessage sendMessageRequest = new SendMessage();
@@ -173,40 +172,29 @@ public class FilesHandlers extends TelegramLongPollingBot {
sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language));
}
sendMessageRequest.setChatId(message.getChatId().toString());
- try {
- sendMessage(sendMessageRequest);
- DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId());
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+
+ sendMessage(sendMessageRequest);
+ DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId());
}
- private void onCancelCommand(Message message, String language) throws InvalidObjectException {
+ private void onCancelCommand(Message message, String language) throws InvalidObjectException, TelegramApiException {
DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId());
SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("processFinished", language));
sendMessageRequest.setChatId(message.getChatId().toString());
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
- private void onUploadCommand(Message message, String language) throws InvalidObjectException {
+ private void onUploadCommand(Message message, String language) throws InvalidObjectException, TelegramApiException {
DatabaseManager.getInstance().addUserForFile(message.getFrom().getId(), INITIAL_UPLOAD_STATUS);
SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("sendFileToUpload", language));
sendMessageRequest.setChatId(message.getChatId().toString());
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
- private void sendHelpMessage(Message message, String language) throws InvalidObjectException {
+ private void sendHelpMessage(Message message, String language) throws InvalidObjectException, TelegramApiException {
SendMessage sendMessageRequest = new SendMessage();
String formatedString = String.format(
LocalisationService.getInstance().getString("helpFiles", language),
@@ -214,39 +202,31 @@ public class FilesHandlers extends TelegramLongPollingBot {
Commands.listCommand);
sendMessageRequest.setText(formatedString);
sendMessageRequest.setChatId(message.getChatId().toString());
- try {
- sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
}
- private void onStartWithParameters(Message message, String language, String part) throws InvalidObjectException {
- try {
- if (DatabaseManager.getInstance().doesFileExists(part.trim())) {
- SendDocument sendDocumentRequest = new SendDocument();
- sendDocumentRequest.setDocument(part.trim());
- sendDocumentRequest.setChatId(message.getChatId().toString());
- sendDocument(sendDocumentRequest);
- } else {
- SendMessage sendMessageRequest = new SendMessage();
- sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language));
- sendMessageRequest.setChatId(message.getChatId().toString());
- sendMessage(sendMessageRequest);
- }
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
+ private void onStartWithParameters(Message message, String language, String part) throws InvalidObjectException, TelegramApiException {
+ if (DatabaseManager.getInstance().doesFileExists(part.trim())) {
+ SendDocument sendDocumentRequest = new SendDocument();
+ sendDocumentRequest.setDocument(part.trim());
+ sendDocumentRequest.setChatId(message.getChatId().toString());
+ sendDocument(sendDocumentRequest);
+ } else {
+ SendMessage sendMessageRequest = new SendMessage();
+ sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language));
+ sendMessageRequest.setChatId(message.getChatId().toString());
+ sendMessage(sendMessageRequest);
}
}
- private void onSetLanguageCommand(Message message, String language) throws InvalidObjectException {
+ private void onSetLanguageCommand(Message message, String language) throws InvalidObjectException, TelegramApiException {
SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setChatId(message.getChatId().toString());
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
HashMap languages = LocalisationService.getInstance().getSupportedLanguages();
- List> commands = new ArrayList<>();
+ List commands = new ArrayList<>();
for (Map.Entry entry : languages.entrySet()) {
- List commandRow = new ArrayList<>();
+ KeyboardRow commandRow = new KeyboardRow();
commandRow.add(entry.getKey() + " " + Emoji.LEFT_RIGHT_ARROW.toString() + " " + entry.getValue());
commands.add(commandRow);
}
@@ -256,15 +236,11 @@ public class FilesHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardMarkup);
sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language));
- try {
- sendMessage(sendMessageRequest);
- languageMessages.add(message.getFrom().getId());
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
+ languageMessages.add(message.getFrom().getId());
}
- private void onLanguageReceived(Message message) throws InvalidObjectException {
+ private void onLanguageReceived(Message message) throws InvalidObjectException, TelegramApiException {
String[] parts = message.getText().split(Emoji.LEFT_RIGHT_ARROW.toString(), 2);
SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setChatId(message.getChatId().toString());
@@ -279,11 +255,7 @@ public class FilesHandlers extends TelegramLongPollingBot {
replyKeyboardHide.setHideKeyboard(true);
replyKeyboardHide.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardHide);
- try {
- sendMessage(sendMessageRequest);
- languageMessages.remove(message.getFrom().getId());
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
+ sendMessage(sendMessageRequest);
+ languageMessages.remove(message.getFrom().getId());
}
}
diff --git a/src/main/java/org/telegram/updateshandlers/RaeHandlers.java b/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
index 6637772..7aac6ef 100644
--- a/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/RaeHandlers.java
@@ -1,13 +1,18 @@
package org.telegram.updateshandlers;
import org.telegram.BotConfig;
-import org.telegram.services.BotLogger;
import org.telegram.services.RaeService;
import org.telegram.telegrambots.TelegramApiException;
import org.telegram.telegrambots.api.methods.AnswerInlineQuery;
-import org.telegram.telegrambots.api.methods.SendMessage;
-import org.telegram.telegrambots.api.objects.*;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
+import org.telegram.telegrambots.api.objects.Message;
+import org.telegram.telegrambots.api.objects.Update;
+import org.telegram.telegrambots.api.objects.inlinequery.InlineQuery;
+import org.telegram.telegrambots.api.objects.inlinequery.inputmessagecontent.InputTextMessageContent;
+import org.telegram.telegrambots.api.objects.inlinequery.result.InlineQueryResult;
+import org.telegram.telegrambots.api.objects.inlinequery.result.InlineQueryResultArticle;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import java.util.ArrayList;
import java.util.List;
@@ -38,14 +43,18 @@ public class RaeHandlers extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
- if (update.hasInlineQuery()) {
- handleIncomingInlineQuery(update.getInlineQuery());
- } else if (update.hasMessage() && update.getMessage().isUserMessage()) {
- try {
- sendMessage(getHelpMessage(update.getMessage()));
- } catch (TelegramApiException e) {
- e.printStackTrace();
+ try {
+ if (update.hasInlineQuery()) {
+ handleIncomingInlineQuery(update.getInlineQuery());
+ } else if (update.hasMessage() && update.getMessage().isUserMessage()) {
+ try {
+ sendMessage(getHelpMessage(update.getMessage()));
+ } catch (TelegramApiException e) {
+ BotLogger.error(LOGTAG, e);
+ }
}
+ } catch (Exception e) {
+ BotLogger.error(LOGTAG, e);
}
}
@@ -64,9 +73,9 @@ public class RaeHandlers extends TelegramLongPollingBot {
try {
if (!query.isEmpty()) {
List results = raeService.getResults(query);
- sendAnswerInlineQuery(converteResultsToResponse(inlineQuery, results));
+ answerInlineQuery(converteResultsToResponse(inlineQuery, results));
} else {
- sendAnswerInlineQuery(converteResultsToResponse(inlineQuery, new ArrayList<>()));
+ answerInlineQuery(converteResultsToResponse(inlineQuery, new ArrayList<>()));
}
} catch (TelegramApiException e) {
BotLogger.error(LOGTAG, e);
@@ -97,11 +106,13 @@ public class RaeHandlers extends TelegramLongPollingBot {
for (int i = 0; i < raeResults.size(); i++) {
RaeService.RaeResult raeResult = raeResults.get(i);
+ InputTextMessageContent messageContent = new InputTextMessageContent();
+ messageContent.disableWebPagePreview();
+ messageContent.enableMarkdown(true);
+ messageContent.setMessageText(raeResult.getDefinition());
InlineQueryResultArticle article = new InlineQueryResultArticle();
- article.setDisableWebPagePreview(true);
- article.enableMarkdown(true);
+ article.setInputMessageContent(messageContent);
article.setId(Integer.toString(i));
- article.setMessageText(raeResult.getDefinition());
article.setTitle(raeResult.getTitle());
article.setDescription(raeResult.getDescription());
article.setThumbUrl(THUMBNAILBLUE);
diff --git a/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java b/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java
index 5b8bb4e..0929911 100644
--- a/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java
@@ -3,15 +3,15 @@ package org.telegram.updateshandlers;
import org.telegram.BotConfig;
import org.telegram.Commands;
import org.telegram.database.DatabaseManager;
-import org.telegram.services.BotLogger;
import org.telegram.services.LocalisationService;
import org.telegram.services.TransifexService;
import org.telegram.telegrambots.TelegramApiException;
-import org.telegram.telegrambots.api.methods.SendDocument;
-import org.telegram.telegrambots.api.methods.SendMessage;
+import org.telegram.telegrambots.api.methods.send.SendDocument;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import java.io.InvalidObjectException;
@@ -33,7 +33,7 @@ public class TransifexHandlers extends TelegramLongPollingBot {
public void onUpdateReceived(Update update) {
try {
sendTransifexFile(update);
- } catch (InvalidObjectException e) {
+ } catch (Exception e) {
BotLogger.error(LOGTAG, e);
}
}
diff --git a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
index 3232b6a..87f85c4 100644
--- a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
+++ b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
@@ -3,12 +3,23 @@ package org.telegram.updateshandlers;
import org.telegram.BotConfig;
import org.telegram.Commands;
import org.telegram.database.DatabaseManager;
-import org.telegram.services.*;
+import org.telegram.services.CustomTimerTask;
+import org.telegram.services.Emoji;
+import org.telegram.services.LocalisationService;
+import org.telegram.services.TimerExecutor;
+import org.telegram.services.WeatherService;
import org.telegram.structure.WeatherAlert;
import org.telegram.telegrambots.TelegramApiException;
-import org.telegram.telegrambots.api.methods.SendMessage;
-import org.telegram.telegrambots.api.objects.*;
+import org.telegram.telegrambots.api.methods.send.SendMessage;
+import org.telegram.telegrambots.api.objects.Message;
+import org.telegram.telegrambots.api.objects.Update;
+import org.telegram.telegrambots.api.objects.replykeyboard.ForceReplyKeyboard;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardHide;
+import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardMarkup;
+import org.telegram.telegrambots.api.objects.replykeyboard.buttons.KeyboardRow;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
+import org.telegram.telegrambots.logging.BotLogger;
import java.util.ArrayList;
import java.util.List;
@@ -49,11 +60,15 @@ public class WeatherHandlers extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
- if (update.hasMessage()) {
- Message message = update.getMessage();
- if (message.hasText() || message.hasLocation()) {
- handleIncomingMessage(message);
+ try {
+ if (update.hasMessage()) {
+ Message message = update.getMessage();
+ if (message.hasText() || message.hasLocation()) {
+ handleIncomingMessage(message);
+ }
}
+ } catch (Exception e) {
+ BotLogger.error(LOGTAG, e);
}
}
@@ -98,7 +113,12 @@ public class WeatherHandlers extends TelegramLongPollingBot {
try {
sendMessage(sendMessage);
} catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
+ BotLogger.warn(LOGTAG, e);
+ if (e.getApiResponse().contains("Can't access the chat") || e.getApiResponse().contains("Bot was blocked by the user")) {
+ DatabaseManager.getInstance().deleteAlertsForUser(weatherAlert.getUserId());
+ }
+ } catch (Exception e) {
+ BotLogger.severe(LOGTAG, e);
}
}
}
@@ -118,7 +138,7 @@ public class WeatherHandlers extends TelegramLongPollingBot {
// region Incoming messages handlers
- private void handleIncomingMessage(Message message) {
+ private void handleIncomingMessage(Message message) throws TelegramApiException {
final int state = DatabaseManager.getInstance().getWeatherState(message.getFrom().getId(), message.getChatId());
final String language = DatabaseManager.getInstance().getUserWeatherOptions(message.getFrom().getId())[0];
if (!message.isUserMessage() && message.hasText()) {
@@ -163,14 +183,10 @@ public class WeatherHandlers extends TelegramLongPollingBot {
break;
}
- try {
sendMessage(sendMessageRequest);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
}
- private void sendHideKeyboard(Integer userId, Long chatId, Integer messageId) {
+ private void sendHideKeyboard(Integer userId, Long chatId, Integer messageId) throws TelegramApiException {
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId.toString());
sendMessage.enableMarkdown(true);
@@ -182,13 +198,8 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardHide.setHideKeyboard(true);
sendMessage.setReplayMarkup(replyKeyboardHide);
- try {
- sendMessage(sendMessage);
- DatabaseManager.getInstance().insertWeatherState(userId, chatId, STARTSTATE);
- } catch (TelegramApiException e) {
- BotLogger.error(LOGTAG, e);
- }
-
+ sendMessage(sendMessage);
+ DatabaseManager.getInstance().insertWeatherState(userId, chatId, STARTSTATE);
}
private static boolean isCommandForOther(String text) {
@@ -899,11 +910,11 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
- List> keyboard = new ArrayList<>();
- List keyboardFirstRow = new ArrayList<>();
+ List keyboard = new ArrayList<>();
+ KeyboardRow keyboardFirstRow = new KeyboardRow();
keyboardFirstRow.add(getCurrentCommand(language));
keyboardFirstRow.add(getForecastCommand(language));
- List keyboardSecondRow = new ArrayList<>();
+ KeyboardRow keyboardSecondRow = new KeyboardRow();
keyboardSecondRow.add(getSettingsCommand(language));
keyboardSecondRow.add(getRateCommand(language));
keyboard.add(keyboardFirstRow);
@@ -919,14 +930,14 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
- List> keyboard = new ArrayList<>();
+ List keyboard = new ArrayList<>();
for (String languageName : LocalisationService.getInstance().getSupportedLanguages().values()) {
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(languageName);
keyboard.add(row);
}
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(getCancelCommand(language));
keyboard.add(row);
replyKeyboardMarkup.setKeyboard(keyboard);
@@ -940,14 +951,14 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
- List> keyboard = new ArrayList<>();
- List row = new ArrayList<>();
+ List keyboard = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(LocalisationService.getInstance().getString("metricSystem", language));
keyboard.add(row);
- row = new ArrayList<>();
+ row = new KeyboardRow();
row.add(LocalisationService.getInstance().getString("imperialSystem", language));
keyboard.add(row);
- row = new ArrayList<>();
+ row = new KeyboardRow();
row.add(getCancelCommand(language));
keyboard.add(row);
replyKeyboardMarkup.setKeyboard(keyboard);
@@ -961,11 +972,11 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
- List> keyboard = new ArrayList<>();
- List keyboardFirstRow = new ArrayList<>();
+ List keyboard = new ArrayList<>();
+ KeyboardRow keyboardFirstRow = new KeyboardRow();
keyboardFirstRow.add(getLanguagesCommand(language));
keyboardFirstRow.add(getUnitsCommand(language));
- List keyboardSecondRow = new ArrayList<>();
+ KeyboardRow keyboardSecondRow = new KeyboardRow();
keyboardSecondRow.add(getAlertsCommand(language));
keyboardSecondRow.add(getBackCommand(language));
keyboard.add(keyboardFirstRow);
@@ -985,23 +996,23 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(true);
- List> keyboard = new ArrayList<>();
+ List keyboard = new ArrayList<>();
for (String recentWeather : DatabaseManager.getInstance().getRecentWeather(userId)) {
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(recentWeather);
keyboard.add(row);
}
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
if (allowNew) {
row.add(getLocationCommand(language));
keyboard.add(row);
- row = new ArrayList<>();
+ row = new KeyboardRow();
row.add(getNewCommand(language));
keyboard.add(row);
- row = new ArrayList<>();
+ row = new KeyboardRow();
}
row.add(getCancelCommand(language));
keyboard.add(row);
@@ -1017,14 +1028,14 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(true);
- List> keyboard = new ArrayList<>();
+ List keyboard = new ArrayList<>();
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(getNewCommand(language));
row.add(getDeleteCommand(language));
keyboard.add(row);
- row = new ArrayList<>();
+ row = new KeyboardRow();
row.add(getListCommand(language));
row.add(getBackCommand(language));
keyboard.add(row);
@@ -1044,13 +1055,13 @@ public class WeatherHandlers extends TelegramLongPollingBot {
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(true);
- List> keyboard = new ArrayList<>();
+ List keyboard = new ArrayList<>();
for (String alertCityName: alertCitiesNames) {
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(alertCityName);
keyboard.add(row);
}
- List row = new ArrayList<>();
+ KeyboardRow row = new KeyboardRow();
row.add(getCancelCommand(language));
keyboard.add(row);