Browse Source

Merge remote-tracking branch 'remotes/origin/dev'

master
Rubenlagus 11 years ago
parent
commit
698bd5d8cf
  1. 18
      .idea/dataSources.xml
  2. 8
      .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_5_4.xml
  3. 8
      .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_5_4.xml
  4. 8
      .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_5_4.xml
  5. 8
      .idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_base_2_5_4.xml
  6. 8
      .idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_json_provider_2_5_4.xml
  7. 8
      .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_5_4.xml
  8. 8
      .idea/libraries/Maven__mysql_mysql_connector_java_5_1_36.xml
  9. 8
      .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_1.xml
  10. 8
      .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_3.xml
  11. 8
      .idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_1.xml
  12. 8
      .idea/libraries/Maven__org_glassfish_grizzly_grizzly_framework_2_3_22.xml
  13. 8
      .idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_2_3_22.xml
  14. 8
      .idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_server_2_3_22.xml
  15. 8
      .idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b31.xml
  16. 8
      .idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b31.xml
  17. 8
      .idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b31.xml
  18. 8
      .idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b31.xml
  19. 8
      .idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b31.xml
  20. 8
      .idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_21.xml
  21. 8
      .idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_21.xml
  22. 8
      .idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_21.xml
  23. 8
      .idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_21.xml
  24. 8
      .idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_21.xml
  25. 8
      .idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_21.xml
  26. 8
      .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_21.xml
  27. 8
      .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_21.xml
  28. 13
      .idea/libraries/Maven__org_jsoup_jsoup_1_8_2.xml
  29. 13
      .idea/libraries/Maven__org_jsoup_jsoup_1_8_3.xml
  30. 1356
      .idea/workspace.xml
  31. 56
      BotAPi.iml
  32. 16
      pom.xml
  33. 12
      src/main/java/org/telegram/BotConfig.java
  34. 7
      src/main/java/org/telegram/BuildVars.java
  35. 29
      src/main/java/org/telegram/Main.java
  36. 108
      src/main/java/org/telegram/SenderHelper.java
  37. 38
      src/main/java/org/telegram/api/Contact.java
  38. 70
      src/main/java/org/telegram/api/PhotoSize.java
  39. 13
      src/main/java/org/telegram/api/ReplyKeyboard.java
  40. 46
      src/main/java/org/telegram/api/Sticker.java
  41. 55
      src/main/java/org/telegram/api/Update.java
  42. 54
      src/main/java/org/telegram/api/User.java
  43. 43
      src/main/java/org/telegram/api/UserProfilePhotos.java
  44. 13
      src/main/java/org/telegram/api/interfaces/BotApiObject.java
  45. 18
      src/main/java/org/telegram/api/interfaces/IToJson.java
  46. 28
      src/main/java/org/telegram/api/methods/BotApiMethod.java
  47. 2
      src/main/java/org/telegram/api/methods/Constants.java
  48. 98
      src/main/java/org/telegram/api/methods/ForwardMessage.java
  49. 79
      src/main/java/org/telegram/api/methods/GetFile.java
  50. 52
      src/main/java/org/telegram/api/methods/GetMe.java
  51. 22
      src/main/java/org/telegram/api/methods/GetUpdates.java
  52. 111
      src/main/java/org/telegram/api/methods/GetUserProfilePhotos.java
  53. 69
      src/main/java/org/telegram/api/methods/SendAudio.java
  54. 89
      src/main/java/org/telegram/api/methods/SendChatAction.java
  55. 4
      src/main/java/org/telegram/api/methods/SendDocument.java
  56. 137
      src/main/java/org/telegram/api/methods/SendLocation.java
  57. 168
      src/main/java/org/telegram/api/methods/SendMessage.java
  58. 4
      src/main/java/org/telegram/api/methods/SendPhoto.java
  59. 4
      src/main/java/org/telegram/api/methods/SendSticker.java
  60. 4
      src/main/java/org/telegram/api/methods/SendVideo.java
  61. 4
      src/main/java/org/telegram/api/methods/SendVoice.java
  62. 39
      src/main/java/org/telegram/api/methods/SetWebhook.java
  63. 68
      src/main/java/org/telegram/api/objects/Audio.java
  64. 54
      src/main/java/org/telegram/api/objects/Chat.java
  65. 78
      src/main/java/org/telegram/api/objects/Contact.java
  66. 59
      src/main/java/org/telegram/api/objects/Document.java
  67. 95
      src/main/java/org/telegram/api/objects/File.java
  68. 33
      src/main/java/org/telegram/api/objects/ForceReplyKeyboard.java
  69. 28
      src/main/java/org/telegram/api/objects/Location.java
  70. 181
      src/main/java/org/telegram/api/objects/Message.java
  71. 104
      src/main/java/org/telegram/api/objects/PhotoSize.java
  72. 13
      src/main/java/org/telegram/api/objects/ReplyKeyboard.java
  73. 34
      src/main/java/org/telegram/api/objects/ReplyKeyboardHide.java
  74. 68
      src/main/java/org/telegram/api/objects/ReplyKeyboardMarkup.java
  75. 84
      src/main/java/org/telegram/api/objects/Sticker.java
  76. 74
      src/main/java/org/telegram/api/objects/Update.java
  77. 94
      src/main/java/org/telegram/api/objects/User.java
  78. 104
      src/main/java/org/telegram/api/objects/UserProfilePhotos.java
  79. 60
      src/main/java/org/telegram/api/objects/Video.java
  80. 48
      src/main/java/org/telegram/api/objects/Voice.java
  81. 46
      src/main/java/org/telegram/methods/ForwardMessage.java
  82. 12
      src/main/java/org/telegram/methods/GetMe.java
  83. 57
      src/main/java/org/telegram/methods/GetUserProfilePhotos.java
  84. 31
      src/main/java/org/telegram/methods/SendChatAction.java
  85. 24
      src/main/java/org/telegram/methods/SendLocation.java
  86. 68
      src/main/java/org/telegram/methods/SendMessage.java
  87. 17
      src/main/java/org/telegram/methods/SetWebhook.java
  88. 2
      src/main/java/org/telegram/services/TransifexService.java
  89. 98
      src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java
  90. 57
      src/main/java/org/telegram/updateshandlers/FilesHandlers.java
  91. 26
      src/main/java/org/telegram/updateshandlers/SentCallback.java
  92. 38
      src/main/java/org/telegram/updateshandlers/TransifexHandlers.java
  93. 15
      src/main/java/org/telegram/updateshandlers/UpdatesCallback.java
  94. 424
      src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
  95. 33
      src/main/java/org/telegram/updatesreceivers/RestApi.java
  96. 22
      src/main/java/org/telegram/updatesreceivers/UpdatesThread.java
  97. 32
      src/main/java/org/telegram/updatesreceivers/Webhook.java
  98. 52
      src/main/resources/localisation/strings.properties

18
.idea/dataSources.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" hash="1958173603">
<data-source source="LOCAL" name="MySQL - telegrambot@localhost" uuid="2ce462a4-6cfe-4867-8503-3b86bc273db1">
<driver-ref>mysql</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306/telegrambot</jdbc-url>
<driver-properties>
<property name="zeroDateTimeBehavior" value="convertToNull" />
<property name="tinyInt1isBit" value="false" />
<property name="characterEncoding" value="utf8" />
<property name="characterSetResults" value="utf8" />
<property name="yearIsDateType" value="false" />
</driver-properties>
</data-source>
</component>
</project>

8
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.5.1"> <library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.1/jackson-annotations-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.4/jackson-annotations-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.1/jackson-annotations-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.4/jackson-annotations-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.1/jackson-annotations-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.5.4/jackson-annotations-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.5.1"> <library name="Maven: com.fasterxml.jackson.core:jackson-core:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.1/jackson-core-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.4/jackson-core-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.1/jackson-core-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.4/jackson-core-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.1/jackson-core-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.5.4/jackson-core-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.5.1"> <library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.1/jackson-databind-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.4/jackson-databind-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.1/jackson-databind-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.4/jackson-databind-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.1/jackson-databind-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.5.4/jackson-databind-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_base_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_base_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.5.1"> <library name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.1/jackson-jaxrs-base-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.4/jackson-jaxrs-base-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.1/jackson-jaxrs-base-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.4/jackson-jaxrs-base-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.1/jackson-jaxrs-base-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.5.4/jackson-jaxrs-base-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_json_provider_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_jaxrs_jackson_jaxrs_json_provider_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.1"> <library name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.1/jackson-jaxrs-json-provider-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.4/jackson-jaxrs-json-provider-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.1/jackson-jaxrs-json-provider-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.4/jackson-jaxrs-json-provider-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.1/jackson-jaxrs-json-provider-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.5.4/jackson-jaxrs-json-provider-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_5_1.xml → .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_5_4.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.5.1"> <library name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.5.4">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.1/jackson-module-jaxb-annotations-2.5.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.4/jackson-module-jaxb-annotations-2.5.4.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.1/jackson-module-jaxb-annotations-2.5.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.4/jackson-module-jaxb-annotations-2.5.4-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.1/jackson-module-jaxb-annotations-2.5.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.4/jackson-module-jaxb-annotations-2.5.4-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__mysql_mysql_connector_java_5_1_35.xml → .idea/libraries/Maven__mysql_mysql_connector_java_5_1_36.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: mysql:mysql-connector-java:5.1.35"> <library name="Maven: mysql:mysql-connector-java:5.1.36">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5.xml → .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_1.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpclient:4.5"> <library name="Maven: org.apache.httpcomponents:httpclient:4.5.1">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.1/httpclient-4.5.1.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.1/httpclient-4.5.1-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.1/httpclient-4.5.1-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_1.xml → .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_3.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.1"> <library name="Maven: org.apache.httpcomponents:httpcore:4.4.3">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.3/httpcore-4.4.3.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.3/httpcore-4.4.3-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.3/httpcore-4.4.3-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5.xml → .idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_1.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpmime:4.5"> <library name="Maven: org.apache.httpcomponents:httpmime:4.5.1">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5.1/httpmime-4.5.1.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5.1/httpmime-4.5.1-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5.1/httpmime-4.5.1-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_grizzly_grizzly_framework_2_3_19.xml → .idea/libraries/Maven__org_glassfish_grizzly_grizzly_framework_2_3_22.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.grizzly:grizzly-framework:2.3.19"> <library name="Maven: org.glassfish.grizzly:grizzly-framework:2.3.22">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.19/grizzly-framework-2.3.19.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.22/grizzly-framework-2.3.22.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.19/grizzly-framework-2.3.19-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.22/grizzly-framework-2.3.22-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.19/grizzly-framework-2.3.19-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-framework/2.3.22/grizzly-framework-2.3.22-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_2_3_19.xml → .idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_2_3_22.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.grizzly:grizzly-http:2.3.19"> <library name="Maven: org.glassfish.grizzly:grizzly-http:2.3.22">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.19/grizzly-http-2.3.19.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.22/grizzly-http-2.3.22.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.19/grizzly-http-2.3.19-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.22/grizzly-http-2.3.22-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.19/grizzly-http-2.3.19-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http/2.3.22/grizzly-http-2.3.22-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_server_2_3_19.xml → .idea/libraries/Maven__org_glassfish_grizzly_grizzly_http_server_2_3_22.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.19"> <library name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.22">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.19/grizzly-http-server-2.3.19.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.22/grizzly-http-server-2.3.22.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.19/grizzly-http-server-2.3.19-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.22/grizzly-http-server-2.3.22-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.19/grizzly-http-server-2.3.19-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/grizzly/grizzly-http-server/2.3.22/grizzly-http-server-2.3.22-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b12.xml → .idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_4_0_b31.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b12"> <library name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b31">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b12/aopalliance-repackaged-2.4.0-b12.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b31/aopalliance-repackaged-2.4.0-b31.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b12/aopalliance-repackaged-2.4.0-b12-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b31/aopalliance-repackaged-2.4.0-b31-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b12/aopalliance-repackaged-2.4.0-b12-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b31/aopalliance-repackaged-2.4.0-b31-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b12.xml → .idea/libraries/Maven__org_glassfish_hk2_external_javax_inject_2_4_0_b31.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b12"> <library name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b31">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b12/javax.inject-2.4.0-b12.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b31/javax.inject-2.4.0-b31.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b12/javax.inject-2.4.0-b12-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b31/javax.inject-2.4.0-b31-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b12/javax.inject-2.4.0-b12-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/javax.inject/2.4.0-b31/javax.inject-2.4.0-b31-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b12.xml → .idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_4_0_b31.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b12"> <library name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b31">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b12/hk2-api-2.4.0-b12.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b31/hk2-api-2.4.0-b31.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b12/hk2-api-2.4.0-b12-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b31/hk2-api-2.4.0-b31-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b12/hk2-api-2.4.0-b12-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.4.0-b31/hk2-api-2.4.0-b31-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b12.xml → .idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_4_0_b31.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b12"> <library name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b31">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b12/hk2-locator-2.4.0-b12.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b31/hk2-locator-2.4.0-b31.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b12/hk2-locator-2.4.0-b12-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b31/hk2-locator-2.4.0-b31-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b12/hk2-locator-2.4.0-b12-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.4.0-b31/hk2-locator-2.4.0-b31-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b12.xml → .idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_4_0_b31.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b12"> <library name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b31">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b12/hk2-utils-2.4.0-b12.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b31/hk2-utils-2.4.0-b31.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b12/hk2-utils-2.4.0-b12-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b31/hk2-utils-2.4.0-b31-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b12/hk2-utils-2.4.0-b12-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.4.0-b31/hk2-utils-2.4.0-b31-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_bundles_repackaged_jersey_guava_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.18"> <library name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.18/jersey-guava-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.21/jersey-guava-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.18/jersey-guava-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.21/jersey-guava-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.18/jersey-guava-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.21/jersey-guava-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_grizzly2_http_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.18"> <library name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.18/jersey-container-grizzly2-http-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.21/jersey-container-grizzly2-http-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.18/jersey-container-grizzly2-http-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.21/jersey-container-grizzly2-http-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.18/jersey-container-grizzly2-http-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.21/jersey-container-grizzly2-http-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-client:2.18"> <library name="Maven: org.glassfish.jersey.core:jersey-client:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.18/jersey-client-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.21/jersey-client-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.18/jersey-client-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.21/jersey-client-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.18/jersey-client-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.21/jersey-client-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-common:2.18"> <library name="Maven: org.glassfish.jersey.core:jersey-common:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.18/jersey-common-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.21/jersey-common-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.18/jersey-common-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.21/jersey-common-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.18/jersey-common-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.21/jersey-common-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-server:2.18"> <library name="Maven: org.glassfish.jersey.core:jersey-server:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.18/jersey-server-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.21/jersey-server-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.18/jersey-server-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.21/jersey-server-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.18/jersey-server-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.21/jersey-server-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_ext_jersey_entity_filtering_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.ext:jersey-entity-filtering:2.18"> <library name="Maven: org.glassfish.jersey.ext:jersey-entity-filtering:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.18/jersey-entity-filtering-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.21/jersey-entity-filtering-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.18/jersey-entity-filtering-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.21/jersey-entity-filtering-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.18/jersey-entity-filtering-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/ext/jersey-entity-filtering/2.21/jersey-entity-filtering-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.18"> <library name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.18/jersey-media-jaxb-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.21/jersey-media-jaxb-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.18/jersey-media-jaxb-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.21/jersey-media-jaxb-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.18/jersey-media-jaxb-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.21/jersey-media-jaxb-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

8
.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_18.xml → .idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_jackson_2_21.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.glassfish.jersey.media:jersey-media-json-jackson:2.18"> <library name="Maven: org.glassfish.jersey.media:jersey-media-json-jackson:2.21">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.18/jersey-media-json-jackson-2.18.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.21/jersey-media-json-jackson-2.21.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.18/jersey-media-json-jackson-2.18-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.21/jersey-media-json-jackson-2.21-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.18/jersey-media-json-jackson-2.18-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-jackson/2.21/jersey-media-json-jackson-2.21-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

13
.idea/libraries/Maven__org_jsoup_jsoup_1_8_2.xml

@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: org.jsoup:jsoup:1.8.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.2/jsoup-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.2/jsoup-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.2/jsoup-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>

13
.idea/libraries/Maven__org_jsoup_jsoup_1_8_3.xml

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.jsoup:jsoup:1.8.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.3/jsoup-1.8.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.3/jsoup-1.8.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.8.3/jsoup-1.8.3-sources.jar!/" />
</SOURCES>
</library>
</component>

1356
.idea/workspace.xml

File diff suppressed because it is too large

56
BotAPi.iml

@ -11,33 +11,33 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.21" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b12" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b31" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.19" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.22" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http:2.3.19" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http:2.3.22" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-framework:2.3.19" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-framework:2.3.22" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-common:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-common:2.21" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.2" level="project" /> <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.2" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.21" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b12" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b31" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b12" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b31" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b12" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b31" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b12" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b31" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.18.1-GA" level="project" /> <orderEntry type="library" name="Maven: org.javassist:javassist:3.18.1-GA" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.1" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.1" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-server:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-server:2.21" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-client:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-client:2.21" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.21" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" /> <orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" /> <orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-json-jackson:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-json-jackson:2.21" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.ext:jersey-entity-filtering:2.18" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.ext:jersey-entity-filtering:2.21" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.5.1" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.5.4" level="project" />
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-bundle:1.19" level="project" /> <orderEntry type="library" name="Maven: com.sun.jersey:jersey-bundle:1.19" level="project" />
<orderEntry type="library" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" /> <orderEntry type="library" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-grizzly2-servlet:1.19" level="project" /> <orderEntry type="library" name="Maven: com.sun.jersey:jersey-grizzly2-servlet:1.19" level="project" />
@ -48,13 +48,13 @@
<orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.0.1" level="project" /> <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-servlet:1.19" level="project" /> <orderEntry type="library" name="Maven: com.sun.jersey:jersey-servlet:1.19" level="project" />
<orderEntry type="library" name="Maven: org.json:json:20141113" level="project" /> <orderEntry type="library" name="Maven: org.json:json:20141113" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.3" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" /> <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" /> <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5" level="project" /> <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.36" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.35" level="project" /> <orderEntry type="library" name="Maven: org.jsoup:jsoup:1.8.3" level="project" />
<orderEntry type="library" name="Maven: org.jsoup:jsoup:1.8.2" level="project" />
</component> </component>
</module> </module>

16
pom.xml

@ -11,7 +11,8 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jersey.version>2.18</jersey.version> <jersey.version>2.21</jersey.version>
<httpcompontents.version>4.5.1</httpcompontents.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@ -51,11 +52,6 @@
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20141113</version> <version>20141113</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
@ -64,22 +60,22 @@
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
<version>4.5</version> <version>${httpcompontents.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId> <artifactId>httpmime</artifactId>
<version>4.5</version> <version>${httpcompontents.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version> <version>5.1.36</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jsoup</groupId> <groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId> <artifactId>jsoup</artifactId>
<version>1.8.2</version> <version>1.8.3</version>
</dependency> </dependency>
</dependencies> </dependencies>

12
src/main/java/org/telegram/BotConfig.java

@ -7,8 +7,12 @@ package org.telegram;
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class BotConfig { public class BotConfig {
public static final String TOKENWEATHER = "<BOT TOKEN>"; public static final String TOKENWEATHER = "<bot-token>";
public static final String TOKENTRANSIFEX = "<BOT TOKEN>"; public static final String USERNAMEWEATHER = "weatherbot";
public static final String TOKENFILES = "<BOT TOKEN>"; public static final String TOKENTRANSIFEX = "<bot-token>";
public static final String TOKENDIRECTIONS = "<BOT TOKEN>"; public static final String USERNAMETRANSIFEX = "TGlanguagesbot";
public static final String TOKENFILES = "<bot-token>";
public static final String USERNAMEFILES = "filesbot";
public static final String TOKENDIRECTIONS = "<bot-token>";
public static final String USERNAMEDIRECTIONS = "directionsbot";
} }

7
src/main/java/org/telegram/BuildVars.java

@ -9,8 +9,11 @@ package org.telegram;
public class BuildVars { public class BuildVars {
public static final Boolean debug = true; public static final Boolean debug = true;
public static final Boolean useWebHook = true; public static final Boolean useWebHook = true;
public static final String BASEWEBHOOKURL = "http://YOUREXTERNALADDRES"; public static final int PORT = 8443;
public static final String INTERNALWEBHOOKURL = "http://localhost"; public static final String EXTERNALWEBHOOKURL = "your-external-url:" + PORT;
public static final String INTERNALWEBHOOKURL = "your-internal-url:" + PORT;
public static final String pathToCertificatePublicKey = "path/to/my/certkey.pem";
public static final String certificatePublicKeyFileName = "certkey.pem";
public static final String OPENWEATHERAPIKEY = "<your-api-key>"; public static final String OPENWEATHERAPIKEY = "<your-api-key>";

29
src/main/java/org/telegram/Main.java

@ -1,7 +1,10 @@
package org.telegram; package org.telegram;
import org.telegram.updateshandlers.*; import org.telegram.updateshandlers.*;
import org.telegram.updatesreceivers.UpdatesThread; import org.telegram.updatesreceivers.Webhook;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -10,10 +13,26 @@ import org.telegram.updatesreceivers.UpdatesThread;
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class Main { public class Main {
private static Webhook webhook;
public static void main(String[] args) { public static void main(String[] args) {
UpdatesCallback weatherBot = new WeatherHandlers();
UpdatesCallback transifexBot = new TransifexHandlers(); if (BuildVars.useWebHook) {
UpdatesCallback filesBot = new FilesHandlers(); webhook = new Webhook();
UpdatesCallback directionsBot = new DirectionsHandlers(); }
initBots();
if (BuildVars.useWebHook) {
webhook.startDebugServer();
//webhook.startServer();
}
}
private static void initBots() {
UpdatesCallback weatherBot = new WeatherHandlers(webhook);
UpdatesCallback transifexBot = new TransifexHandlers(webhook);
UpdatesCallback filesBot = new FilesHandlers(webhook);
UpdatesCallback directionsBot = new DirectionsHandlers(webhook);
} }
} }

108
src/main/java/org/telegram/SenderHelper.java

@ -8,6 +8,7 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.entity.BufferedHttpEntity; import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
@ -15,15 +16,20 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair; import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.Message; import org.telegram.api.objects.Message;
import org.telegram.methods.*; import org.telegram.api.methods.*;
import org.telegram.services.BotLogger; import org.telegram.services.BotLogger;
import org.telegram.updateshandlers.SentCallback;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InvalidObjectException; import java.io.InvalidObjectException;
import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -33,46 +39,7 @@ import java.util.List;
*/ */
public class SenderHelper { public class SenderHelper {
private static volatile BotLogger log = BotLogger.getLogger(SenderHelper.class.getName()); private static volatile BotLogger log = BotLogger.getLogger(SenderHelper.class.getName());
private static final ExecutorService exe = Executors.newSingleThreadExecutor();
public static Message SendMessage(SendMessage message, String botToken) {
try {
CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
String url = Constants.BASEURL + botToken + "/" + SendMessage.PATH;
HttpPost httppost = new HttpPost(url);
httppost.addHeader("Content-type", "application/x-www-form-urlencoded");
httppost.addHeader("charset", "UTF-8");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(SendMessage.CHATID_FIELD, message.getChatId().toString()));
nameValuePairs.add(new BasicNameValuePair(SendMessage.TEXT_FIELD, message.getText()));
if (message.getDisableWebPagePreview() != null) {
nameValuePairs.add(new BasicNameValuePair(SendMessage.DISABLEWEBPAGEPREVIEW_FIELD, message.getDisableWebPagePreview().toString()));
}
if (message.getReplayMarkup() != null) {
nameValuePairs.add(new BasicNameValuePair(SendMessage.REPLYMARKUP_FIELD, message.getReplayMarkup().toJson().toString()));
}
if (message.getReplayToMessageId() != null) {
nameValuePairs.add(new BasicNameValuePair(SendMessage.REPLYTOMESSAGEID_FIELD, message.getReplayToMessageId().toString()));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
log.debug(httppost.toString());
log.debug(nameValuePairs.toString());
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
String responseContent = EntityUtils.toString(buf, "UTF-8");
JSONObject jsonObject = new JSONObject(responseContent);
if (!jsonObject.getBoolean("ok")) {
throw new InvalidObjectException(jsonObject.toString());
}
JSONObject jsonMessage = jsonObject.getJSONObject("result");
return new Message(jsonMessage);
} catch (IOException e) {
log.error(e);
return null;
}
}
public static void SendDocument(SendDocument sendDocument, String botToken) { public static void SendDocument(SendDocument sendDocument, String botToken) {
try { try {
@ -253,21 +220,68 @@ public class SenderHelper {
try { try {
CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build(); CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
String url = Constants.BASEURL + botToken + "/" + SetWebhook.PATH; String url = Constants.BASEURL + botToken + "/" + SetWebhook.PATH;
HttpPost httppost = new HttpPost(url); HttpPost httppost = new HttpPost(url);
httppost.addHeader("Content-type", "application/x-www-form-urlencoded"); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
httppost.addHeader("charset", "UTF-8"); builder.addTextBody(SetWebhook.URL_FIELD, webHookURL);
List<NameValuePair> nameValuePairs = new ArrayList<>(); if (BuildVars.pathToCertificatePublicKey != null) {
nameValuePairs.add(new BasicNameValuePair(SetWebhook.URL_FIELD, webHookURL)); builder.addBinaryBody(SetWebhook.CERTIFICATE_FIELD, new File(BuildVars.pathToCertificatePublicKey), ContentType.APPLICATION_OCTET_STREAM, BuildVars.certificatePublicKeyFileName);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); }
HttpEntity multipart = builder.build();
httppost.setEntity(multipart);
CloseableHttpResponse response = httpclient.execute(httppost); CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity(); HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
String responseContent = EntityUtils.toString(buf, "UTF-8");
log.debug(responseContent);
} catch (IOException e) {
log.error(e);
}
}
public static void SendApiMethod(BotApiMethod method, String botToken) {
try {
CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
String url = Constants.BASEURL + botToken + "/" + method.getPath();
HttpPost httppost = new HttpPost(url);
httppost.addHeader("charset", "UTF-8");
httppost.setEntity(new StringEntity(method.toJson().toString(), ContentType.APPLICATION_JSON));
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht); BufferedHttpEntity buf = new BufferedHttpEntity(ht);
String responseContent = EntityUtils.toString(buf, "UTF-8"); String responseContent = EntityUtils.toString(buf, "UTF-8");
JSONObject jsonObject = new JSONObject(responseContent);
if (!jsonObject.getBoolean("ok")) {
throw new InvalidObjectException(jsonObject.toString());
}
} catch (IOException e) { } catch (IOException e) {
log.error(e); log.error(e);
} }
}
public static void SendApiMethodAsync(BotApiMethod method, String botToken, SentCallback callback) {
exe.submit(() -> {
try {
CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
String url = Constants.BASEURL + botToken + "/" + method.getPath();
HttpPost httppost = new HttpPost(url);
httppost.addHeader("charset", "UTF-8");
httppost.setEntity(new StringEntity(method.toJson().toString(), ContentType.APPLICATION_JSON));
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
String responseContent = EntityUtils.toString(buf, "UTF-8");
JSONObject jsonObject = new JSONObject(responseContent);
if (!jsonObject.getBoolean("ok")) {
callback.onError(method, jsonObject);
}
callback.onResult(method, jsonObject);
} catch (IOException e) {
log.error(e);
}
});
} }
} }

38
src/main/java/org/telegram/api/Contact.java

@ -1,38 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a phone contact.
* @date 20 of June of 2015
*/
public class Contact {
public static final String PHONENUMBER_FIELD = "phone_number";
@JsonProperty(PHONENUMBER_FIELD)
private String phoneNumber; ///< Contact's phone number
public static final String FIRSTNAME_FIELD = "first_name";
@JsonProperty(FIRSTNAME_FIELD)
private String firstName; ///< Contact's first name
public static final String LASTNAME_FIELD = "last_name";
@JsonProperty(LASTNAME_FIELD)
private String lastName; ///< Optional. Contact's last name
public static final String USERID_FIELD = "user_id";
@JsonProperty(USERID_FIELD)
private Integer userID; ///< Optional. Contact's user identifier in Telegram
public Contact() {
super();
}
public Contact(JSONObject jsonObject) {
super();
this.phoneNumber = jsonObject.getString(PHONENUMBER_FIELD);
this.firstName = jsonObject.getString(FIRSTNAME_FIELD);
this.lastName = jsonObject.optString(LASTNAME_FIELD, "");
this.userID = jsonObject.optInt(USERID_FIELD, 0);
}
}

70
src/main/java/org/telegram/api/PhotoSize.java

@ -1,70 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents one size of a photo or a file / sticker thumbnail.
* @date 20 of June of 2015
*/
public class PhotoSize {
public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD)
private String fileId; ///< Unique identifier for this file
public static final String WIDTH_FIELD = "width";
@JsonProperty(WIDTH_FIELD)
private Integer width; ///< Photo width
public static final String HEIGHT_FIELD = "height";
@JsonProperty(HEIGHT_FIELD)
private Integer height; ///< Photo height
public static final String FILESIZE_FIELD = "file_size";
@JsonProperty(FILESIZE_FIELD)
private Integer fileSize; ///< Optional. File size
public PhotoSize() {
super();
}
public PhotoSize(JSONObject jsonObject) {
super();
this.fileId = jsonObject.optString(FILEID_FIELD, "");
this.width = jsonObject.optInt(WIDTH_FIELD, 0);
this.height = jsonObject.optInt(HEIGHT_FIELD, 0);
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0);
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
}

13
src/main/java/org/telegram/api/ReplyKeyboard.java

@ -1,13 +0,0 @@
package org.telegram.api;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Reply keyboard abstract type
* @date 20 of June of 2015
*/
public interface ReplyKeyboard {
JSONObject toJson();
}

46
src/main/java/org/telegram/api/Sticker.java

@ -1,46 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a sticker.
* @date 20 of June of 2015
*/
public class Sticker {
public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD)
private String fileId; ///< Unique identifier for this file
public static final String WIDTH_FIELD = "width";
@JsonProperty(WIDTH_FIELD)
private Integer width; ///< Sticker width
public static final String HEIGHT_FIELD = "height";
@JsonProperty(HEIGHT_FIELD)
private Integer height; ///< Sticker height
public static final String THUMB_FIELD = "thumb";
@JsonProperty(THUMB_FIELD)
private PhotoSize thumb; ///< Sticker thumbnail in .webp or .jpg format
public static final String FILESIZE_FIELD = "file_size";
@JsonProperty(FILESIZE_FIELD)
private Integer fileSize; ///< Optional. File size
public Sticker() {
super();
}
public Sticker(JSONObject jsonObject) {
super();
this.fileId = jsonObject.getString(FILEID_FIELD);
this.width = jsonObject.getInt(WIDTH_FIELD);
this.height = jsonObject.getInt(HEIGHT_FIELD);
if (jsonObject.has(THUMB_FIELD)) {
this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD));
} else {
this.thumb = null;
}
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0);
}
}

55
src/main/java/org/telegram/api/Update.java

@ -1,55 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.json.JSONObject;
import sun.print.UnixPrintJob;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief TODO
* @date 20 of June of 2015
*/
public class Update {
/*
update_id Integer
message Message
*/
public static final String UPDATEID_FIELD = "update_id";
/**
* The updates unique identifier.
* Update identifiers start from a certain positive number and increase sequentially.
* This ID becomes especially handy if youre using Webhooks,
* since it allows you to ignore repeated updates or to restore the
* correct update sequence, should they get out of order.
*/
@JsonProperty(UPDATEID_FIELD)
private Integer updateId;
public static final String MESSAGE_FIELD = "message";
@JsonProperty(MESSAGE_FIELD)
private Message message; ///< Optional. New incoming message of any kind — text, photo, sticker, etc.
public Update() {
super();
}
public Update(JSONObject jsonObject) {
super();
this.updateId = jsonObject.getInt(UPDATEID_FIELD);
JSONObject messageJSON = jsonObject.optJSONObject(MESSAGE_FIELD);
if (messageJSON == null) {
this.message = null;
} else {
this.message = new Message(messageJSON);
}
}
public Integer getUpdateId() {
return updateId;
}
public Message getMessage() {
return message;
}
}

54
src/main/java/org/telegram/api/User.java

@ -1,54 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a Telegram user or bot.
* @date 20 of June of 2015
*/
public class User {
public static final String ID_FIELD = "id";
@JsonProperty(ID_FIELD)
private Integer id; ///< Unique identifier for this user or bot
public static final String FIRSTNAME_FIELD = "first_name";
@JsonProperty(FIRSTNAME_FIELD)
private String firstName; ///< User‘s or bot’s first name
public static final String LASTNAME_FIELD = "last_name";
@JsonProperty(LASTNAME_FIELD)
private String lastName; ///< Optional. User‘s or bot’s last name
public static final String USERNAME_FIELD = "username";
@JsonProperty(USERNAME_FIELD)
private String userName; ///< Optional. User‘s or bot’s username
public User() {
super();
}
public User(JSONObject jsonObject) {
super();
this.id = jsonObject.getInt(ID_FIELD);
this.firstName = jsonObject.getString(FIRSTNAME_FIELD);
this.lastName = jsonObject.optString(LASTNAME_FIELD, "");
this.userName = jsonObject.optString(USERNAME_FIELD, "");
}
public Integer getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getUserName() {
return userName;
}
}

43
src/main/java/org/telegram/api/UserProfilePhotos.java

@ -1,43 +0,0 @@
package org.telegram.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represent a user's profile pictures.
* @date 22 of June of 2015
*/
public class UserProfilePhotos {
public static final String TOTALCOUNT_FIELD = "total_count";
@JsonProperty(TOTALCOUNT_FIELD)
private Integer totalCount; ///< Total number of profile pictures the target user has
public static final String PHOTOS_FIELD = "photos";
@JsonProperty(PHOTOS_FIELD)
private List<List<PhotoSize>> photos; ///< Requested profile pictures (in up to 4 sizes each)
public UserProfilePhotos() {
super();
}
public UserProfilePhotos(JSONObject jsonObject) {
super();
this.totalCount = jsonObject.getInt(TOTALCOUNT_FIELD);
this.photos = new ArrayList<>();
JSONArray photos = jsonObject.getJSONArray(PHOTOS_FIELD);
for (int i = 0; i < photos.length(); i++) {
JSONArray innerArray = photos.getJSONArray(i);
List<PhotoSize> innerPhotos = new ArrayList<>();
for (int j = 0; j < innerArray.length(); j ++) {
innerPhotos.add(new PhotoSize(innerArray.getJSONObject(j)));
}
this.photos.add(innerPhotos);
}
}
}

13
src/main/java/org/telegram/api/interfaces/BotApiObject.java

@ -0,0 +1,13 @@
package org.telegram.api.interfaces;
import com.fasterxml.jackson.databind.JsonSerializable;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief An object of Telegram Bots Api
* @date 07 of September of 2015
*/
public interface BotApiObject extends JsonSerializable {
}

18
src/main/java/org/telegram/api/interfaces/IToJson.java

@ -0,0 +1,18 @@
package org.telegram.api.interfaces;
import org.json.JSONObject;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Add conversion to JSON object
* @date 08 of September of 2015
*/
public interface IToJson {
/**
* Convert to json object
* @return JSONObject created in the conversion
*/
JSONObject toJson();
}

28
src/main/java/org/telegram/api/methods/BotApiMethod.java

@ -0,0 +1,28 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.databind.JsonSerializable;
import org.json.JSONObject;
import org.telegram.api.interfaces.IToJson;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief A method of Telegram Bots Api that is fully supported in json format
* @date 07 of September of 2015
*/
public abstract class BotApiMethod<T> implements JsonSerializable, IToJson {
protected static final String METHOD_FIELD = "method";
/**
* Getter for method path (that is the same as method name)
* @return Method path
*/
public abstract String getPath();
/**
* Deserialize a json answer to the response type to a method
* @param answer Json answer received
* @return Answer for the method
*/
public abstract T deserializeResponse(JSONObject answer);
}

2
src/main/java/org/telegram/methods/Constants.java → src/main/java/org/telegram/api/methods/Constants.java

@ -1,4 +1,4 @@
package org.telegram.methods; package org.telegram.api.methods;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

98
src/main/java/org/telegram/api/methods/ForwardMessage.java

@ -0,0 +1,98 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.Message;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send text messages. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class ForwardMessage extends BotApiMethod<Message> {
public static final String PATH = "forwardmessage";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String FROMCHATID_FIELD = "from_chat_id";
private Integer fromChatId; ///< Unique identifier for the chat where the original message was sent — User or GroupChat id
public static final String MESSAGEID_FIELD = "message_id";
private Integer messageId; ///< Unique message identifier
public ForwardMessage() {
super();
}
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public Integer getFromChatId() {
return fromChatId;
}
public void setFromChatId(Integer fromChatId) {
this.fromChatId = fromChatId;
}
public Integer getMessageId() {
return messageId;
}
public void setMessageId(Integer messageId) {
this.messageId = messageId;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeNumberField(FROMCHATID_FIELD, fromChatId);
gen.writeNumberField(MESSAGEID_FIELD, messageId);
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeNumberField(FROMCHATID_FIELD, fromChatId);
gen.writeNumberField(MESSAGEID_FIELD, messageId);
gen.writeEndObject();
gen.flush();
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(CHATID_FIELD, chatId);
jsonObject.put(FROMCHATID_FIELD, fromChatId);
jsonObject.put(MESSAGEID_FIELD, messageId);
return jsonObject;
}
@Override
public String getPath() {
return PATH;
}
@Override
public Message deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new Message(answer.getJSONObject("result"));
}
return null;
}
}

79
src/main/java/org/telegram/api/methods/GetFile.java

@ -0,0 +1,79 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.File;
import org.telegram.api.objects.Message;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to get basic info about a file and prepare it for downloading.
* For the moment, bots can download files of up to 20MB in size.
* On success, a File object is returned.
* The file can then be downloaded via the link https://api.telegram.org/file/bot<token>/<file_path>,
* where <file_path> is taken from the response.
* It is guaranteed that the link will be valid for at least 1 hour.
* When the link expires, a new one can be requested by calling getFile again.
* @date 20 of June of 2015
*/
public class GetFile extends BotApiMethod<File> {
public static final String PATH = "getfield";
public static final String FILEID_FIELD = "file_id";
private String fileId; ///< File identifier to get info about
public GetFile() {
super();
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeEndObject();
gen.flush();
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(FILEID_FIELD, fileId);
return jsonObject;
}
@Override
public String getPath() {
return PATH;
}
@Override
public File deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new File(answer.getJSONObject("result"));
}
return null;
}
}

52
src/main/java/org/telegram/api/methods/GetMe.java

@ -0,0 +1,52 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.User;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief A simple method for testing your bot's auth token. Requires no parameters.
* Returns basic information about the bot in form of a User object
* @date 20 of June of 2015
*/
public class GetMe extends BotApiMethod<User> {
public static final String PATH = "getme";
@Override
public JSONObject toJson() {
return new JSONObject();
}
@Override
public String getPath() {
return PATH;
}
@Override
public User deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new User(answer.getJSONObject("result"));
}
return null;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeEndObject();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeEndObject();
}
}

22
src/main/java/org/telegram/methods/GetUpdates.java → src/main/java/org/telegram/api/methods/GetUpdates.java

@ -1,4 +1,7 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.json.JSONObject;
import org.telegram.api.interfaces.IToJson;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -7,7 +10,7 @@ package org.telegram.methods;
* An Array of Update objects is returned. * An Array of Update objects is returned.
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class GetUpdates { public class GetUpdates implements IToJson {
public static final String PATH = "getupdates"; public static final String PATH = "getupdates";
public static final String OFFSET_FIELD = "offset"; public static final String OFFSET_FIELD = "offset";
@ -57,7 +60,18 @@ public class GetUpdates {
this.timeout = timeout; this.timeout = timeout;
} }
public String getUrlParams() { @Override
return "?" + OFFSET_FIELD + "=" + offset ; public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
if (offset != null) {
jsonObject.put(OFFSET_FIELD, offset);
}
if (limit != null) {
jsonObject.put(LIMIT_FIELD, limit);
}
if (timeout != null) {
jsonObject.put(TIMEOUT_FIELD, timeout);
}
return jsonObject;
} }
} }

111
src/main/java/org/telegram/api/methods/GetUserProfilePhotos.java

@ -0,0 +1,111 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.Message;
import org.telegram.api.objects.UserProfilePhotos;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to get a list of profile pictures for a user. Returns a UserProfilePhotos object.
* @date 20 of June of 2015
*/
public class GetUserProfilePhotos extends BotApiMethod<UserProfilePhotos> {
public static final String PATH = "getuserprofilephotos";
public static final String USERID_FIELD = "user_id";
private Integer userId; ///< Unique identifier of the target user
public static final String OFFSET_FIELD = "offset";
/**
* Sequential number of the first photo to be returned. By default, all photos are returned.
*/
private Integer offset;
public static final String LIMIT_FIELD = "limit";
/**
* Optional. Limits the number of photos to be retrieved. Values between 1100 are accepted. Defaults to 100.
*/
private Integer limit;
public GetUserProfilePhotos() {
super();
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getOffset() {
return offset;
}
public void setOffset(Integer offset) {
this.offset = offset;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(USERID_FIELD, userId);
jsonObject.put(OFFSET_FIELD, offset);
if (limit != null) {
jsonObject.put(LIMIT_FIELD, limit);
}
return jsonObject;
}
@Override
public String getPath() {
return PATH;
}
@Override
public UserProfilePhotos deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new UserProfilePhotos(answer.getJSONObject("result"));
}
return null;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(USERID_FIELD, userId);
gen.writeNumberField(OFFSET_FIELD, offset);
if (limit != null) {
gen.writeNumberField(LIMIT_FIELD, limit);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(USERID_FIELD, userId);
gen.writeNumberField(OFFSET_FIELD, offset);
if (limit != null) {
gen.writeNumberField(LIMIT_FIELD, limit);
}
gen.writeEndObject();
gen.flush();
}
}

69
src/main/java/org/telegram/methods/SendAudio.java → src/main/java/org/telegram/api/methods/SendAudio.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -32,8 +32,73 @@ public class SendAudio {
private String performer; ///< Optional. Performer of sent audio private String performer; ///< Optional. Performer of sent audio
public static final String TITLE_FIELD = "title"; public static final String TITLE_FIELD = "title";
private String title; ///< Optional. Title of sent audio private String title; ///< Optional. Title of sent audio
private boolean isNewAudio;
private String audioName;
public SendAudio() { public SendAudio() {
super(); super();
} }
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public String getAudio() {
return audio;
}
public void setAudio(String audio) {
this.audio = audio;
this.isNewAudio = false;
}
public void setNewAudio(String audio, String audioName) {
this.audio = audio;
this.isNewAudio = true;
this.audioName = audioName;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
public void setReplayToMessageId(Integer replayToMessageId) {
this.replayToMessageId = replayToMessageId;
}
public ReplyKeyboard getReplayMarkup() {
return replayMarkup;
}
public void setReplayMarkup(ReplyKeyboard replayMarkup) {
this.replayMarkup = replayMarkup;
}
public String getPerformer() {
return performer;
}
public void setPerformer(String performer) {
this.performer = performer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isNewAudio() {
return isNewAudio;
}
public String getAudioName() {
return audioName;
}
} }

89
src/main/java/org/telegram/api/methods/SendChatAction.java

@ -0,0 +1,89 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method when you need to tell the user that something is happening on the bot's side.
* The status is set for 5 seconds or less (when a message arrives from your bot,
* Telegram clients clear its typing status).
* @date 20 of June of 2015
*/
public class SendChatAction extends BotApiMethod<Boolean>{
public static final String PATH = "sendChatAction";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String ACTION_FIELD = "action";
/**
* Type of action to broadcast.
* Choose one, depending on what the user is about to receive:
* 'typing' for text messages
* 'upload_photo' for photos
* 'record_video' or 'upload_video' for videos
* 'record_audio' or 'upload_audio' for audio files
* 'upload_document' for general files,
* 'find_location' for location data.
*/
private String action;
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
@Override
public String getPath() {
return PATH;
}
@Override
public Boolean deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return answer.getBoolean("result");
}
return null;
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(CHATID_FIELD, chatId);
jsonObject.put(ACTION_FIELD, action);
return jsonObject;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeStringField(ACTION_FIELD, action);
gen.writeEndObject();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeStringField(ACTION_FIELD, action);
gen.writeEndObject();
}
}

4
src/main/java/org/telegram/methods/SendDocument.java → src/main/java/org/telegram/api/methods/SendDocument.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

137
src/main/java/org/telegram/api/methods/SendLocation.java

@ -0,0 +1,137 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.Message;
import org.telegram.api.objects.ReplyKeyboard;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send point on the map. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class SendLocation extends BotApiMethod<Message> {
public static final String PATH = "sendlocation";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String LATITUDE_FIELD = "latitude";
private Float latitude; ///< Latitude of location
public static final String LONGITUDE_FIELD = "longitude";
private Float longitude; ///< Longitude of location
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
public static final String REPLYMARKUP_FIELD = "reply_markup";
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public Float getLatitude() {
return latitude;
}
public void setLatitude(Float latitude) {
this.latitude = latitude;
}
public Float getLongitude() {
return longitude;
}
public void setLongitude(Float longitude) {
this.longitude = longitude;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
public void setReplayToMessageId(Integer replayToMessageId) {
this.replayToMessageId = replayToMessageId;
}
public ReplyKeyboard getReplayMarkup() {
return replayMarkup;
}
public void setReplayMarkup(ReplyKeyboard replayMarkup) {
this.replayMarkup = replayMarkup;
}
@Override
public String getPath() {
return PATH;
}
@Override
public Message deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new Message(answer.getJSONObject("result"));
}
return null;
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(CHATID_FIELD, chatId);
jsonObject.put(LATITUDE_FIELD, latitude);
jsonObject.put(LONGITUDE_FIELD, longitude);
if (replayToMessageId != null) {
jsonObject.put(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
jsonObject.put(REPLYMARKUP_FIELD, replayMarkup.toJson());
}
return jsonObject;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeNumberField(LATITUDE_FIELD, latitude);
gen.writeNumberField(LONGITUDE_FIELD, longitude);
if (replayToMessageId != null) {
gen.writeNumberField(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
gen.writeObjectField(REPLYMARKUP_FIELD, replayMarkup);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeNumberField(LATITUDE_FIELD, latitude);
gen.writeNumberField(LONGITUDE_FIELD, longitude);
if (replayToMessageId != null) {
gen.writeNumberField(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
gen.writeObjectField(REPLYMARKUP_FIELD, replayMarkup);
}
gen.writeEndObject();
gen.flush();
}
}

168
src/main/java/org/telegram/api/methods/SendMessage.java

@ -0,0 +1,168 @@
package org.telegram.api.methods;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.objects.Message;
import org.telegram.api.objects.ReplyKeyboard;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send text messages. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class SendMessage extends BotApiMethod<Message> {
public static final String PATH = "sendmessage";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String TEXT_FIELD = "text";
private String text; ///< Text of the message to be sent
public static final String PARSEMODE_FIELD = "parse_mode";
private String parseMode; ///< Optional. Send Markdown, if you want Telegram apps to show bold, italic and URL text in your bot's message.
public static final String DISABLEWEBPAGEPREVIEW_FIELD = "disable_web_page_preview";
private Boolean disableWebPagePreview; ///< Optional. Disables link previews for links in this message
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
public static final String REPLYMARKUP_FIELD = "reply_markup";
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
public SendMessage() {
super();
}
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
public void setReplayToMessageId(Integer replayToMessageId) {
this.replayToMessageId = replayToMessageId;
}
public ReplyKeyboard getReplayMarkup() {
return replayMarkup;
}
public void setReplayMarkup(ReplyKeyboard replayMarkup) {
this.replayMarkup = replayMarkup;
}
public Boolean getDisableWebPagePreview() {
return disableWebPagePreview;
}
public void setDisableWebPagePreview(Boolean disableWebPagePreview) {
this.disableWebPagePreview = disableWebPagePreview;
}
public void enableMarkdown(boolean enable) {
if (enable) {
this.parseMode = "Markdown";
} else {
this.parseMode = null;
}
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(CHATID_FIELD, chatId);
jsonObject.put(TEXT_FIELD, text);
if (parseMode != null) {
jsonObject.put(PARSEMODE_FIELD, parseMode);
}
if (disableWebPagePreview != null) {
jsonObject.put(DISABLEWEBPAGEPREVIEW_FIELD, disableWebPagePreview);
}
if (replayToMessageId != null) {
jsonObject.put(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
jsonObject.put(REPLYMARKUP_FIELD, replayMarkup.toJson());
}
return jsonObject;
}
@Override
public String getPath() {
return PATH;
}
@Override
public Message deserializeResponse(JSONObject answer) {
if (answer.getBoolean("ok")) {
return new Message(answer.getJSONObject("result"));
}
return null;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeStringField(TEXT_FIELD, text);
if (parseMode != null) {
gen.writeStringField(PARSEMODE_FIELD, parseMode);
}
if (disableWebPagePreview != null) {
gen.writeBooleanField(DISABLEWEBPAGEPREVIEW_FIELD, disableWebPagePreview);
}
if (replayToMessageId != null) {
gen.writeNumberField(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
gen.writeObjectField(REPLYMARKUP_FIELD, replayMarkup);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeNumberField(CHATID_FIELD, chatId);
gen.writeStringField(TEXT_FIELD, text);
if (parseMode != null) {
gen.writeStringField(PARSEMODE_FIELD, parseMode);
}
if (disableWebPagePreview != null) {
gen.writeBooleanField(DISABLEWEBPAGEPREVIEW_FIELD, disableWebPagePreview);
}
if (replayToMessageId != null) {
gen.writeNumberField(REPLYTOMESSAGEID_FIELD, replayToMessageId);
}
if (replayMarkup != null) {
gen.writeObjectField(REPLYMARKUP_FIELD, replayMarkup);
}
gen.writeEndObject();
gen.flush();
}
}

4
src/main/java/org/telegram/methods/SendPhoto.java → src/main/java/org/telegram/api/methods/SendPhoto.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

4
src/main/java/org/telegram/methods/SendSticker.java → src/main/java/org/telegram/api/methods/SendSticker.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

4
src/main/java/org/telegram/methods/SendVideo.java → src/main/java/org/telegram/api/methods/SendVideo.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

4
src/main/java/org/telegram/methods/SendVoice.java → src/main/java/org/telegram/api/methods/SendVoice.java

@ -1,6 +1,6 @@
package org.telegram.methods; package org.telegram.api.methods;
import org.telegram.api.ReplyKeyboard; import org.telegram.api.objects.ReplyKeyboard;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez

39
src/main/java/org/telegram/api/methods/SetWebhook.java

@ -0,0 +1,39 @@
package org.telegram.api.methods;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to specify a url and receive incoming updates via an outgoing webhook.
* Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url,
* containing a JSON-serialized Update. In case of an unsuccessful request,
* we will give up after a reasonable amount of attempts.
* @date 20 of June of 2015
*/
public class SetWebhook {
public static final String PATH = "setwebhook";
public static final String URL_FIELD = "url";
private String url; ///< Optional. HTTPS url to send updates to. Use an empty string to remove webhook integration
public static final String CERTIFICATE_FIELD = "certificate";
private String certificateFile; ///< Optional. Upload your public key certificate so that the root certificate in use can be checked
public SetWebhook() {
this.url = "";
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCertificateFile() {
return certificateFile;
}
public void setCertificateFile(String certificateFile) {
this.certificateFile = certificateFile;
}
}

68
src/main/java/org/telegram/api/Audio.java → src/main/java/org/telegram/api/objects/Audio.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -9,7 +15,7 @@ import org.json.JSONObject;
* @brief This object represents an audio file * @brief This object represents an audio file
* @date 16 of July of 2015 * @date 16 of July of 2015
*/ */
public class Audio { public class Audio implements BotApiObject {
public static final String FILEID_FIELD = "file_id"; public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD) @JsonProperty(FILEID_FIELD)
@ -38,10 +44,18 @@ public class Audio {
super(); super();
this.fileId = jsonObject.getString(FILEID_FIELD); this.fileId = jsonObject.getString(FILEID_FIELD);
this.duration = jsonObject.getInt(DURATION_FIELD); this.duration = jsonObject.getInt(DURATION_FIELD);
this.mimeType = jsonObject.optString(MIMETYPE_FIELD, ""); if (jsonObject.has(MIMETYPE_FIELD)) {
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0); this.mimeType = jsonObject.getString(MIMETYPE_FIELD);
this.title = jsonObject.optString(TITLE_FIELD, ""); }
this.performer = jsonObject.optString(PERFORMER_FIELD, ""); if (jsonObject.has(FILEID_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
}
if (jsonObject.has(TITLE_FIELD)) {
this.title = jsonObject.getString(TITLE_FIELD);
}
if (jsonObject.has(PERFORMER_FIELD)) {
this.performer = jsonObject.getString(PERFORMER_FIELD);
}
} }
public String getFileId() { public String getFileId() {
@ -91,4 +105,46 @@ public class Audio {
public void setPerformer(String performer) { public void setPerformer(String performer) {
this.performer = performer; this.performer = performer;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(DURATION_FIELD, duration);
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
if (title != null) {
gen.writeStringField(TITLE_FIELD, title);
}
if (performer != null) {
gen.writeStringField(PERFORMER_FIELD, performer);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(DURATION_FIELD, duration);
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
if (title != null) {
gen.writeStringField(TITLE_FIELD, title);
}
if (performer != null) {
gen.writeStringField(PERFORMER_FIELD, performer);
}
gen.writeEndObject();
gen.flush();
}
} }

54
src/main/java/org/telegram/api/Chat.java → src/main/java/org/telegram/api/objects/Chat.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -9,11 +15,14 @@ import org.json.JSONObject;
* @brief This object represents a Telegram chat with an user or a group * @brief This object represents a Telegram chat with an user or a group
* @date 24 of June of 2015 * @date 24 of June of 2015
*/ */
public class Chat { public class Chat implements BotApiObject {
public static final String ID_FIELD = "id"; public static final String ID_FIELD = "id";
@JsonProperty(ID_FIELD) @JsonProperty(ID_FIELD)
private Integer id; ///< Unique identifier for this chat private Integer id; ///< Unique identifier for this chat
public static final String TITLE_FIELD = "title";
@JsonProperty(TITLE_FIELD)
private String title; ///< Group name
public static final String FIRSTNAME_FIELD = "first_name"; public static final String FIRSTNAME_FIELD = "first_name";
@JsonProperty(FIRSTNAME_FIELD) @JsonProperty(FIRSTNAME_FIELD)
private String firstName; ///< User‘s or bot’s first name private String firstName; ///< User‘s or bot’s first name
@ -23,9 +32,6 @@ public class Chat {
public static final String USERNAME_FIELD = "username"; public static final String USERNAME_FIELD = "username";
@JsonProperty(USERNAME_FIELD) @JsonProperty(USERNAME_FIELD)
private String userName; ///< Optional. User‘s or bot’s username private String userName; ///< Optional. User‘s or bot’s username
public static final String TITLE_FIELD = "title";
@JsonProperty(TITLE_FIELD)
private String title; ///< Group name
public Chat() { public Chat() {
super(); super();
@ -36,8 +42,12 @@ public class Chat {
this.id = jsonObject.getInt(ID_FIELD); this.id = jsonObject.getInt(ID_FIELD);
if (this.id > 0) { if (this.id > 0) {
this.firstName = jsonObject.getString(FIRSTNAME_FIELD); this.firstName = jsonObject.getString(FIRSTNAME_FIELD);
this.lastName = jsonObject.optString(LASTNAME_FIELD, ""); if (jsonObject.has(LASTNAME_FIELD)) {
this.userName = jsonObject.optString(USERNAME_FIELD, ""); this.lastName = jsonObject.getString(LASTNAME_FIELD);
}
if (jsonObject.has(USERNAME_FIELD)) {
this.userName = jsonObject.getString(USERNAME_FIELD);
}
} else { } else {
this.title = jsonObject.getString(TITLE_FIELD); this.title = jsonObject.getString(TITLE_FIELD);
} }
@ -70,4 +80,34 @@ public class Chat {
public String getUserName() { public String getUserName() {
return userName; return userName;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(ID_FIELD, id);
if (id > 0) {
gen.writeStringField(FIRSTNAME_FIELD, firstName);
gen.writeStringField(LASTNAME_FIELD, lastName);
gen.writeStringField(USERNAME_FIELD, userName);
} else {
gen.writeStringField(TITLE_FIELD, title);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(ID_FIELD, id);
if (id > 0) {
gen.writeStringField(FIRSTNAME_FIELD, firstName);
gen.writeStringField(LASTNAME_FIELD, lastName);
gen.writeStringField(USERNAME_FIELD, userName);
} else {
gen.writeStringField(TITLE_FIELD, title);
}
gen.writeEndObject();
gen.flush();
}
} }

78
src/main/java/org/telegram/api/objects/Contact.java

@ -0,0 +1,78 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a phone contact.
* @date 20 of June of 2015
*/
public class Contact implements BotApiObject {
public static final String PHONENUMBER_FIELD = "phone_number";
@JsonProperty(PHONENUMBER_FIELD)
private String phoneNumber; ///< Contact's phone number
public static final String FIRSTNAME_FIELD = "first_name";
@JsonProperty(FIRSTNAME_FIELD)
private String firstName; ///< Contact's first name
public static final String LASTNAME_FIELD = "last_name";
@JsonProperty(LASTNAME_FIELD)
private String lastName; ///< Optional. Contact's last name
public static final String USERID_FIELD = "user_id";
@JsonProperty(USERID_FIELD)
private Integer userID; ///< Optional. Contact's user identifier in Telegram
public Contact() {
super();
}
public Contact(JSONObject jsonObject) {
super();
this.phoneNumber = jsonObject.getString(PHONENUMBER_FIELD);
this.firstName = jsonObject.getString(FIRSTNAME_FIELD);
if (jsonObject.has(LASTNAME_FIELD)) {
this.lastName = jsonObject.getString(LASTNAME_FIELD);
}
if (jsonObject.has(USERID_FIELD)) {
this.userID = jsonObject.getInt(USERID_FIELD);
}
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(PHONENUMBER_FIELD, phoneNumber);
gen.writeStringField(FIRSTNAME_FIELD, firstName);
if (lastName != null) {
gen.writeStringField(LASTNAME_FIELD, lastName);
}
if (userID != null) {
gen.writeNumberField(USERID_FIELD, userID);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(PHONENUMBER_FIELD, phoneNumber);
gen.writeStringField(FIRSTNAME_FIELD, firstName);
if (lastName != null) {
gen.writeStringField(LASTNAME_FIELD, lastName);
}
if (userID != null) {
gen.writeNumberField(USERID_FIELD, userID);
}
gen.writeEndObject();
gen.flush();
}
}

59
src/main/java/org/telegram/api/Document.java → src/main/java/org/telegram/api/objects/Document.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -10,7 +16,7 @@ import org.json.JSONObject;
* Telegram users can send files of any type of up to 1.5 GB in size. * Telegram users can send files of any type of up to 1.5 GB in size.
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class Document { public class Document implements BotApiObject {
public static final String FILEID_FIELD = "file_id"; public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD) @JsonProperty(FILEID_FIELD)
@ -37,12 +43,15 @@ public class Document {
if (jsonObject.has(THUMB_FIELD)) { if (jsonObject.has(THUMB_FIELD)) {
this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD)); this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD));
} }
else { if (jsonObject.has(FILENAME_FIELD)) {
this.thumb = null; this.fileName = jsonObject.getString(FILENAME_FIELD);
}
if (jsonObject.has(MIMETYPE_FIELD)) {
this.mimeType = jsonObject.getString(MIMETYPE_FIELD);
}
if (jsonObject.has(FILESIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
} }
this.fileName = jsonObject.optString(FILENAME_FIELD, "");
this.mimeType = jsonObject.optString(MIMETYPE_FIELD, "");
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0);
} }
public String getFileId() { public String getFileId() {
@ -84,4 +93,40 @@ public class Document {
public void setFileSize(Integer fileSize) { public void setFileSize(Integer fileSize) {
this.fileSize = fileSize; this.fileSize = fileSize;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeObjectField(THUMB_FIELD, thumb);
if (fileName != null) {
gen.writeStringField(FILENAME_FIELD, fileName);
}
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeObjectField(THUMB_FIELD, thumb);
if (fileName != null) {
gen.writeStringField(FILENAME_FIELD, fileName);
}
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
} }

95
src/main/java/org/telegram/api/objects/File.java

@ -0,0 +1,95 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a file ready to be downloaded
* @date 24 of June of 2015
*/
public class File implements BotApiObject {
public static final String FILE_ID = "file_id";
@JsonProperty(FILE_ID)
private String fileId; ///< Unique identifier for this file
public static final String FILE_SIZE_FIELD = "file_size";
@JsonProperty(FILE_SIZE_FIELD)
private Integer fileSize; ///< Optional. File size, if known
public static final String FILE_PATH_FIELD = "first_name";
@JsonProperty(FILE_PATH_FIELD)
private String filePath; ///< Optional. File path. Use https://api.telegram.org/file/bot<token>/<file_path> to get the file.
public File() {
super();
}
public File(JSONObject jsonObject) {
super();
this.fileId = jsonObject.getString(FILE_ID);
if (jsonObject.has(FILE_SIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILE_SIZE_FIELD);
}
if (jsonObject.has(FILE_PATH_FIELD)) {
this.filePath = jsonObject.getString(FILE_PATH_FIELD);
}
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILE_ID, fileId);
if (fileSize != null) {
gen.writeNumberField(FILE_SIZE_FIELD, fileSize);
}
if (filePath != null) {
gen.writeStringField(FILE_PATH_FIELD, filePath);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILE_ID, fileId);
if (fileSize != null) {
gen.writeNumberField(FILE_SIZE_FIELD, fileSize);
}
if (filePath != null) {
gen.writeStringField(FILE_PATH_FIELD, filePath);
}
gen.writeEndObject();
gen.flush();
}
}

33
src/main/java/org/telegram/api/ForceReplyKeyboard.java → src/main/java/org/telegram/api/objects/ForceReplyKeyboard.java

@ -1,8 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
@ -37,8 +42,12 @@ public class ForceReplyKeyboard implements ReplyKeyboard {
public ForceReplyKeyboard(JSONObject jsonObject) { public ForceReplyKeyboard(JSONObject jsonObject) {
super(); super();
this.forceReply = jsonObject.optBoolean(FORCEREPLY_FIELD, true); if (jsonObject.has(FORCEREPLY_FIELD)) {
this.selective = jsonObject.optBoolean(SELECTIVE_FIELD, false); this.forceReply = jsonObject.getBoolean(FORCEREPLY_FIELD);
}
if (jsonObject.has(SELECTIVE_FIELD)) {
this.selective = jsonObject.getBoolean(SELECTIVE_FIELD);
}
} }
public Boolean getForceReply() { public Boolean getForceReply() {
@ -68,4 +77,22 @@ public class ForceReplyKeyboard implements ReplyKeyboard {
return jsonObject; return jsonObject;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeBooleanField(FORCEREPLY_FIELD, forceReply);
gen.writeBooleanField(SELECTIVE_FIELD, selective);
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeBooleanField(FORCEREPLY_FIELD, forceReply);
gen.writeBooleanField(SELECTIVE_FIELD, selective);
gen.writeEndObject();
gen.flush();
}
} }

28
src/main/java/org/telegram/api/Location.java → src/main/java/org/telegram/api/objects/Location.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -9,7 +15,7 @@ import org.json.JSONObject;
* @brief This object represents a point on the map. * @brief This object represents a point on the map.
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class Location { public class Location implements BotApiObject {
public static final String LONGITUDE_FIELD = "longitude"; public static final String LONGITUDE_FIELD = "longitude";
@JsonProperty(LONGITUDE_FIELD) @JsonProperty(LONGITUDE_FIELD)
@ -43,4 +49,22 @@ public class Location {
public void setLatitude(Double latitude) { public void setLatitude(Double latitude) {
this.latitude = latitude; this.latitude = latitude;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(LONGITUDE_FIELD, longitude);
gen.writeNumberField(LATITUDE_FIELD, latitude);
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(LONGITUDE_FIELD, longitude);
gen.writeNumberField(LATITUDE_FIELD, latitude);
gen.writeEndObject();
gen.flush();
}
} }

181
src/main/java/org/telegram/api/Message.java → src/main/java/org/telegram/api/objects/Message.java

@ -1,9 +1,14 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -13,7 +18,7 @@ import java.util.List;
* @brief This object represents a message. * @brief This object represents a message.
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class Message { public class Message implements BotApiObject {
public static final String MESSAGEID_FIELD = "message_id"; public static final String MESSAGEID_FIELD = "message_id";
@JsonProperty(MESSAGEID_FIELD) @JsonProperty(MESSAGEID_FIELD)
private Integer messageId; ///< Integer Unique message identifier private Integer messageId; ///< Integer Unique message identifier
@ -81,6 +86,9 @@ public class Message {
public static final String REPLYTOMESSAGE_FIELD = "reply_to_message"; public static final String REPLYTOMESSAGE_FIELD = "reply_to_message";
@JsonProperty(REPLYTOMESSAGE_FIELD) @JsonProperty(REPLYTOMESSAGE_FIELD)
private Message replyToMessage; private Message replyToMessage;
public static final String VOICE_FIELD = "voice";
@JsonProperty(VOICE_FIELD)
private Voice voice; ///< Optional. Message is a voice message, information about the file
public Message() { public Message() {
super(); super();
@ -107,8 +115,8 @@ public class Message {
if (jsonObject.has(DOCUMENT_FIELD)) { if (jsonObject.has(DOCUMENT_FIELD)) {
this.document = new Document(jsonObject.getJSONObject(DOCUMENT_FIELD)); this.document = new Document(jsonObject.getJSONObject(DOCUMENT_FIELD));
} }
this.photo = new ArrayList<>();
if (jsonObject.has(PHOTO_FIELD)) { if (jsonObject.has(PHOTO_FIELD)) {
this.photo = new ArrayList<>();
JSONArray photos = jsonObject.getJSONArray(PHOTO_FIELD); JSONArray photos = jsonObject.getJSONArray(PHOTO_FIELD);
for (int i = 0; i < photos.length(); i++) { for (int i = 0; i < photos.length(); i++) {
this.photo.add(new PhotoSize(photos.getJSONObject(i))); this.photo.add(new PhotoSize(photos.getJSONObject(i)));
@ -126,6 +134,9 @@ public class Message {
if (jsonObject.has(LOCATION_FIELD)) { if (jsonObject.has(LOCATION_FIELD)) {
this.location = new Location(jsonObject.getJSONObject(LOCATION_FIELD)); this.location = new Location(jsonObject.getJSONObject(LOCATION_FIELD));
} }
if (jsonObject.has(VOICE_FIELD)) {
this.voice = new Voice(jsonObject.getJSONObject(VOICE_FIELD));
}
if (jsonObject.has(NEWCHATPARTICIPANT_FIELD)) { if (jsonObject.has(NEWCHATPARTICIPANT_FIELD)) {
this.newChatParticipant = new User(jsonObject.getJSONObject(NEWCHATPARTICIPANT_FIELD)); this.newChatParticipant = new User(jsonObject.getJSONObject(NEWCHATPARTICIPANT_FIELD));
} }
@ -135,7 +146,9 @@ public class Message {
if (jsonObject.has(REPLYTOMESSAGE_FIELD)) { if (jsonObject.has(REPLYTOMESSAGE_FIELD)) {
this.replyToMessage = new Message(jsonObject.getJSONObject(REPLYTOMESSAGE_FIELD)); this.replyToMessage = new Message(jsonObject.getJSONObject(REPLYTOMESSAGE_FIELD));
} }
this.newChatTitle = jsonObject.optString(NEWCHATTITLE_FIELD, ""); if (jsonObject.has(NEWCHATTITLE_FIELD)) {
this.newChatTitle = jsonObject.getString(NEWCHATTITLE_FIELD);
}
if (jsonObject.has(NEWCHATPHOTO_FIELD)) { if (jsonObject.has(NEWCHATPHOTO_FIELD)) {
JSONArray photoArray = jsonObject.getJSONArray(NEWCHATPHOTO_FIELD); JSONArray photoArray = jsonObject.getJSONArray(NEWCHATPHOTO_FIELD);
this.newChatPhoto = new ArrayList<>(); this.newChatPhoto = new ArrayList<>();
@ -143,8 +156,12 @@ public class Message {
this.newChatPhoto.add(new PhotoSize(photoArray.getJSONObject(i))); this.newChatPhoto.add(new PhotoSize(photoArray.getJSONObject(i)));
} }
} }
this.deleteChatPhoto = jsonObject.optBoolean(DELETECHATPHOTO_FIELD, false); if (jsonObject.has(DELETECHATPHOTO_FIELD)) {
this.groupchatCreated = jsonObject.optBoolean(GROUPCHATCREATED_FIELD, false); this.deleteChatPhoto = jsonObject.getBoolean(DELETECHATPHOTO_FIELD);
}
if (jsonObject.has(GROUPCHATCREATED_FIELD)) {
this.groupchatCreated = jsonObject.getBoolean(GROUPCHATCREATED_FIELD);
}
} }
public Integer getMessageId() { public Integer getMessageId() {
@ -342,4 +359,156 @@ public class Message {
public boolean hasLocation() { public boolean hasLocation() {
return location != null; return location != null;
} }
public Voice getVoice() {
return voice;
}
public void setVoice(Voice voice) {
this.voice = voice;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(MESSAGEID_FIELD, messageId);
gen.writeObjectField(FROM_FIELD, from);
gen.writeNumberField(DATE_FIELD, date);
gen.writeObjectField(CHAT_FIELD, chat);
if (forwardFrom != null) {
gen.writeObjectField(FORWARDFROM_FIELD, forwardFrom);
}
if (forwardDate != null) {
gen.writeNumberField(FORWARDDATE_FIELD, forwardDate);
}
if (text != null) {
gen.writeStringField(TEXT_FIELD, text);
}
if (audio != null) {
gen.writeObjectField(AUDIO_FIELD, audio);
}
if (document != null) {
gen.writeObjectField(DOCUMENT_FIELD, document);
}
if (photo != null && photo.size() > 0) {
gen.writeArrayFieldStart(PHOTO_FIELD);
for (PhotoSize photoSize : photo) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
if (sticker != null) {
gen.writeObjectField(STICKER_FIELD, sticker);
}
if (video != null) {
gen.writeObjectField(VIDEO_FIELD, video);
}
if (contact != null) {
gen.writeObjectField(CONTACT_FIELD, contact);
}
if (location != null) {
gen.writeObjectField(LOCATION_FIELD, location);
}
if (voice != null) {
gen.writeObjectField(VOICE_FIELD, voice);
}
if (newChatParticipant != null) {
gen.writeObjectField(NEWCHATPARTICIPANT_FIELD, newChatParticipant);
}
if (leftChatParticipant != null) {
gen.writeObjectField(LEFTCHATPARTICIPANT_FIELD, leftChatParticipant);
}
if (replyToMessage != null) {
gen.writeObjectField(REPLYTOMESSAGE_FIELD, replyToMessage);
}
if (newChatTitle != null) {
gen.writeStringField(NEWCHATTITLE_FIELD, newChatTitle);
}
if (newChatPhoto != null && newChatPhoto.size() > 0) {
gen.writeArrayFieldStart(NEWCHATPHOTO_FIELD);
for (PhotoSize photoSize: newChatPhoto) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
if (deleteChatPhoto != null) {
gen.writeBooleanField(DELETECHATPHOTO_FIELD, deleteChatPhoto);
}
if (groupchatCreated != null) {
gen.writeBooleanField(GROUPCHATCREATED_FIELD, groupchatCreated);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
if (forwardFrom != null) {
gen.writeObjectField(FORWARDFROM_FIELD, forwardFrom);
}
if (forwardDate != null) {
gen.writeNumberField(FORWARDDATE_FIELD, forwardDate);
}
if (text != null) {
gen.writeStringField(TEXT_FIELD, text);
}
if (audio != null) {
gen.writeObjectField(AUDIO_FIELD, audio);
}
if (document != null) {
gen.writeObjectField(DOCUMENT_FIELD, document);
}
if (photo != null && photo.size() > 0) {
gen.writeArrayFieldStart(PHOTO_FIELD);
for (PhotoSize photoSize : photo) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
if (sticker != null) {
gen.writeObjectField(STICKER_FIELD, sticker);
}
if (video != null) {
gen.writeObjectField(VIDEO_FIELD, video);
}
if (contact != null) {
gen.writeObjectField(CONTACT_FIELD, contact);
}
if (location != null) {
gen.writeObjectField(LOCATION_FIELD, location);
}
if (voice != null) {
gen.writeObjectField(VOICE_FIELD, voice);
}
if (newChatParticipant != null) {
gen.writeObjectField(NEWCHATPARTICIPANT_FIELD, newChatParticipant);
}
if (leftChatParticipant != null) {
gen.writeObjectField(LEFTCHATPARTICIPANT_FIELD, leftChatParticipant);
}
if (replyToMessage != null) {
gen.writeObjectField(REPLYTOMESSAGE_FIELD, replyToMessage);
}
if (newChatTitle != null) {
gen.writeStringField(NEWCHATTITLE_FIELD, newChatTitle);
}
if (newChatPhoto != null && newChatPhoto.size() > 0) {
gen.writeArrayFieldStart(NEWCHATPHOTO_FIELD);
for (PhotoSize photoSize: newChatPhoto) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
if (deleteChatPhoto != null) {
gen.writeBooleanField(DELETECHATPHOTO_FIELD, deleteChatPhoto);
}
if (groupchatCreated != null) {
gen.writeBooleanField(GROUPCHATCREATED_FIELD, groupchatCreated);
}
gen.writeEndObject();
gen.flush();
}
} }

104
src/main/java/org/telegram/api/objects/PhotoSize.java

@ -0,0 +1,104 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents one size of a photo or a file / sticker thumbnail.
* @date 20 of June of 2015
*/
public class PhotoSize implements BotApiObject {
public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD)
private String fileId; ///< Unique identifier for this file
public static final String WIDTH_FIELD = "width";
@JsonProperty(WIDTH_FIELD)
private Integer width; ///< Photo width
public static final String HEIGHT_FIELD = "height";
@JsonProperty(HEIGHT_FIELD)
private Integer height; ///< Photo height
public static final String FILESIZE_FIELD = "file_size";
@JsonProperty(FILESIZE_FIELD)
private Integer fileSize; ///< Optional. File size
public PhotoSize() {
super();
}
public PhotoSize(JSONObject jsonObject) {
super();
this.fileId = jsonObject.getString(FILEID_FIELD);
this.width = jsonObject.getInt(WIDTH_FIELD);
this.height = jsonObject.getInt(HEIGHT_FIELD);
if (jsonObject.has(FILESIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
}
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
}

13
src/main/java/org/telegram/api/objects/ReplyKeyboard.java

@ -0,0 +1,13 @@
package org.telegram.api.objects;
import org.telegram.api.interfaces.BotApiObject;
import org.telegram.api.interfaces.IToJson;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Reply keyboard abstract type
* @date 20 of June of 2015
*/
public interface ReplyKeyboard extends BotApiObject, IToJson {
}

34
src/main/java/org/telegram/api/ReplyKeyboardHide.java → src/main/java/org/telegram/api/objects/ReplyKeyboardHide.java

@ -1,8 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
@ -13,7 +18,7 @@ import org.json.JSONObject;
* (@see ReplyKeyboardMarkup). * (@see ReplyKeyboardMarkup).
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class ReplyKeyboardHide implements ReplyKeyboard{ public class ReplyKeyboardHide implements ReplyKeyboard {
public static final String HIDEKEYBOARD_FIELD = "hide_keyboard"; public static final String HIDEKEYBOARD_FIELD = "hide_keyboard";
@JsonProperty(HIDEKEYBOARD_FIELD) @JsonProperty(HIDEKEYBOARD_FIELD)
@ -35,8 +40,12 @@ public class ReplyKeyboardHide implements ReplyKeyboard{
public ReplyKeyboardHide(JSONObject jsonObject) { public ReplyKeyboardHide(JSONObject jsonObject) {
super(); super();
this.hideKeyboard = jsonObject.optBoolean(HIDEKEYBOARD_FIELD, true); if (jsonObject.has(HIDEKEYBOARD_FIELD)) {
this.selective = jsonObject.optBoolean(SELECTIVE_FIELD, true); this.hideKeyboard = jsonObject.getBoolean(HIDEKEYBOARD_FIELD);
}
if (jsonObject.has(SELECTIVE_FIELD)) {
this.selective = jsonObject.getBoolean(SELECTIVE_FIELD);
}
} }
public Boolean getHideKeyboard() { public Boolean getHideKeyboard() {
@ -63,4 +72,21 @@ public class ReplyKeyboardHide implements ReplyKeyboard{
return jsonObject; return jsonObject;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeBooleanField(HIDEKEYBOARD_FIELD, hideKeyboard);
gen.writeBooleanField(SELECTIVE_FIELD, selective);
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeBooleanField(HIDEKEYBOARD_FIELD, hideKeyboard);
gen.writeBooleanField(SELECTIVE_FIELD, selective);
gen.writeEndObject();
gen.flush();
}
} }

68
src/main/java/org/telegram/api/ReplyKeyboardMarkup.java → src/main/java/org/telegram/api/objects/ReplyKeyboardMarkup.java

@ -1,9 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -50,9 +54,15 @@ public class ReplyKeyboardMarkup implements ReplyKeyboard {
} }
this.keyboard.add(row); this.keyboard.add(row);
} }
this.resizeKeyboard = jsonObject.optBoolean(RESIZEKEYBOARD_FIELD, false); if (jsonObject.has(RESIZEKEYBOARD_FIELD)) {
this.oneTimeKeyboad = jsonObject.optBoolean(ONETIMEKEYBOARD_FIELD, false); this.resizeKeyboard = jsonObject.getBoolean(RESIZEKEYBOARD_FIELD);
this.selective = jsonObject.optBoolean(SELECTIVE_FIELD, false); }
if (jsonObject.has(ONETIMEKEYBOARD_FIELD)) {
this.oneTimeKeyboad = jsonObject.getBoolean(ONETIMEKEYBOARD_FIELD);
}
if (jsonObject.has(SELECTIVE_FIELD)) {
this.selective = jsonObject.getBoolean(SELECTIVE_FIELD);
}
} }
public List<List<String>> getKeyboard() { public List<List<String>> getKeyboard() {
@ -113,4 +123,54 @@ public class ReplyKeyboardMarkup implements ReplyKeyboard {
return jsonObject; return jsonObject;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeArrayFieldStart(KEYBOARD_FIELD);
for (List<String> innerRow : keyboard) {
gen.writeStartArray();
for (String element: innerRow) {
gen.writeString(element);
}
gen.writeEndArray();
}
gen.writeEndArray();
if (this.oneTimeKeyboad != null) {
gen.writeBooleanField(ONETIMEKEYBOARD_FIELD, oneTimeKeyboad);
}
if (this.resizeKeyboard != null) {
gen.writeBooleanField(RESIZEKEYBOARD_FIELD, resizeKeyboard);
}
if (this.selective != null) {
gen.writeBooleanField(SELECTIVE_FIELD, selective);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeArrayFieldStart(KEYBOARD_FIELD);
for (List<String> innerRow : keyboard) {
gen.writeStartArray();
for (String element: innerRow) {
gen.writeString(element);
}
gen.writeEndArray();
}
gen.writeEndArray();
if (this.oneTimeKeyboad != null) {
gen.writeBooleanField(ONETIMEKEYBOARD_FIELD, oneTimeKeyboad);
}
if (this.resizeKeyboard != null) {
gen.writeBooleanField(RESIZEKEYBOARD_FIELD, resizeKeyboard);
}
if (this.selective != null) {
gen.writeBooleanField(SELECTIVE_FIELD, selective);
}
gen.writeEndObject();
gen.flush();
}
} }

84
src/main/java/org/telegram/api/objects/Sticker.java

@ -0,0 +1,84 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a sticker.
* @date 20 of June of 2015
*/
public class Sticker implements BotApiObject {
public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD)
private String fileId; ///< Unique identifier for this file
public static final String WIDTH_FIELD = "width";
@JsonProperty(WIDTH_FIELD)
private Integer width; ///< Sticker width
public static final String HEIGHT_FIELD = "height";
@JsonProperty(HEIGHT_FIELD)
private Integer height; ///< Sticker height
public static final String THUMB_FIELD = "thumb";
@JsonProperty(THUMB_FIELD)
private PhotoSize thumb; ///< Optional. Sticker thumbnail in .webp or .jpg format
public static final String FILESIZE_FIELD = "file_size";
@JsonProperty(FILESIZE_FIELD)
private Integer fileSize; ///< Optional. File size
public Sticker() {
super();
}
public Sticker(JSONObject jsonObject) {
super();
this.fileId = jsonObject.getString(FILEID_FIELD);
this.width = jsonObject.getInt(WIDTH_FIELD);
this.height = jsonObject.getInt(HEIGHT_FIELD);
if (jsonObject.has(THUMB_FIELD)) {
this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD));
}
if (jsonObject.has(FILESIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
}
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
if (thumb != null) {
gen.writeObjectField(THUMB_FIELD, thumb);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
if (thumb != null) {
gen.writeObjectField(THUMB_FIELD, thumb);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
}

74
src/main/java/org/telegram/api/objects/Update.java

@ -0,0 +1,74 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief TODO
* @date 20 of June of 2015
*/
public class Update implements BotApiObject {
public static final String UPDATEID_FIELD = "update_id";
/**
* The updates unique identifier.
* Update identifiers start from a certain positive number and increase sequentially.
* This ID becomes especially handy if youre using Webhooks,
* since it allows you to ignore repeated updates or to restore the
* correct update sequence, should they get out of order.
*/
@JsonProperty(UPDATEID_FIELD)
private Integer updateId;
public static final String MESSAGE_FIELD = "message";
@JsonProperty(MESSAGE_FIELD)
private Message message; ///< Optional. New incoming message of any kind — text, photo, sticker, etc.
public Update() {
super();
}
public Update(JSONObject jsonObject) {
super();
this.updateId = jsonObject.getInt(UPDATEID_FIELD);
if (jsonObject.has(MESSAGE_FIELD)) {
this.message = new Message(jsonObject.getJSONObject(MESSAGE_FIELD));
}
}
public Integer getUpdateId() {
return updateId;
}
public Message getMessage() {
return message;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(UPDATEID_FIELD, updateId);
if (message != null) {
gen.writeObjectField(MESSAGE_FIELD, message);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(UPDATEID_FIELD, updateId);
if (message != null) {
gen.writeObjectField(MESSAGE_FIELD, message);
}
gen.writeEndObject();
gen.flush();
}
}

94
src/main/java/org/telegram/api/objects/User.java

@ -0,0 +1,94 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represents a Telegram user or bot.
* @date 20 of June of 2015
*/
public class User implements BotApiObject {
public static final String ID_FIELD = "id";
@JsonProperty(ID_FIELD)
private Integer id; ///< Unique identifier for this user or bot
public static final String FIRSTNAME_FIELD = "first_name";
@JsonProperty(FIRSTNAME_FIELD)
private String firstName; ///< User‘s or bot’s first name
public static final String LASTNAME_FIELD = "last_name";
@JsonProperty(LASTNAME_FIELD)
private String lastName; ///< Optional. User‘s or bot’s last name
public static final String USERNAME_FIELD = "username";
@JsonProperty(USERNAME_FIELD)
private String userName; ///< Optional. User‘s or bot’s username
public User() {
super();
}
public User(JSONObject jsonObject) {
super();
this.id = jsonObject.getInt(ID_FIELD);
this.firstName = jsonObject.getString(FIRSTNAME_FIELD);
if (jsonObject.has(LASTNAME_FIELD)) {
this.lastName = jsonObject.getString(LASTNAME_FIELD);
}
if (jsonObject.has(USERNAME_FIELD)) {
this.userName = jsonObject.getString(USERNAME_FIELD);
}
}
public Integer getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getUserName() {
return userName;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(ID_FIELD, id);
gen.writeStringField(FIRSTNAME_FIELD, firstName);
if (lastName != null) {
gen.writeStringField(LASTNAME_FIELD, lastName);
}
if (userName != null) {
gen.writeStringField(USERNAME_FIELD, userName);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(ID_FIELD, id);
gen.writeStringField(FIRSTNAME_FIELD, firstName);
if (lastName != null) {
gen.writeStringField(LASTNAME_FIELD, lastName);
}
if (userName != null) {
gen.writeStringField(USERNAME_FIELD, userName);
}
gen.writeEndObject();
gen.flush();
}
}

104
src/main/java/org/telegram/api/objects/UserProfilePhotos.java

@ -0,0 +1,104 @@
package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONArray;
import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief This object represent a user's profile pictures.
* @date 22 of June of 2015
*/
public class UserProfilePhotos implements BotApiObject {
public static final String TOTALCOUNT_FIELD = "total_count";
@JsonProperty(TOTALCOUNT_FIELD)
private Integer totalCount; ///< Total number of profile pictures the target user has
public static final String PHOTOS_FIELD = "photos";
@JsonProperty(PHOTOS_FIELD)
private List<List<PhotoSize>> photos; ///< Requested profile pictures (in up to 4 sizes each)
public UserProfilePhotos() {
super();
}
public UserProfilePhotos(JSONObject jsonObject) {
super();
this.totalCount = jsonObject.getInt(TOTALCOUNT_FIELD);
if (totalCount > 0) {
this.photos = new ArrayList<>();
JSONArray photos = jsonObject.getJSONArray(PHOTOS_FIELD);
for (int i = 0; i < photos.length(); i++) {
JSONArray innerArray = photos.getJSONArray(i);
List<PhotoSize> innerPhotos = new ArrayList<>();
for (int j = 0; j < innerArray.length(); j++) {
innerPhotos.add(new PhotoSize(innerArray.getJSONObject(j)));
}
this.photos.add(innerPhotos);
}
}
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public List<List<PhotoSize>> getPhotos() {
return photos;
}
public void setPhotos(List<List<PhotoSize>> photos) {
this.photos = photos;
}
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField(TOTALCOUNT_FIELD, totalCount);
if (totalCount > 0) {
gen.writeArrayFieldStart(PHOTOS_FIELD);
for (List<PhotoSize> photoSizeList : photos) {
gen.writeStartArray();
for (PhotoSize photoSize: photoSizeList) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
gen.writeEndArray();
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeNumberField(TOTALCOUNT_FIELD, totalCount);
if (totalCount > 0) {
gen.writeArrayFieldStart(PHOTOS_FIELD);
for (List<PhotoSize> photoSizeList : photos) {
gen.writeStartArray();
for (PhotoSize photoSize: photoSizeList) {
gen.writeObject(photoSize);
}
gen.writeEndArray();
}
gen.writeEndArray();
}
gen.writeEndObject();
gen.flush();
}
}

60
src/main/java/org/telegram/api/Video.java → src/main/java/org/telegram/api/objects/Video.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -9,7 +15,7 @@ import org.json.JSONObject;
* @brief This object represents a video file. * @brief This object represents a video file.
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public class Video { public class Video implements BotApiObject {
public static final String FILEID_FIELD = "file_id"; public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD) @JsonProperty(FILEID_FIELD)
@ -44,11 +50,13 @@ public class Video {
this.duration = jsonObject.getInt(DURATION_FIELD); this.duration = jsonObject.getInt(DURATION_FIELD);
if (jsonObject.has(THUMB_FIELD)) { if (jsonObject.has(THUMB_FIELD)) {
this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD)); this.thumb = new PhotoSize(jsonObject.getJSONObject(THUMB_FIELD));
} else {
this.thumb = null;
} }
this.mimeType = jsonObject.optString(MIMETYPE_FIELD, ""); if (jsonObject.has(MIMETYPE_FIELD)) {
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0); this.mimeType = jsonObject.getString(MIMETYPE_FIELD);
}
if (jsonObject.has(FILESIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
}
} }
public Integer getWidth() { public Integer getWidth() {
@ -106,4 +114,44 @@ public class Video {
public void setFileSize(Integer fileSize) { public void setFileSize(Integer fileSize) {
this.fileSize = fileSize; this.fileSize = fileSize;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
gen.writeNumberField(DURATION_FIELD, duration);
if (thumb != null) {
gen.writeObjectField(THUMB_FIELD, thumb);
}
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(WIDTH_FIELD, width);
gen.writeNumberField(HEIGHT_FIELD, height);
gen.writeNumberField(DURATION_FIELD, duration);
if (thumb != null) {
gen.writeObjectField(THUMB_FIELD, thumb);
}
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
} }

48
src/main/java/org/telegram/api/Voice.java → src/main/java/org/telegram/api/objects/Voice.java

@ -1,7 +1,13 @@
package org.telegram.api; package org.telegram.api.objects;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.interfaces.BotApiObject;
import java.io.IOException;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -9,7 +15,7 @@ import org.json.JSONObject;
* @brief This object represents a voice note * @brief This object represents a voice note
* @date 16 of July of 2015 * @date 16 of July of 2015
*/ */
public class Voice { public class Voice implements BotApiObject {
public static final String FILEID_FIELD = "file_id"; public static final String FILEID_FIELD = "file_id";
@JsonProperty(FILEID_FIELD) @JsonProperty(FILEID_FIELD)
private String fileId; ///< Unique identifier for this file private String fileId; ///< Unique identifier for this file
@ -31,8 +37,12 @@ public class Voice {
super(); super();
this.fileId = jsonObject.getString(FILEID_FIELD); this.fileId = jsonObject.getString(FILEID_FIELD);
this.duration = jsonObject.getInt(DURATION_FIELD); this.duration = jsonObject.getInt(DURATION_FIELD);
this.mimeType = jsonObject.optString(MIMETYPE_FIELD, ""); if (jsonObject.has(MIMETYPE_FIELD)) {
this.fileSize = jsonObject.optInt(FILESIZE_FIELD, 0); this.mimeType = jsonObject.getString(MIMETYPE_FIELD);
}
if (jsonObject.has(FILESIZE_FIELD)) {
this.fileSize = jsonObject.getInt(FILESIZE_FIELD);
}
} }
public String getFileId() { public String getFileId() {
@ -66,4 +76,34 @@ public class Voice {
public void setFileSize(Integer fileSize) { public void setFileSize(Integer fileSize) {
this.fileSize = fileSize; this.fileSize = fileSize;
} }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(DURATION_FIELD, duration);
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
gen.writeStartObject();
gen.writeStringField(FILEID_FIELD, fileId);
gen.writeNumberField(DURATION_FIELD, duration);
if (mimeType != null) {
gen.writeStringField(MIMETYPE_FIELD, mimeType);
}
if (fileSize != null) {
gen.writeNumberField(FILESIZE_FIELD, fileSize);
}
gen.writeEndObject();
gen.flush();
}
} }

46
src/main/java/org/telegram/methods/ForwardMessage.java

@ -1,46 +0,0 @@
package org.telegram.methods;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send text messages. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class ForwardMessage {
public static final String PATH = "forwardmessage";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String FROMCHATID_FIELD = "from_chat_id";
private Integer fromChatId; ///< Unique identifier for the chat where the original message was sent — User or GroupChat id
public static final String MESSAGEID_FIELD = "message_id";
private Integer messageId; ///< Unique message identifier
public ForwardMessage() {
super();
}
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public Integer getFromChatId() {
return fromChatId;
}
public void setFromChatId(Integer fromChatId) {
this.fromChatId = fromChatId;
}
public Integer getMessageId() {
return messageId;
}
public void setMessageId(Integer messageId) {
this.messageId = messageId;
}
}

12
src/main/java/org/telegram/methods/GetMe.java

@ -1,12 +0,0 @@
package org.telegram.methods;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief A simple method for testing your bot's auth token. Requires no parameters.
* Returns basic information about the bot in form of a User object
* @date 20 of June of 2015
*/
public class GetMe {
public static final String PATH = "getme";
}

57
src/main/java/org/telegram/methods/GetUserProfilePhotos.java

@ -1,57 +0,0 @@
package org.telegram.methods;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to get a list of profile pictures for a user. Returns a UserProfilePhotos object.
* @date 20 of June of 2015
*/
public class GetUserProfilePhotos {
public static final String PATH = "getuserprofilephotos";
/*
user_id Integer Yes
offset Integer
limit Integer Optional
*/
public static final String USERID_FIELD = "user_id";
private Integer userId; ///< Unique identifier of the target user
public static final String OFFSET_FIELD = "offset";
/**
* Sequential number of the first photo to be returned. By default, all photos are returned.
*/
private Integer offset;
public static final String LIMIT_FIELD = "limit";
/**
* Limits the number of photos to be retrieved. Values between 1100 are accepted. Defaults to 100.
*/
private Integer limit;
public GetUserProfilePhotos() {
super();
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getOffset() {
return offset;
}
public void setOffset(Integer offset) {
this.offset = offset;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
}

31
src/main/java/org/telegram/methods/SendChatAction.java

@ -1,31 +0,0 @@
package org.telegram.methods;
import org.telegram.api.ReplyKeyboard;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method when you need to tell the user that something is happening on the bot's side.
* The status is set for 5 seconds or less (when a message arrives from your bot,
* Telegram clients clear its typing status).
* @date 20 of June of 2015
*/
public class SendChatAction {
public static final String PATH = "sendChatAction";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String ACTION_FIELD = "action";
/**
* Type of action to broadcast.
* Choose one, depending on what the user is about to receive:
* 'typing' for text messages
* 'upload_photo' for photos
* 'record_video' or 'upload_video' for videos
* 'record_audio' or 'upload_audio' for audio files
* 'upload_document' for general files,
* 'find_location' for location data.
*/
private Float action;
}

24
src/main/java/org/telegram/methods/SendLocation.java

@ -1,24 +0,0 @@
package org.telegram.methods;
import org.telegram.api.ReplyKeyboard;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send point on the map. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class SendLocation {
public static final String PATH = "sendlocation";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String LATITUDE_FIELD = "latitude";
private Float latitude; ///< Latitude of location
public static final String LONGITUDE_FIELD = "longitude";
private Float longitude; ///< Longitude of location
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
public static final String REPLYMARKUP_FIELD = "reply_markup";
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
}

68
src/main/java/org/telegram/methods/SendMessage.java

@ -1,68 +0,0 @@
package org.telegram.methods;
import org.telegram.api.ReplyKeyboard;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to send text messages. On success, the sent Message is returned.
* @date 20 of June of 2015
*/
public class SendMessage {
public static final String PATH = "sendmessage";
public static final String CHATID_FIELD = "chat_id";
private Integer chatId; ///< Unique identifier for the message recepient — User or GroupChat id
public static final String TEXT_FIELD = "text";
private String text; ///< Text of the message to be sent
public static final String DISABLEWEBPAGEPREVIEW_FIELD = "disable_web_page_preview";
private Boolean disableWebPagePreview; ///< Disables link previews for links in this message
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
public static final String REPLYMARKUP_FIELD = "reply_markup";
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
public SendMessage() {
super();
}
public Integer getChatId() {
return chatId;
}
public void setChatId(Integer chatId) {
this.chatId = chatId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
public void setReplayToMessageId(Integer replayToMessageId) {
this.replayToMessageId = replayToMessageId;
}
public ReplyKeyboard getReplayMarkup() {
return replayMarkup;
}
public void setReplayMarkup(ReplyKeyboard replayMarkup) {
this.replayMarkup = replayMarkup;
}
public Boolean getDisableWebPagePreview() {
return disableWebPagePreview;
}
public void setDisableWebPagePreview(Boolean disableWebPagePreview) {
this.disableWebPagePreview = disableWebPagePreview;
}
}

17
src/main/java/org/telegram/methods/SetWebhook.java

@ -1,17 +0,0 @@
package org.telegram.methods;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Use this method to specify a url and receive incoming updates via an outgoing webhook.
* Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url,
* containing a JSON-serialized Update. In case of an unsuccessful request,
* we will give up after a reasonable amount of attempts.
* @date 20 of June of 2015
*/
public class SetWebhook {
public static final String PATH = "setwebhook";
public static final String URL_FIELD = "url";
private String url; ///< HTTPS url to send updates to. Use an empty string to remove webhook integration
}

2
src/main/java/org/telegram/services/TransifexService.java

@ -8,7 +8,7 @@ import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.telegram.BuildVars; import org.telegram.BuildVars;
import org.telegram.methods.SendDocument; import org.telegram.api.methods.SendDocument;
import java.io.*; import java.io.*;

98
src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java

@ -1,9 +1,11 @@
package org.telegram.updateshandlers; package org.telegram.updateshandlers;
import org.json.JSONObject;
import org.telegram.*; import org.telegram.*;
import org.telegram.api.*; import org.telegram.api.objects.*;
import org.telegram.database.DatabaseManager; import org.telegram.database.DatabaseManager;
import org.telegram.methods.SendMessage; import org.telegram.api.methods.BotApiMethod;
import org.telegram.api.methods.SendMessage;
import org.telegram.services.DirectionsService; import org.telegram.services.DirectionsService;
import org.telegram.services.LocalisationService; import org.telegram.services.LocalisationService;
import org.telegram.updatesreceivers.UpdatesThread; import org.telegram.updatesreceivers.UpdatesThread;
@ -23,22 +25,20 @@ import java.util.concurrent.ConcurrentLinkedQueue;
*/ */
public class DirectionsHandlers implements UpdatesCallback { public class DirectionsHandlers implements UpdatesCallback {
private static final String TOKEN = BotConfig.TOKENDIRECTIONS; private static final String TOKEN = BotConfig.TOKENDIRECTIONS;
private static final String webhookPath = "directionsBot"; private static final String BOTNAME = BotConfig.USERNAMEDIRECTIONS;
private final Webhook webhook; private static final boolean USEWEBHOOK = false;
private final UpdatesThread updatesThread;
private static final int WATING_ORIGIN_STATUS = 0; private static final int WATING_ORIGIN_STATUS = 0;
private static final int WATING_DESTINY_STATUS = 1; private static final int WATING_DESTINY_STATUS = 1;
private final ConcurrentLinkedQueue<Integer> languageMessages = new ConcurrentLinkedQueue<>(); private final ConcurrentLinkedQueue<Integer> languageMessages = new ConcurrentLinkedQueue<>();
public DirectionsHandlers() { public DirectionsHandlers(Webhook webhook) {
if (BuildVars.useWebHook) { if (USEWEBHOOK) {
webhook = new Webhook(this, webhookPath); webhook.registerWebhook(this, BOTNAME);
updatesThread = null; SenderHelper.SendWebhook(Webhook.getExternalURL(BOTNAME), TOKEN);
SenderHelper.SendWebhook(webhook.getURL(), TOKEN);
} else { } else {
webhook = null;
SenderHelper.SendWebhook("", TOKEN); SenderHelper.SendWebhook("", TOKEN);
updatesThread = new UpdatesThread(TOKEN, this); new UpdatesThread(TOKEN, this);
} }
} }
@ -47,6 +47,12 @@ public class DirectionsHandlers implements UpdatesCallback {
handleDirections(update); handleDirections(update);
} }
@Override
public BotApiMethod onWebhookUpdateReceived(Update update) {
// Webhook not supported in this example
return null;
}
public void handleDirections(Update update) { public void handleDirections(Update update) {
Message message = update.getMessage(); Message message = update.getMessage();
if (message != null && message.hasText()) { if (message != null && message.hasText()) {
@ -79,7 +85,7 @@ public class DirectionsHandlers implements UpdatesCallback {
SendMessage sendMessageRequest = new SendMessage(); SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("youNeedReplyDirections", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("youNeedReplyDirections", language));
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
} }
} }
@ -100,11 +106,21 @@ public class DirectionsHandlers implements UpdatesCallback {
Message sentMessage = null; Message sentMessage = null;
for (String direction : directions) { for (String direction : directions) {
sendMessageRequest.setText(direction); sendMessageRequest.setText(direction);
sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethodAsync(sendMessageRequest, TOKEN, new SentCallback<Message>() {
} @Override
if (sentMessage != null) { public void onResult(BotApiMethod<Message> method, JSONObject jsonObject) {
DatabaseManager.getInstance().deleteUserForDirections(message.getFrom().getId()); Message sentMessage = method.deserializeResponse(jsonObject);
if (sentMessage != null) {
DatabaseManager.getInstance().deleteUserForDirections(message.getFrom().getId());
}
}
@Override
public void onError(BotApiMethod<Message> method, JSONObject jsonObject) {
}
});
} }
} }
private void onOriginReceived(Message message, String language) { private void onOriginReceived(Message message, String language) {
@ -115,11 +131,22 @@ public class DirectionsHandlers implements UpdatesCallback {
forceReplyKeyboard.setSelective(true); forceReplyKeyboard.setSelective(true);
sendMessageRequest.setReplayMarkup(forceReplyKeyboard); sendMessageRequest.setReplayMarkup(forceReplyKeyboard);
sendMessageRequest.setText(LocalisationService.getInstance().getString("sendDestination", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("sendDestination", language));
Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN);
if (sentMessage != null) { SenderHelper.SendApiMethodAsync(sendMessageRequest, TOKEN, new SentCallback<Message>() {
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_DESTINY_STATUS, @Override
sentMessage.getMessageId(), message.getText()); public void onResult(BotApiMethod<Message> method, JSONObject jsonObject) {
} Message sentMessage = method.deserializeResponse(jsonObject);
if (sentMessage != null) {
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_DESTINY_STATUS,
sentMessage.getMessageId(), message.getText());
}
}
@Override
public void onError(BotApiMethod<Message> method, JSONObject jsonObject) {
}
});
} }
private void sendHelpMessage(Message message, String language) { private void sendHelpMessage(Message message, String language) {
@ -129,7 +156,7 @@ public class DirectionsHandlers implements UpdatesCallback {
Commands.startDirectionCommand); Commands.startDirectionCommand);
sendMessageRequest.setText(helpDirectionsFormated); sendMessageRequest.setText(helpDirectionsFormated);
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void onStartdirectionsCommand(Message message, String language) { private void onStartdirectionsCommand(Message message, String language) {
@ -140,11 +167,22 @@ public class DirectionsHandlers implements UpdatesCallback {
forceReplyKeyboard.setSelective(true); forceReplyKeyboard.setSelective(true);
sendMessageRequest.setReplayMarkup(forceReplyKeyboard); sendMessageRequest.setReplayMarkup(forceReplyKeyboard);
sendMessageRequest.setText(LocalisationService.getInstance().getString("initDirections", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("initDirections", language));
Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN);
if (sentMessage != null) { SenderHelper.SendApiMethodAsync(sendMessageRequest, TOKEN, new SentCallback<Message>() {
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_ORIGIN_STATUS, @Override
sentMessage.getMessageId(), null); public void onResult(BotApiMethod<Message> method, JSONObject jsonObject) {
} Message sentMessage = method.deserializeResponse(jsonObject);
if (sentMessage != null) {
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_ORIGIN_STATUS,
sentMessage.getMessageId(), null);
}
}
@Override
public void onError(BotApiMethod<Message> method, JSONObject jsonObject) {
}
});
} }
private void onSetLanguageCommand(Message message, String language) { private void onSetLanguageCommand(Message message, String language) {
@ -164,7 +202,7 @@ public class DirectionsHandlers implements UpdatesCallback {
replyKeyboardMarkup.setSelective(true); replyKeyboardMarkup.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); sendMessageRequest.setReplayMarkup(replyKeyboardMarkup);
sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language));
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
languageMessages.add(message.getFrom().getId()); languageMessages.add(message.getFrom().getId());
} }
@ -183,7 +221,7 @@ public class DirectionsHandlers implements UpdatesCallback {
replyKeyboardHide.setHideKeyboard(true); replyKeyboardHide.setHideKeyboard(true);
replyKeyboardHide.setSelective(true); replyKeyboardHide.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardHide); sendMessageRequest.setReplayMarkup(replyKeyboardHide);
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
languageMessages.remove(message.getFrom().getId()); languageMessages.remove(message.getFrom().getId());
} }
} }

57
src/main/java/org/telegram/updateshandlers/FilesHandlers.java

@ -4,13 +4,14 @@ import org.telegram.BotConfig;
import org.telegram.BuildVars; import org.telegram.BuildVars;
import org.telegram.Commands; import org.telegram.Commands;
import org.telegram.SenderHelper; import org.telegram.SenderHelper;
import org.telegram.api.Message; import org.telegram.api.objects.Message;
import org.telegram.api.ReplyKeyboardHide; import org.telegram.api.objects.ReplyKeyboardHide;
import org.telegram.api.ReplyKeyboardMarkup; import org.telegram.api.objects.ReplyKeyboardMarkup;
import org.telegram.api.Update; import org.telegram.api.objects.Update;
import org.telegram.database.DatabaseManager; import org.telegram.database.DatabaseManager;
import org.telegram.methods.SendDocument; import org.telegram.api.methods.BotApiMethod;
import org.telegram.methods.SendMessage; import org.telegram.api.methods.SendDocument;
import org.telegram.api.methods.SendMessage;
import org.telegram.services.Emoji; import org.telegram.services.Emoji;
import org.telegram.services.LocalisationService; import org.telegram.services.LocalisationService;
import org.telegram.updatesreceivers.UpdatesThread; import org.telegram.updatesreceivers.UpdatesThread;
@ -26,27 +27,25 @@ import java.util.concurrent.ConcurrentLinkedQueue;
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
* @brief Handler for updates to Files Bot * @brief Handler for updates to Files Bot
* This bot is an example for the use of sendMessage asynchronously
* @date 24 of June of 2015 * @date 24 of June of 2015
*/ */
public class FilesHandlers implements UpdatesCallback { public class FilesHandlers implements UpdatesCallback {
private static final String TOKEN = BotConfig.TOKENFILES; private static final String TOKEN = BotConfig.TOKENFILES;
private static final String webhookPath = "filesBot"; private static final String BOTNAME = BotConfig.USERNAMEFILES;
private static final boolean USEWEBHOOK = false;
private static final int INITIAL_UPLOAD_STATUS = 0; private static final int INITIAL_UPLOAD_STATUS = 0;
private static final int DELETE_UPLOADED_STATUS = 1; private static final int DELETE_UPLOADED_STATUS = 1;
private final Webhook webhook;
private final UpdatesThread updatesThread;
private final ConcurrentLinkedQueue<Integer> languageMessages = new ConcurrentLinkedQueue<>(); private final ConcurrentLinkedQueue<Integer> languageMessages = new ConcurrentLinkedQueue<>();
public FilesHandlers() { public FilesHandlers(Webhook webhook) {
if (BuildVars.useWebHook) { if (USEWEBHOOK) {
webhook = new Webhook(this, webhookPath); webhook.registerWebhook(this, BOTNAME);
updatesThread = null; SenderHelper.SendWebhook(Webhook.getExternalURL(BOTNAME), TOKEN);
SenderHelper.SendWebhook(webhook.getURL(), TOKEN);
} else { } else {
webhook = null;
SenderHelper.SendWebhook("", TOKEN); SenderHelper.SendWebhook("", TOKEN);
updatesThread = new UpdatesThread(TOKEN, this); new UpdatesThread(TOKEN, this);
} }
} }
@ -55,6 +54,12 @@ public class FilesHandlers implements UpdatesCallback {
handleFileUpdate(update); handleFileUpdate(update);
} }
@Override
public BotApiMethod onWebhookUpdateReceived(Update update) {
// Webhook not supported in this example
return null;
}
public void handleFileUpdate(Update update) { public void handleFileUpdate(Update update) {
Message message = update.getMessage(); Message message = update.getMessage();
if (message != null && message.hasText()) { if (message != null && message.hasText()) {
@ -95,7 +100,7 @@ public class FilesHandlers implements UpdatesCallback {
sendMessageRequest.setText(LocalisationService.getInstance().getString("fileUploaded", language) + sendMessageRequest.setText(LocalisationService.getInstance().getString("fileUploaded", language) +
LocalisationService.getInstance().getString("uploadedFileURL", language) + message.getDocument().getFileId()); LocalisationService.getInstance().getString("uploadedFileURL", language) + message.getDocument().getFileId());
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
} }
@ -116,7 +121,7 @@ public class FilesHandlers implements UpdatesCallback {
ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide();
replyKeyboardHide.setHideKeyboard(true); replyKeyboardHide.setHideKeyboard(true);
sendMessageRequest.setReplayMarkup(replyKeyboardHide); sendMessageRequest.setReplayMarkup(replyKeyboardHide);
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void onDeleteCommand(Message message, String language, String[] parts) { private void onDeleteCommand(Message message, String language, String[] parts) {
@ -148,7 +153,7 @@ public class FilesHandlers implements UpdatesCallback {
replyKeyboardMarkup.setKeyboard(commands); replyKeyboardMarkup.setKeyboard(commands);
} }
sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); sendMessageRequest.setReplayMarkup(replyKeyboardMarkup);
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void onDeleteCommandWithParameters(Message message, String language, String part) { private void onDeleteCommandWithParameters(Message message, String language, String part) {
@ -161,7 +166,7 @@ public class FilesHandlers implements UpdatesCallback {
sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language));
} }
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId()); DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId());
} }
@ -170,7 +175,7 @@ public class FilesHandlers implements UpdatesCallback {
SendMessage sendMessageRequest = new SendMessage(); SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("processFinished", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("processFinished", language));
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void onUploadCommand(Message message, String language) { private void onUploadCommand(Message message, String language) {
@ -178,7 +183,7 @@ public class FilesHandlers implements UpdatesCallback {
SendMessage sendMessageRequest = new SendMessage(); SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("sendFileToUpload", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("sendFileToUpload", language));
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void sendHelpMessage(Message message, String language) { private void sendHelpMessage(Message message, String language) {
@ -189,7 +194,7 @@ public class FilesHandlers implements UpdatesCallback {
Commands.listCommand); Commands.listCommand);
sendMessageRequest.setText(formatedString); sendMessageRequest.setText(formatedString);
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
private void onStartWithParameters(Message message, String language, String part) { private void onStartWithParameters(Message message, String language, String part) {
@ -202,7 +207,7 @@ public class FilesHandlers implements UpdatesCallback {
SendMessage sendMessageRequest = new SendMessage(); SendMessage sendMessageRequest = new SendMessage();
sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language));
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
} }
@ -223,7 +228,7 @@ public class FilesHandlers implements UpdatesCallback {
replyKeyboardMarkup.setSelective(true); replyKeyboardMarkup.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); sendMessageRequest.setReplayMarkup(replyKeyboardMarkup);
sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language)); sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language));
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
languageMessages.add(message.getFrom().getId()); languageMessages.add(message.getFrom().getId());
} }
@ -242,7 +247,7 @@ public class FilesHandlers implements UpdatesCallback {
replyKeyboardHide.setHideKeyboard(true); replyKeyboardHide.setHideKeyboard(true);
replyKeyboardHide.setSelective(true); replyKeyboardHide.setSelective(true);
sendMessageRequest.setReplayMarkup(replyKeyboardHide); sendMessageRequest.setReplayMarkup(replyKeyboardHide);
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
languageMessages.remove(message.getFrom().getId()); languageMessages.remove(message.getFrom().getId());
} }
} }

26
src/main/java/org/telegram/updateshandlers/SentCallback.java

@ -0,0 +1,26 @@
package org.telegram.updateshandlers;
import org.json.JSONObject;
import org.telegram.api.methods.BotApiMethod;
/**
* @author Ruben Bermudez
* @version 1.0
* @brief Callback to execute api method asynchronously
* @date 10 of September of 2015
*/
public interface SentCallback<T> {
/**
* Called when the request is successful
* @param method Method executed
* @param jsonObject Answer from Telegram server
*/
void onResult(BotApiMethod<T> method, JSONObject jsonObject);
/**
* Called when the request fails
* @param method Method executed
* @param jsonObject Answer from Telegram server (contains error information)
*/
void onError(BotApiMethod<T> method, JSONObject jsonObject);
}

38
src/main/java/org/telegram/updateshandlers/TransifexHandlers.java

@ -1,18 +1,17 @@
package org.telegram.updateshandlers; package org.telegram.updateshandlers;
import org.telegram.*; import org.telegram.*;
import org.telegram.api.Message; import org.telegram.api.objects.Message;
import org.telegram.api.Update; import org.telegram.api.objects.Update;
import org.telegram.database.DatabaseManager; import org.telegram.database.DatabaseManager;
import org.telegram.methods.SendDocument; import org.telegram.api.methods.BotApiMethod;
import org.telegram.methods.SendMessage; import org.telegram.api.methods.SendDocument;
import org.telegram.api.methods.SendMessage;
import org.telegram.services.LocalisationService; import org.telegram.services.LocalisationService;
import org.telegram.services.TransifexService; import org.telegram.services.TransifexService;
import org.telegram.updatesreceivers.UpdatesThread; import org.telegram.updatesreceivers.UpdatesThread;
import org.telegram.updatesreceivers.Webhook; import org.telegram.updatesreceivers.Webhook;
import java.util.List;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
@ -21,19 +20,16 @@ import java.util.List;
*/ */
public class TransifexHandlers implements UpdatesCallback { public class TransifexHandlers implements UpdatesCallback {
private static final String TOKEN = BotConfig.TOKENTRANSIFEX; private static final String TOKEN = BotConfig.TOKENTRANSIFEX;
private static final String webhookPath = "transifexBot"; private static final String BOTNAME = BotConfig.USERNAMETRANSIFEX;
private final Webhook webhook; private static final boolean USEWEBHOOK = false;
private final UpdatesThread updatesThread;
public TransifexHandlers() { public TransifexHandlers(Webhook webhook) {
if (BuildVars.useWebHook) { if (USEWEBHOOK) {
webhook = new Webhook(this, webhookPath); webhook.registerWebhook(this, BOTNAME);
updatesThread = null; SenderHelper.SendWebhook(Webhook.getExternalURL(BOTNAME), TOKEN);
SenderHelper.SendWebhook(webhook.getURL(), TOKEN);
} else { } else {
webhook = null;
SenderHelper.SendWebhook("", TOKEN); SenderHelper.SendWebhook("", TOKEN);
updatesThread = new UpdatesThread(TOKEN, this); new UpdatesThread(TOKEN, this);
} }
} }
@ -42,6 +38,12 @@ public class TransifexHandlers implements UpdatesCallback {
sendTransifexFile(update); sendTransifexFile(update);
} }
@Override
public BotApiMethod onWebhookUpdateReceived(Update update) {
// Webhook not supported in this example
return null;
}
public void sendTransifexFile(Update update) { public void sendTransifexFile(Update update) {
Message message = update.getMessage(); Message message = update.getMessage();
if (message != null && message.hasText()) { if (message != null && message.hasText()) {
@ -73,7 +75,7 @@ public class TransifexHandlers implements UpdatesCallback {
Commands.transifexAndroidSupportCommand); Commands.transifexAndroidSupportCommand);
sendMessageRequest.setText(helpFormated); sendMessageRequest.setText(helpFormated);
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
if (sendDocument != null) { if (sendDocument != null) {
@ -90,7 +92,7 @@ public class TransifexHandlers implements UpdatesCallback {
Commands.transifexAndroidSupportCommand); Commands.transifexAndroidSupportCommand);
sendMessageRequest.setText(helpFormated); sendMessageRequest.setText(helpFormated);
sendMessageRequest.setChatId(message.getChatId()); sendMessageRequest.setChatId(message.getChatId());
SenderHelper.SendMessage(sendMessageRequest, TOKEN); SenderHelper.SendApiMethod(sendMessageRequest, TOKEN);
} }
} }
} }

15
src/main/java/org/telegram/updateshandlers/UpdatesCallback.java

@ -1,8 +1,7 @@
package org.telegram.updateshandlers; package org.telegram.updateshandlers;
import org.telegram.api.Update; import org.telegram.api.objects.Update;
import org.telegram.api.methods.BotApiMethod;
import java.util.List;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -11,5 +10,15 @@ import java.util.List;
* @date 20 of June of 2015 * @date 20 of June of 2015
*/ */
public interface UpdatesCallback { public interface UpdatesCallback {
/**
* This method is called when receiving updates via org.telegram.api.methods.GetUpdates method
* @param update Update received
*/
void onUpdateReceived(Update update); void onUpdateReceived(Update update);
/**
* This method is called when receiving updates via webhook
* @param update Update received
*/
BotApiMethod onWebhookUpdateReceived(Update update);
} }

424
src/main/java/org/telegram/updateshandlers/WeatherHandlers.java

File diff suppressed because it is too large

33
src/main/java/org/telegram/updatesreceivers/RestApi.java

@ -1,10 +1,12 @@
package org.telegram.updatesreceivers; package org.telegram.updatesreceivers;
import org.telegram.api.Update; import org.telegram.api.objects.Update;
import org.telegram.updateshandlers.UpdatesCallback; import org.telegram.updateshandlers.UpdatesCallback;
import javax.ws.rs.*; import javax.ws.rs.*;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
@ -15,21 +17,36 @@ import javax.ws.rs.core.MediaType;
@Path("callback") @Path("callback")
public class RestApi { public class RestApi {
private final UpdatesCallback callback; private final ConcurrentHashMap<String, UpdatesCallback> callbacks = new ConcurrentHashMap<>();
public RestApi(UpdatesCallback callback) { public RestApi() {
this.callback = callback; }
public void registerCallback(UpdatesCallback callback, String botName) {
if (!callbacks.containsKey(botName)) {
callbacks.put(botName, callback);
}
} }
@POST @POST
@Path("/{botname}")
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public void updateReceived(Update update) { @Produces(MediaType.APPLICATION_JSON)
this.callback.onUpdateReceived(update); public Response updateReceived(@PathParam("botname") String botname, Update update) {
if (callbacks.containsKey(botname)) {
return Response.ok(this.callbacks.get(botname).onWebhookUpdateReceived(update)).build();
}
return Response.ok().build();
} }
@GET @GET
@Path("/{botname}")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public String testReceived() { public String testReceived(@PathParam("botname") String botname) {
return "Hi there"; if (callbacks.containsKey(botname)) {
return "Hi there " + botname + "!";
} else {
return "Callback not found for " + botname;
}
} }
} }

22
src/main/java/org/telegram/updatesreceivers/UpdatesThread.java

@ -2,29 +2,26 @@ package org.telegram.updatesreceivers;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.entity.BufferedHttpEntity; import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.api.Update; import org.telegram.api.objects.Update;
import org.telegram.database.DatabaseManager; import org.telegram.database.DatabaseManager;
import org.telegram.methods.Constants; import org.telegram.api.methods.Constants;
import org.telegram.methods.GetUpdates; import org.telegram.api.methods.GetUpdates;
import org.telegram.services.BotLogger; import org.telegram.services.BotLogger;
import org.telegram.updateshandlers.UpdatesCallback; import org.telegram.updateshandlers.UpdatesCallback;
import java.io.IOException; import java.io.IOException;
import java.io.InvalidObjectException; import java.io.InvalidObjectException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -66,16 +63,9 @@ public class UpdatesThread {
CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).setConnectionTimeToLive(20, TimeUnit.SECONDS).build(); CloseableHttpClient httpclient = HttpClientBuilder.create().setSSLHostnameVerifier(new NoopHostnameVerifier()).setConnectionTimeToLive(20, TimeUnit.SECONDS).build();
String url = Constants.BASEURL + token + "/" + GetUpdates.PATH; String url = Constants.BASEURL + token + "/" + GetUpdates.PATH;
HttpPost httpPost = new HttpPost(url); HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair(GetUpdates.OFFSET_FIELD, request.getOffset()+""));
nameValuePairs.add(new BasicNameValuePair(GetUpdates.LIMIT_FIELD, request.getLimit()+""));
if (request.getTimeout() != null) {
nameValuePairs.add(new BasicNameValuePair(GetUpdates.TIMEOUT_FIELD, request.getTimeout()+""));
}
try { try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");
httpPost.addHeader("charset", "UTF-8"); httpPost.addHeader("charset", "UTF-8");
httpPost.setEntity(new StringEntity(request.toJson().toString(), ContentType.APPLICATION_JSON));
HttpResponse response; HttpResponse response;
log.debug(httpPost.toString()); log.debug(httpPost.toString());
response = httpclient.execute(httpPost); response = httpclient.execute(httpPost);

32
src/main/java/org/telegram/updatesreceivers/Webhook.java

@ -23,16 +23,20 @@ import java.net.URI;
public class Webhook { public class Webhook {
private static volatile BotLogger log = BotLogger.getLogger(Webhook.class.getName()); private static volatile BotLogger log = BotLogger.getLogger(Webhook.class.getName());
private static final int PORT = 443;
private static final String KEYSTORE_SERVER_FILE = "./keystore_server"; private static final String KEYSTORE_SERVER_FILE = "./keystore_server";
private static final String KEYSTORE_SERVER_PWD = "asdfgh"; private static final String KEYSTORE_SERVER_PWD = "asdfgh";
private final String path; private final RestApi restApi;
public Webhook() {
this.restApi = new RestApi();
}
public void registerWebhook(UpdatesCallback callback, String botName) {
restApi.registerCallback(callback, botName);
}
public Webhook(UpdatesCallback callback, String webhookPath) { public void startServer() {
this.path = webhookPath;
RestApi restApi = new RestApi(callback);
SSLContextConfigurator sslContext = new SSLContextConfigurator(); SSLContextConfigurator sslContext = new SSLContextConfigurator();
// set up security context // set up security context
@ -43,7 +47,7 @@ public class Webhook {
rc.register(restApi); rc.register(restApi);
rc.register(JacksonFeature.class); rc.register(JacksonFeature.class);
rc.property(JSONConfiguration.FEATURE_POJO_MAPPING, true); rc.property(JSONConfiguration.FEATURE_POJO_MAPPING, true);
log.error("Internal webhook: " + getBaseURI().toString());
final HttpServer grizzlyServer = GrizzlyHttpServerFactory.createHttpServer( final HttpServer grizzlyServer = GrizzlyHttpServerFactory.createHttpServer(
getBaseURI(), getBaseURI(),
rc, rc,
@ -56,11 +60,19 @@ public class Webhook {
} }
} }
private URI getBaseURI() { public void startDebugServer() {
return URI.create(String.format("%s:%d/%s", BuildVars.INTERNALWEBHOOKURL, PORT, this.path)); ResourceConfig rc = new ResourceConfig();
rc.register(restApi);
rc.register(JacksonFeature.class);
rc.property(JSONConfiguration.FEATURE_POJO_MAPPING, true);
GrizzlyHttpServerFactory.createHttpServer(getBaseURI(), rc);
}
public static String getExternalURL(String botName) {
return String.format("%s/callback/%s", BuildVars.EXTERNALWEBHOOKURL, botName);
} }
public String getURL() { private static URI getBaseURI() {
return String.format("%s/%s/callback", BuildVars.BASEWEBHOOKURL, this.path); return URI.create(BuildVars.INTERNALWEBHOOKURL);
} }
} }

52
src/main/resources/localisation/strings.properties

@ -44,42 +44,42 @@ delete=%sDelete
showList=%sShow list showList=%sShow list
rateMe=%sRate me rateMe=%sRate me
metricSystem=Metric System metricSystem=Metric System
imperialSystem= Imperial System imperialSystem=Imperial System
selectLanguage=Your current language is %s. Select a language from the list to change to that language. selectLanguage=Your current language is *%s*. Select a language from the list to change to that language.
languageUpdated=Your language setting has been updated. languageUpdated=Your language setting has been updated.
errorLanguageNotFound= We don't support that language or a typo was made. Please select one from the list. errorLanguageNotFound= We don't support that language or a typo was made. Please select one from the list.
selectUnits=Your current unit setting is %s. Select an option from the list to change it. selectUnits=Your current unit setting is *%s*. Select an option from the list to change it.
unitsUpdated=Your unit settings have been updated. unitsUpdated=Your unit settings have been updated.
errorUnitsNotFound= We don't support that unit system or a typo was made. Please select one from the list. errorUnitsNotFound= We don't support that unit system or a typo was made. Please select one from the list.
onWeatherNewCommand=Please send me the city you are interested in, please use this format: CITY,COUNTRY onWeatherNewCommand=Please send me the city you are interested in using this format: *CITY,COUNTRY*
onWeatherLocationCommand=Please send me the location you are interested in. onWeatherLocationCommand=Please send me the location you are interested in.
onCurrentCommandFromHistory=Select an option from your recent requests, "new" to send a new city or "location" to send me a location to get current weather. onCurrentCommandFromHistory=Select an option from your _recent requests_, *new* to send a new city or *location* to send me a location to get current weather.
onCurrentCommandWithoutHistory=Select "new" to send a new city or "location" to send me a location to get current weather. onCurrentCommandWithoutHistory=Select *new* to send a new city or *location* to send me a location to get current weather.
onForecastCommandFromHistory=Select an option from your recent requests, "new" to send a new city or "location" to send me a location to get 3-day weather forecast. onForecastCommandFromHistory=Select an option from your _recent requests_, *new* to send a new city or *location* to send me a location to get _3-days_ weather forecast.
onForecastCommandWithoutHistory=Select "new" to send a new city or "location" to send me a location to get a 3-day weather forecast. onForecastCommandWithoutHistory=Select *new* to send a new city or *location* to send me a location to get a _3-days_ weather forecast.
weatherCurrent= The weather for %s is:\n\n %s weatherCurrent= The weather for *%s* is:\n\n %s
currentWeatherPartMetric=\t- Weather: %s\n\t- Cloudiness: %s\n\t- Temperature: %s ºC\n\n currentWeatherPartMetric=\t- _Weather:_ %s\n\t- _Cloudiness:_ %s\n\t- _Temperature:_ %s ºC\n\n
currentWeatherPartImperial=\t- Weather: %s\n\t- Cloudiness: %s\n\t- Temperature: %s ºF\n\n currentWeatherPartImperial=\t- _Weather:_ %s\n\t- _Cloudiness:_ %s\n\t- _Temperature:_ %s ºF\n\n
weatherForcast= The weather for %s will be:\n\n %s weatherForcast= The weather for *%s* will be:\n\n %s
forecastWeatherPartMetric= %s On %s \n\t- Forecast: %s\n\t- High temperature: %s ºC\n\t- Low temperature: %s ºC\n\n forecastWeatherPartMetric= %s On *%s* \n\t- _Forecast:_ %s\n\t- _High temperature:_ %s ºC\n\t- _Low temperature:_ %s ºC\n\n
forecastWeatherPartImperial= %s On %s \n\t- Forecast: %s\n\t- High temperature: %s ºF\n\t- Low temperature: %s ºF\n\n forecastWeatherPartImperial= %s On *%s* \n\t- _Forecast:_ %s\n\t- _High temperature:_ %s ºF\n\t- _Low temperature:_ %s ºF\n\n
weatherAlert= The weather for %s will be:\n\n %s weatherAlert= The weather for *%s* will be:\n\n %s
alertWeatherPartMetric=\t- Forecast: %s\n\t- High temperature: %s ºC\n\t- Low temperature: %s ºC\n\n alertWeatherPartMetric=\t- _Forecast:_ %s\n\t- _High temperature:_ %s ºC\n\t- _Low temperature:_ %s ºC\n\n
alertWeatherPartImperial=\t- Forecast: %s\n\t- High temperature: %s ºF\n\t- Low temperature: %s ºF\n\n alertWeatherPartImperial=\t- _Forecast:_ %s\n\t- _High temperature:_ %s ºF\n\t- _Low temperature:_ %s ºF\n\n
chooseOption=Please, select an option from the menu. chooseOption=Please, select an option from the menu.
backToMainMenu=Process cancelled, back to main menu. backToMainMenu=Process cancelled, back to main menu.
onSettingsCommand=Please, select an option:\ onSettingsCommand=Please, select an option:\
\n\t\t%s Languages: Select a forecast-language\ \n\t\t%s *Languages*: Select a _forecast-language_\
\n\t\t%s Units: Select your preferred units\ \n\t\t%s *Units*: Select your preferred _units_\
\n\t\t%s Alerts: Set daily alerts\ \n\t\t%s *Alerts*: Set daily _alerts_\
\n\t\t%s Back: Return to main menu \n\t\t%s *Back*: Return to main menu
alertsMenuMessage=Here you can manage your alerts or add new ones. alertsMenuMessage=Here you can manage your alerts or add new ones.
chooseNewAlertCity=Which city do you want to set an alert for? Select an option from your recent requests. chooseNewAlertCity=Which city do you want to set an alert for? Select an option from your _recent requests_.
newAlertSaved=%s Your alert for %s has been correctly created, you will receive the weather update twice a day. newAlertSaved=%s Your alert for *%s* has been correctly created, you will receive the weather update _twice a day_.
initialAlertList=You have %d alerts:\n\n%s initialAlertList=You have *%d* alerts:\n\n%s
partialAlertList=%s%s\n partialAlertList=%s *%s*\n
noAlertList=I couldn't find any alert for you. noAlertList=I couldn't find any alert for you.
alertDeleted=The selected alert has been deleted. alertDeleted=The selected alert has been deleted.
cityNotFound= City not found cityNotFound= City not found
errorFetchingWeather= We're sorry, there was an error fetching the weather. errorFetchingWeather= We're sorry, there was an error fetching the weather.
rateMeMessage=If you like this bot, please rate it at https://telegram.me/storebot?start=weatherbot rateMeMessage=If you like this bot, please rate it using [@storebot](https://telegram.me/storebot?start=weatherbot)
Loading…
Cancel
Save