From d42b1c9f0b2a994eef266f2669f1e1104f686271 Mon Sep 17 00:00:00 2001 From: Cadiducho Date: Thu, 10 Nov 2022 17:37:06 +0100 Subject: [PATCH] Telegram Bot API 6.3 --- README.md | 4 +- build.gradle | 16 +- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 + gradlew.bat | 14 +- .../com/cadiducho/telegrambotapi/BotAPI.java | 572 ++++++++++++++++-- .../com/cadiducho/telegrambotapi/Chat.java | 17 + .../ChatAdministratorRights.java | 5 + .../ChatMemberAdministrator.java | 5 + .../telegrambotapi/ChatMemberRestricted.java | 5 + .../telegrambotapi/ChatPermissions.java | 5 + .../cadiducho/telegrambotapi/ForumTopic.java | 41 ++ .../telegrambotapi/ForumTopicClosed.java | 18 + .../telegrambotapi/ForumTopicCreated.java | 34 ++ .../telegrambotapi/ForumTopicReopened.java | 18 + .../com/cadiducho/telegrambotapi/Message.java | 16 + .../cadiducho/telegrambotapi/TelegramBot.java | 165 ++++- 18 files changed, 858 insertions(+), 85 deletions(-) create mode 100644 src/main/java/com/cadiducho/telegrambotapi/ForumTopic.java create mode 100644 src/main/java/com/cadiducho/telegrambotapi/ForumTopicClosed.java create mode 100644 src/main/java/com/cadiducho/telegrambotapi/ForumTopicCreated.java create mode 100644 src/main/java/com/cadiducho/telegrambotapi/ForumTopicReopened.java diff --git a/README.md b/README.md index ae1729e..01d38b1 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ If you want use Telegram Bot API as a Maven Dependency simply add repo and artif com.cadiducho TelegramBotAPI - 6.2 + 6.3 ``` @@ -59,7 +59,7 @@ You can always check lastest version in [my maven repository](https://repo.cadid This project is released under the [MIT-License](https://github.com/Cadiducho/Telegram-Bot-API/blob/master/LICENSE). -> This project starts as a Bukkit-Minecraft API and now it is a standalone library. Check the original [Minegram](https://github.com/Cadiducho/Minegram)! +> This project starts as a Bukkit-Minecraft API, and now it is a standalone library. Check the original [Minegram](https://github.com/Cadiducho/Minegram)! > Cadiducho's TelegramBotAPI is highly inspired on [Irazasyed's Telegram Bot API - PHP SDK](https://github.com/irazasyed/telegram-bot-sdk) > and [Rainu's telegram-bot-api](https://github.com/rainu/telegram-bot-api), but this one is written from scratch. diff --git a/build.gradle b/build.gradle index 4493502..2015f92 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ plugins { id 'java' id 'maven-publish' - id "io.freefair.lombok" version "6.5.0.3" + id "io.freefair.lombok" version "6.5.1" } group = 'com.cadiducho' -version = '6.2.1' +version = '6.3' sourceCompatibility = '1.8' java { @@ -49,21 +49,21 @@ repositories { mavenCentral() mavenLocal() maven { - url "https://cadiducho.com/repo/" + url "https://repo.cadiducho.com/releases" } } dependencies { - implementation group: 'com.squareup.moshi', name: 'moshi', version: '1.13.0' - implementation group: 'com.squareup.moshi', name: 'moshi-adapters', version: '1.13.0' + implementation group: 'com.squareup.moshi', name: 'moshi', version: '1.14.0' + implementation group: 'com.squareup.moshi', name: 'moshi-adapters', version: '1.14.0' implementation group: 'com.squareup.okio', name: 'okio', version: '3.2.0' implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.10.0' //Tests testImplementation group: 'com.squareup.okhttp3', name: 'mockwebserver', version: '4.10.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.9.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.9.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.9.1' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.9.1' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.1' } test { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 10197 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..ae04661 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..a69d9cb 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..f127cfd 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/com/cadiducho/telegrambotapi/BotAPI.java b/src/main/java/com/cadiducho/telegrambotapi/BotAPI.java index 226b647..5f86102 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/BotAPI.java +++ b/src/main/java/com/cadiducho/telegrambotapi/BotAPI.java @@ -19,7 +19,7 @@ /** * Interface to build Telegrams Bots - * Telegram Bot API version 6.2 + * Telegram Bot API version 6.3 */ public interface BotAPI { @@ -99,8 +99,27 @@ default Message sendMessage(Object chat_id, String text) throws TelegramExceptio * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendMessage(Object chat_id, String text, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Boolean disable_web_page_preview, Integer reply_to_message_id, Object reply_markup) throws TelegramException; - + default Message sendMessage(Object chat_id, String text, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Boolean disable_web_page_preview, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendMessage(chat_id, null, text, parse_mode, disable_notification, protect_content, disable_web_page_preview, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send text messages. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param text Text of the message to be sent + * @param parse_mode Optional. Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message. + * @param disable_web_page_preview Disables link previews for links in this message + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message sendMessage(Object chat_id, Integer message_thread_id, String text, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Boolean disable_web_page_preview, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + /** * Use this method to forward messages of any kind. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) @@ -123,7 +142,22 @@ default Message forwardMessage(Object chat_id, Integer from_chat_id, Integer mes * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message forwardMessage(Object chat_id, Integer from_chat_id, Boolean disable_notification, Boolean protect_content, Integer message_id) throws TelegramException; + default Message forwardMessage(Object chat_id, Integer from_chat_id, Boolean disable_notification, Boolean protect_content, Integer message_id) throws TelegramException { + return forwardMessage(chat_id, null, from_chat_id, disable_notification, protect_content, message_id); + } + + /** + * Use this method to forward messages of any kind. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param from_chat_id Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername) + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param message_id Unique message identifier + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message forwardMessage(Object chat_id, Integer message_thread_id, Integer from_chat_id, Boolean disable_notification, Boolean protect_content, Integer message_id) throws TelegramException; /** * Use this method to copy messages of any kind. Service messages and invoice messages can't be copied. @@ -154,7 +188,28 @@ default MessageId copyMessage(Object chat_id, Object from_chat_id, Integer messa * @return Returns the MessageId of the sent message on success. * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - MessageId copyMessage(Object chat_id, Object from_chat_id, Integer message_id, String caption, String parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Boolean allow_sending_without_reply, Object reply_markup) throws TelegramException; + default MessageId copyMessage(Object chat_id, Object from_chat_id, Integer message_id, String caption, String parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Boolean allow_sending_without_reply, Object reply_markup) throws TelegramException { + return copyMessage(chat_id, null, from_chat_id, message_id, caption, parse_mode, disable_notification, protect_content, reply_to_message_id, allow_sending_without_reply, reply_markup); + } + + /** + * Use this method to copy messages of any kind. Service messages and invoice messages can't be copied. + * The method is analogous to the method forwardMessage, but the copied message doesn't have a link to the original message. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param from_chat_id Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername) + * @param message_id Message identifier in the chat specified in from_chat_id + * @param caption New caption for media, 0-1024 characters after entities parsing. If not specified, the original caption is kept + * @param parse_mode Mode for parsing entities in the new caption. See formatting options for more details. + * @param disable_notification Sends the message silently. Users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param allow_sending_without_reply Pass True, if the message should be sent even if the specified replied-to message is not found + * @param reply_markup Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. + * @return Returns the MessageId of the sent message on success. + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + MessageId copyMessage(Object chat_id, Integer message_thread_id, Object from_chat_id, Integer message_id, String caption, String parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Boolean allow_sending_without_reply, Object reply_markup) throws TelegramException; /** * Use this method to send photos. On success, the sent {@link Message} is returned. @@ -177,10 +232,28 @@ default Message sendPhoto(Object chat_id, String photo) throws TelegramException default Message sendPhoto(Object chat_id, java.io.File photo) throws TelegramException { return sendPhoto(chat_id, photo, null, false, null, null, null); } + + /** + * Use this method to send photos. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param photo Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data. + * @param caption Photo caption (may also be used when resending photos by file_id). + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendPhoto(Object chat_id, Object photo, String caption, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendPhoto(chat_id, null, photo, caption, disable_notification, protect_content, reply_to_message_id, reply_markup); + } /** * Use this method to send photos. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param photo Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data. * @param caption Photo caption (may also be used when resending photos by file_id). * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. @@ -191,7 +264,7 @@ default Message sendPhoto(Object chat_id, java.io.File photo) throws TelegramExc * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendPhoto(Object chat_id, Object photo, String caption, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendPhoto(Object chat_id, Integer message_thread_id, Object photo, String caption, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send audio files, if you want Telegram clients to display them in the music player. @@ -226,7 +299,33 @@ default Message sendAudio(Object chat_id, String audio) throws TelegramException default Message sendAudio(Object chat_id, java.io.File audio) throws TelegramException { return sendAudio(chat_id, audio, null, null, null, null, false, null, null, null); } - + + /** + * Use this method to send audio files, if you want Telegram clients to display them in the music player. + * Your audio must be in the .mp3 format. On success, the sent {@link Message} is returned. + * Bots can currently send audio files of up to 50 MB in size, this limit may be changed in the future. + * + * For backward compatibility, when the fields title and performer are both empty and the mime-type of the file to be sent is not audio/mpeg, + * the file will be sent as a playable voice message. For this to work, the audio must be in an .ogg file encoded with OPUS. + * This behavior will be phased out in the future. For sending voice messages, use the sendVoice method instead. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param audio Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data. + * @param caption Audio caption, 0-200 characters + * @param duration Duration of the audio in seconds + * @param performer Performer + * @param title Track name + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendAudio(Object chat_id, Object audio, String caption, Integer duration, String performer, String title, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendAudio(chat_id, null, audio, caption, duration, performer, title, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send audio files, if you want Telegram clients to display them in the music player. * Your audio must be in the .mp3 format. On success, the sent {@link Message} is returned. @@ -236,6 +335,7 @@ default Message sendAudio(Object chat_id, java.io.File audio) throws TelegramExc * the file will be sent as a playable voice message. For this to work, the audio must be in an .ogg file encoded with OPUS. * This behavior will be phased out in the future. For sending voice messages, use the sendVoice method instead. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param audio Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data. * @param caption Audio caption, 0-200 characters * @param duration Duration of the audio in seconds @@ -249,7 +349,7 @@ default Message sendAudio(Object chat_id, java.io.File audio) throws TelegramExc * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendAudio(Object chat_id, Object audio, String caption, Integer duration, String performer, String title, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendAudio(Object chat_id, Integer message_thread_id, Object audio, String caption, Integer duration, String performer, String title, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send general files. On success, the sent {@link Message} is returned. @@ -276,11 +376,31 @@ default Message sendDocument(Object chat_id, String document) throws TelegramExc default Message sendDocument(Object chat_id, java.io.File document) throws TelegramException { return sendDocument(chat_id, document, null, false, null, null, null); } - + + /** + * Use this method to send general files. On success, the sent {@link Message} is returned. + * Bots can currently send files of any type of up to 50 MB in size, this limit may be changed in the future. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param document File to send. You can either pass a file_id as String to resend a file that is already on the Telegram servers, + * or upload a new file using multipart/form-data. + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param disable_content_type_detection Disables automatic server-side content type detection for files uploaded using multipart/form-data + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendDocument(Object chat_id, Object document, Boolean disable_content_type_detection, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendDocument(chat_id, null, document, disable_content_type_detection, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send general files. On success, the sent {@link Message} is returned. * Bots can currently send files of any type of up to 50 MB in size, this limit may be changed in the future. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param document File to send. You can either pass a file_id as String to resend a file that is already on the Telegram servers, * or upload a new file using multipart/form-data. * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. @@ -292,7 +412,7 @@ default Message sendDocument(Object chat_id, java.io.File document) throws Teleg * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendDocument(Object chat_id, Object document, Boolean disable_content_type_detection, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendDocument(Object chat_id, Integer message_thread_id, Object document, Boolean disable_content_type_detection, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send video files, Telegram clients support mp4 videos (other formats may be sent as {@link Document}). @@ -321,7 +441,7 @@ default Message sendVideo(Object chat_id, String video) throws TelegramException default Message sendVideo(Object chat_id, java.io.File video) throws TelegramException { return sendVideo(chat_id, video, null, null, null, null, null, null, false, null, null, null); } - + /** * Use this method to send video files, Telegram clients support mp4 videos (other formats may be sent as {@link Document}). * Bots can currently send video files of up to 50 MB in size, this limit may be changed in the future. @@ -336,12 +456,36 @@ default Message sendVideo(Object chat_id, java.io.File video) throws TelegramExc * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. * @param protect_content Protects the contents of the sent message from forwarding and saving. * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendVideo(Object chat_id, Object video, Integer duration, Integer width, Integer height, String caption, ParseMode parse_mode, Boolean supports_streaming, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendVideo(chat_id, null, video, duration, width, height, caption, parse_mode, supports_streaming, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send video files, Telegram clients support mp4 videos (other formats may be sent as {@link Document}). + * Bots can currently send video files of up to 50 MB in size, this limit may be changed in the future. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param video Video file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data. + * @param duration Duration of the video in seconds + * @param width Video width + * @param height Video height + * @param caption Video caption (may also be used when resending videos by file_id), 0-200 characters + * @param parse_mode Optional. Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message. + * @param supports_streaming Pass True, if the uploaded video is suitable for streaming + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendVideo(Object chat_id, Object video, Integer duration, Integer width, Integer height, String caption, ParseMode parse_mode, Boolean supports_streaming, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendVideo(Object chat_id, Integer message_thread_id, Object video, Integer duration, Integer width, Integer height, String caption, ParseMode parse_mode, Boolean supports_streaming, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound). @@ -389,7 +533,32 @@ default Message sendAnimation(Object chat_id, java.io.File animation) throws Tel * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendAnimation(Object chat_id, Object animation, Integer duration, Integer width, Integer height, Object thumb, String caption, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + default Message sendAnimation(Object chat_id, Object animation, Integer duration, Integer width, Integer height, Object thumb, String caption, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendAnimation(chat_id, null, animation, duration, width, height, thumb, caption, parse_mode, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound). + * On success, the sent {@link Message} is returned. + * Bots can currently send animation files of up to 50 MB in size, this limit may be changed in the future. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param animation Animation to send. Pass a file_id as String to send an animation that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation from the Internet, or upload a new animation using multipart/form-data. + * @param duration Duration of the animation in seconds + * @param width Animation width + * @param height Animation height + * @param thumb Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail‘s width and height should not exceed 90. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can’t be reused and can be only uploaded as a new file, so you can pass “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. + * @param caption Animation caption (may also be used when resending videos by file_id), 0-1024 characters + * @param parse_mode Optional. Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message. + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message sendAnimation(Object chat_id, Integer message_thread_id, Object animation, Integer duration, Integer width, Integer height, Object thumb, String caption, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send audio files, if you want Telegram clients to display the file as a playable voice message. @@ -418,12 +587,34 @@ default Message sendVoice(Object chat_id, String voice) throws TelegramException default Message sendVoice(Object chat_id, java.io.File voice) throws TelegramException { return sendVoice(chat_id, voice, null, null, false, null, null, null); } - + + /** + * Use this method to send audio files, if you want Telegram clients to display the file as a playable voice message. + * For this to work, your audio must be in an .ogg file encoded with OPUS (other formats may be sent as {@link Audio} or {@link Document}). + * On success, the sent {@link Message} is returned. Bots can currently send voice messages of up to 50 MB in size, this limit may be changed in the future. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param voice Audio file to send. You can either pass a file_id as String to resend a video that is already on the Telegram servers, + * or upload a new video file using multipart/form-data. + * @param caption Voice message caption, 0-200 characters + * @param duration Duration of the audio in seconds + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendVoice(Object chat_id, Object voice, String caption, Integer duration, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendVoice(chat_id, null, voice, caption, duration, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send audio files, if you want Telegram clients to display the file as a playable voice message. * For this to work, your audio must be in an .ogg file encoded with OPUS (other formats may be sent as {@link Audio} or {@link Document}). * On success, the sent {@link Message} is returned. Bots can currently send voice messages of up to 50 MB in size, this limit may be changed in the future. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param voice Audio file to send. You can either pass a file_id as String to resend a video that is already on the Telegram servers, * or upload a new video file using multipart/form-data. * @param caption Voice message caption, 0-200 characters @@ -436,7 +627,7 @@ default Message sendVoice(Object chat_id, java.io.File voice) throws TelegramExc * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendVoice(Object chat_id, Object voice, String caption, Integer duration, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendVoice(Object chat_id, Integer message_thread_id, Object voice, String caption, Integer duration, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send a group of photos or videos as an album. @@ -458,7 +649,21 @@ default Message sendMediaGroup(Object chat_id, List media) throws Te * @return An array of the sent Messages is returned on success * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendMediaGroup(Object chat_id, List media, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id) throws TelegramException; + default Message sendMediaGroup(Object chat_id, List media, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id) throws TelegramException { + return sendMediaGroup(chat_id, null, media, disable_notification, protect_content, reply_to_message_id); + } + + /** + * Use this method to send a group of photos or videos as an album. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param media A JSON-serialized array describing photos and videos to be sent, must include 2–10 items + * @param disable_notification Sends the messages silently. Users will receive a notification with no sound. + * @param reply_to_message_id If the messages are a reply, ID of the original message + * @return An array of the sent Messages is returned on success + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message sendMediaGroup(Object chat_id, Integer message_thread_id, List media, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id) throws TelegramException; /** * Use this method to send point on the map. On success, the sent {@link Message} is returned. @@ -471,7 +676,7 @@ default Message sendMediaGroup(Object chat_id, List media) throws Te default Message sendLocation(Object chat_id, Float latitude, Float longitude) throws TelegramException { return sendLocation(chat_id, latitude, longitude, null, null, null, null, false, null, null, null); } - + /** * Use this method to send point on the map. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) @@ -484,12 +689,34 @@ default Message sendLocation(Object chat_id, Float latitude, Float longitude) th * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. * @param protect_content Protects the contents of the sent message from forwarding and saving. * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendLocation(Object chat_id, Float latitude, Float longitude, Float horizontal_accuracy, Integer live_period, Integer heading, Integer proximity_alert_radius, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendLocation(chat_id, null, latitude, longitude, horizontal_accuracy, live_period, heading, proximity_alert_radius, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send point on the map. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param latitude Latitude of location + * @param longitude Longitude of location + * @param horizontal_accuracy The radius of uncertainty for the location, measured in meters; 0-1500 + * @param live_period Period in seconds for which the location will be updated (should be between 60 and 86400). + * @param heading For live locations, a direction in which the user is moving, in degrees. Must be between 1 and 360 if specified. + * @param proximity_alert_radius For live locations, a maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified. + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendLocation(Object chat_id, Float latitude, Float longitude, Float horizontal_accuracy, Integer live_period, Integer heading, Integer proximity_alert_radius, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendLocation(Object chat_id, Integer message_thread_id, Float latitude, Float longitude, Float horizontal_accuracy, Integer live_period, Integer heading, Integer proximity_alert_radius, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to edit live location messages sent by the bot or via the bot (for inline bots). @@ -544,7 +771,7 @@ default Message sendVideoNote(Object chat_id, String video_note) throws Telegram default Message sendVideoNote(Object chat_id, java.io.File video_note) throws TelegramException { return sendVideoNote(chat_id, video_note, null, null, false, null, null, null); } - + /** * As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long. Use this method to send video messages. On success, the sent Message is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) @@ -554,12 +781,31 @@ default Message sendVideoNote(Object chat_id, java.io.File video_note) throws Te * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. * @param protect_content Protects the contents of the sent message from forwarding and saving. * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendVideoNote(Object chat_id, Object video_note, Integer duration, Integer length, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendVideoNote(chat_id, null, video_note, duration, length, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long. Use this method to send video messages. On success, the sent Message is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param video_note Video note to send. Pass a file_id as String to send a video note that exists on the Telegram servers (recommended) or upload a new video using multipart/form-data. More info on Sending Files ». Sending video notes by a URL is currently unsupported + * @param duration Duration of sent video in seconds + * @param length Video width and height + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendVideoNote(Object chat_id, Object video_note, Integer duration, Integer length, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendVideoNote(Object chat_id, Integer message_thread_id, Object video_note, Integer duration, Integer length, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send information about a venue. On success, the sent {@link Message} is returned. @@ -574,10 +820,32 @@ default Message sendVideoNote(Object chat_id, java.io.File video_note) throws Te default Message sendVenue(Object chat_id, Float latitude, Float longitude, String title, String address) throws TelegramException { return sendVenue(chat_id, latitude, longitude, title, address, null, null, false, null, null, null); } - + + /** + * Use this method to send information about a venue. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param latitude Latitude of the venue + * @param longitude Longitude of the venue + * @param title Name of the venue + * @param address Address of the venue + * @param foursquare_id Foursquare identifier of the venue + * @param foursquare_type Foursquare type of the venue, if known. (For example, “arts_entertainment/default”, “arts_entertainment/aquarium” or “food/icecream”.) + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendVenue(Object chat_id, Float latitude, Float longitude, String title, String address, String foursquare_id, String foursquare_type, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendVenue(chat_id, null, latitude, longitude, title, address, foursquare_id, foursquare_type, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send information about a venue. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param latitude Latitude of the venue * @param longitude Longitude of the venue * @param title Name of the venue @@ -592,7 +860,7 @@ default Message sendVenue(Object chat_id, Float latitude, Float longitude, Strin * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendVenue(Object chat_id, Float latitude, Float longitude, String title, String address, String foursquare_id, String foursquare_type, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendVenue(Object chat_id, Integer message_thread_id, Float latitude, Float longitude, String title, String address, String foursquare_id, String foursquare_type, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send phone contacts. On success, the sent {@link Message} is returned. @@ -605,10 +873,30 @@ default Message sendVenue(Object chat_id, Float latitude, Float longitude, Strin default Message sendContact(Object chat_id, String phone_number, String first_name) throws TelegramException { return sendContact(chat_id, phone_number, first_name, null, null, false, null, null, null); } - + + /** + * Use this method to send phone contacts. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param phone_number Contact's phone number + * @param first_name Contact's first name + * @param last_name Contact's last name + * @param vcard Additional data about the contact in the form of a vCard, 0-2048 bytes + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendContact(Object chat_id, String phone_number, String first_name, String last_name, String vcard, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendContact(chat_id, null, phone_number, first_name, last_name, vcard, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send phone contacts. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param phone_number Contact's phone number * @param first_name Contact's first name * @param last_name Contact's last name @@ -621,7 +909,7 @@ default Message sendContact(Object chat_id, String phone_number, String first_na * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendContact(Object chat_id, String phone_number, String first_name, String last_name, String vcard, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + Message sendContact(Object chat_id, Integer message_thread_id, String phone_number, String first_name, String last_name, String vcard, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to send a native poll. A native poll can't be sent to a private chat. On success, the sent {@link Message} is returned. @@ -652,12 +940,42 @@ default Message sendPoll(Object chat_id, String question, List options) * @param disable_notification Sends the message silently. Users will receive a notification with no sound. * @param protect_content Protects the contents of the sent message from forwarding and saving. * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws TelegramException if the method fails in Telegram servers + */ + default Message sendPoll(Object chat_id, String question, List options, Boolean is_anonymous, String type, Boolean allows_multiple_answers, + Integer correct_option_id, String explanation, String explanation_parse_mode, Integer open_period, Integer close_date, + Boolean is_closed, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendPoll(chat_id, null, question, options, is_anonymous, type, allows_multiple_answers, correct_option_id, explanation, + explanation_parse_mode, open_period, close_date, is_closed, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send a native poll. A native poll can't be sent to a private chat. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername). A native poll can't be sent to a private chat. + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param question Poll question, 1-255 characters + * @param options List of answer options, 2-10 strings 1-100 characters each + * @param is_anonymous True, if the poll needs to be anonymous, defaults to True + * @param type Poll type, “quiz” or “regular”, defaults to “regular” + * @param allows_multiple_answers True, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to False + * @param correct_option_id 0-based identifier of the correct answer option, required for polls in quiz mode + * @param explanation Text that is shown when a user chooses an incorrect answer or taps on the lamp icon in a quiz-style poll, 0-200 characters with at most 2 line feeds after entities parsing + * @param explanation_parse_mode Mode for parsing entities in the explanation. See formatting options for more details. + * @param open_period Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with close_date. + * @param close_date Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with open_period. + * @param is_closed Pass True, if the poll needs to be immediately closed + * @param disable_notification Sends the message silently. Users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. * @return {@link Message} * @throws TelegramException if the method fails in Telegram servers */ - Message sendPoll(Object chat_id, String question, List options, Boolean is_anonymous, String type, Boolean allows_multiple_answers, + Message sendPoll(Object chat_id, Integer message_thread_id, String question, List options, Boolean is_anonymous, String type, Boolean allows_multiple_answers, Integer correct_option_id, String explanation, String explanation_parse_mode, Integer open_period, Integer close_date, Boolean is_closed, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; @@ -682,7 +1000,23 @@ default Message sendDice(Object chat_id) throws TelegramException { * @return On success, the sent Message is returned. * @throws TelegramException if the method fails in Telegram servers */ - Message sendDice(Object chat_id, String emoji, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + default Message sendDice(Object chat_id, String emoji, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendDice(chat_id, null, emoji, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send a dice, which will have a random value from 1 to 6. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param emoji Emoji on which the dice throw animation is based. Currently, must be one of “🎲”, “🎯”, “🏀”, “⚽”, “🎳”, or “🎰”. Dice can have values 1-6 for “🎲”, “🎯” and “🎳”, values 1-5 for “🏀” and “⚽”, and values 1-64 for “🎰”. Defaults to “🎲” + * @param disable_notification Sends the message silently. Users will receive a notification with no sound. + * @param protect_content Protects the contents of the sent message from forwarding and saving. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. + * @return On success, the sent Message is returned. + * @throws TelegramException if the method fails in Telegram servers + */ + Message sendDice(Object chat_id, Integer message_thread_id, String emoji, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method when you need to tell the user that something is happening on the bot's side. @@ -842,19 +1176,6 @@ default Boolean restrictChatMember(Object chat_id, Long user_id, ChatPermissions */ Boolean restrictChatMember(Object chat_id, Long user_id, ChatPermissions permissions, Integer until_date) throws TelegramException; - /** - * Use this method to promote or demote a user in a supergroup or a channel. - * The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - * Pass False for all boolean parameters to demote a user - * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) - * @param user_id Unique identifier of the target user - * @return On success, True is returned. - * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers - */ - default Boolean promoteChatMember(Object chat_id, Long user_id) throws TelegramException { - return promoteChatMember(chat_id, user_id, false, false, false, false, false, false, false, false, false, false, false); - } - /** * Use this method to promote or demote a user in a supergroup or a channel. * The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. @@ -872,11 +1193,12 @@ default Boolean promoteChatMember(Object chat_id, Long user_id) throws TelegramE * @param can_restrict_members Pass True, if the administrator can restrict, ban or unban chat members * @param can_pin_messages Pass True, if the administrator can pin messages, supergroups only * @param can_promote_members Pass True, if the administrator can add new administrators with a subset of his own privileges or demote administrators that he has promoted, directly or indirectly (promoted by administrators that were appointed by him) + * @param can_manage_topics Pass True if the user is allowed to create, rename, close, and reopen forum topics, supergroups only * @return On success, True is returned. * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ Boolean promoteChatMember(Object chat_id, Long user_id, Boolean is_anonymous, Boolean can_manage_chat, Boolean can_change_info, Boolean can_post_messages, Boolean can_edit_messages, - Boolean can_delete_messages, Boolean can_manage_voice_chats, Boolean can_invite_users, Boolean can_restrict_members, Boolean can_pin_messages, Boolean can_promote_members) throws TelegramException; + Boolean can_delete_messages, Boolean can_manage_voice_chats, Boolean can_invite_users, Boolean can_restrict_members, Boolean can_pin_messages, Boolean can_promote_members, Boolean can_manage_topics) throws TelegramException; /** * Use this method to set a custom title for an administrator in a supergroup promoted by the bot @@ -1162,7 +1484,91 @@ default Boolean unpinChatMessage(Object chat_id) throws TelegramException { * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ Boolean deleteChatStickerSet(Object chat_id) throws TelegramException; - + + + /** + * Use this method to get custom emoji stickers, which can be used as a forum topic icon by any user. Requires no parameters. Returns an Array of Sticker objects. + * @return Array of {@link Sticker} objects. + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + List getForumTopicIconStickers() throws TelegramException; + + /** + * Use this method to create a topic in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have the can_manage_topics administrator rights. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param name Topic name, 1-128 characters + * @return Returns information about the created topic as a {@link ForumTopic} object. + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default ForumTopic createForumTopic(Object chat_id, String name) throws TelegramException { + return createForumTopic(chat_id, name, null, null); + } + + /** + * Use this method to create a topic in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have the can_manage_topics administrator rights. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param name Topic name, 1-128 characters + * @param icon_color Color of the topic icon in RGB format. Currently, must be one of 0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, or 0xFB6F5F + * @param icon_custom_emoji_id Unique identifier of the custom emoji shown as the topic icon. Use {@link #getForumTopicIconStickers} to get all allowed custom emoji identifiers + * @return Returns information about the created topic as a {@link ForumTopic} object. + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + ForumTopic createForumTopic(Object chat_id, String name, Integer icon_color, String icon_custom_emoji_id) throws TelegramException; + + /** + * Use this method to edit name and icon of a topic in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have can_manage_topics administrator rights, unless it is the creator of the topic. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param message_thread_id Unique identifier for the target message thread of the forum topic + * @param name Topic name, 1-128 characters + * @param icon_custom_emoji_id Unique identifier of the custom emoji shown as the topic icon. Use {@link #getForumTopicIconStickers} to get all allowed custom emoji identifiers + * @return On success, True is returned. + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Boolean editForumTopic(Object chat_id, Integer message_thread_id, String name, String icon_custom_emoji_id) throws TelegramException; + + /** + * Use this method to close an open topic in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param message_thread_id Unique identifier for the target message thread of the forum topic + * @return On success, True is returned. + * @throws TelegramException if the method fails in Telegram servers + */ + Boolean closeForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException; + + /** + * Use this method to reopen a closed topic in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param message_thread_id Unique identifier for the target message thread of the forum topic + * @return On success, True is returned. + * @throws TelegramException if the method fails in Telegram servers + */ + Boolean reopenForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException; + + /** + * Use this method to delete a forum topic along with all its messages in a forum supergroup chat. + * The bot must be an administrator in the chat for this to work and must have the can_delete_messages administrator rights. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param message_thread_id Unique identifier for the target message thread of the forum topic + * @return On success, True is returned. + * @throws TelegramException if the method fails in Telegram servers + */ + Boolean deleteForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException; + + /** + * Use this method to clear the list of pinned messages in a forum topic. + * The bot must be an administrator in the chat for this to work and must have the can_pin_messages administrator right in the supergroup. + * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) + * @param message_thread_id Unique identifier for the target message thread of the forum topic + * @return On success, True is returned. + * @throws TelegramException if the method fails in Telegram servers + */ + Boolean unpinAllForumTopicMessages(Object chat_id, Integer message_thread_id) throws TelegramException; + /** * Use this method to send answers to callback queries sent from inline keyboards. * The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. @@ -1354,6 +1760,8 @@ default Poll stopPoll(Object chat_id, Integer message_id) throws TelegramExcepti /** * Use this method to delete a message, including service messages, with the following limitations: * - A message can only be deleted if it was sent less than 48 hours ago. + * - Service messages about a supergroup, channel, or forum topic creation can't be deleted. + * - A dice message in a private chat can only be deleted if it was sent more than 24 hours ago. * - Bots can delete outgoing messages in private chats, groups, and supergroups. * - Bots can delete incoming messages in private chats. * - Bots granted can_post_messages permissions can delete outgoing messages in channels. @@ -1479,7 +1887,24 @@ default Message sendSticker(Object chat_id, java.io.File sticker) throws Telegra * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendSticker(Object chat_id, Object sticker, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; + default Message sendSticker(Object chat_id, Object sticker, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + return sendSticker(chat_id, null, sticker, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + + /** + * Use this method to send static .WEBP or animated .TGS stickers. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat or username of the target channel (in the format @channelusername) + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param sticker Sticker to send. You can either pass a file_id as String to resend a sticker that is already on the Telegram servers, + * or upload a new sticker using multipart/form-data. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param disable_notification Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound. + * @param reply_markup Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user. + * It can be {@link ReplyKeyboardMarkup}, {@link ReplyKeyboardRemove} or {@link ForceReply}. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message sendSticker(Object chat_id, Integer message_thread_id, Object sticker, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException; /** * Use this method to get a sticker set. On success, a StickerSet object is returned. @@ -1665,7 +2090,7 @@ default Message sendInvoice(Integer chat_id, String title, String description, S List prices, Integer max_tip_amount, List suggested_tip_amounts, String start_parameter) throws TelegramException { return sendInvoice(chat_id, title, description, payload, provider_token, start_parameter, currency, prices, null, null, null, null, null, false, false, false, false, false, false, false, false, null, null, null); } - + /** * Use this method to send invoices. On success, the sent Message is returned. * @param chat_id Unique identifier for the target private chat @@ -1694,11 +2119,49 @@ default Message sendInvoice(Integer chat_id, String title, String description, S * @return {@link Message} * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendInvoice(Integer chat_id, String title, String description, String payload, String provider_token, String start_parameter, String currency, + default Message sendInvoice(Integer chat_id, String title, String description, String payload, String provider_token, String start_parameter, String currency, + List prices, String provider_data, String photo_url, Integer photo_size, Integer photo_width, Integer photo_height, Boolean need_name, Boolean need_phone_number, + Boolean need_email, Boolean need_shipping_address, Boolean send_phone_number_to_provider, Boolean send_email_to_provider, Boolean is_flexible, Boolean disable_notification, + Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException { + return sendInvoice(chat_id, null, title, description, payload, provider_token, start_parameter, currency, prices, provider_data, photo_url, photo_size, photo_width, + photo_height, need_name, need_phone_number, need_email, need_shipping_address, send_phone_number_to_provider, send_email_to_provider, is_flexible, disable_notification, + protect_content, reply_to_message_id, reply_markup); + } + + + /** + * Use this method to send invoices. On success, the sent Message is returned. + * @param chat_id Unique identifier for the target private chat + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * @param title Product name + * @param description Product description + * @param payload Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + * @param provider_token Payments provider token, obtained via Botfather + * @param start_parameter Unique deep-linking parameter that can be used to generate this invoice when used as a start parameter + * @param currency Three-letter ISO 4217 currency code, see more on https://core.telegram.org/bots/payments#supported-currencies + * @param prices Price breakdown, a list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.) + * @param provider_data JSON-encoded data about the invoice, which will be shared with the payment provider. A detailed description of required fields should be provided by the payment provider. + * @param photo_url URL of the product photo for the invoice. Can be a photo of the goods or a marketing image for a service. People like it better when they see what they are paying for. + * @param photo_size Photo size + * @param photo_width Photo width + * @param photo_height Photo height + * @param need_name Pass True, if you require the user's full name to complete the order + * @param need_phone_number Pass True, if you require the user's phone number to complete the order + * @param need_email Pass True, if you require the user's email to complete the order + * @param need_shipping_address Pass True, if you require the user's shipping address to complete the order + * @param send_phone_number_to_provider Pass True, if user's phone number should be sent to provider + * @param send_email_to_provider Pass True, if user's email address should be sent to provider + * @param is_flexible Pass True, if the final price depends on the shipping method + * @param disable_notification Sends the message silently. Users will receive a notification with no sound. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup A JSON-serialized object for an inline keyboard. If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button. + * @return {@link Message} + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + Message sendInvoice(Integer chat_id, Integer message_thread_id, String title, String description, String payload, String provider_token, String start_parameter, String currency, List prices, String provider_data, String photo_url, Integer photo_size, Integer photo_width, Integer photo_height, Boolean need_name, Boolean need_phone_number, Boolean need_email, Boolean need_shipping_address, Boolean send_phone_number_to_provider, Boolean send_email_to_provider, Boolean is_flexible, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException; - default String createInvoiceLink(String title, String description, String payload, String provider_token, String currency, List prices) throws TelegramException { return createInvoiceLink(title, description, payload, provider_token, currency, prices, null, null, null, null, null, null, null, null, null, null, null, null, null, null); } @@ -1767,10 +2230,25 @@ default Boolean answerPreCheckoutQuery(String pre_checkout_query_id, Boolean ok) default Message sendGame(Object chat_id, String game_short_name) throws TelegramException { return sendGame(chat_id, game_short_name, null, null, null, null); } - + + /** + * Use this method to send a game. On success, the sent {@link Message} is returned. + * @param chat_id Unique identifier for the target chat + * @param game_short_name Short name of the game, serves as the unique identifier for the game. + * @param disable_notification Sends the message silently. Users will receive a notification with no sound. + * @param reply_to_message_id If the message is a reply, ID of the original message + * @param reply_markup A JSON-serialized object for an inline keyboard. If empty, one ‘Play game_title’ button will be shown. If not empty, the first button must launch the game. + * @return On success, the sent message + * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers + */ + default Message sendGame(Object chat_id, String game_short_name, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException { + return sendDice(chat_id, null, game_short_name, disable_notification, protect_content, reply_to_message_id, reply_markup); + } + /** * Use this method to send a game. On success, the sent {@link Message} is returned. * @param chat_id Unique identifier for the target chat + * @param message_thread_id Optional. Unique identifier for the target message thread (topic) of the forum; for forum supergroups only * @param game_short_name Short name of the game, serves as the unique identifier for the game. * @param disable_notification Sends the message silently. Users will receive a notification with no sound. * @param reply_to_message_id If the message is a reply, ID of the original message @@ -1778,7 +2256,7 @@ default Message sendGame(Object chat_id, String game_short_name) throws Telegram * @return On success, the sent message * @throws com.cadiducho.telegrambotapi.exception.TelegramException if the method fails in Telegram servers */ - Message sendGame(Object chat_id, String game_short_name, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException; + Message sendGame(Object chat_id, Integer message_thread_id, String game_short_name, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException; /** * Use this method to set the score of the specified user in a game. diff --git a/src/main/java/com/cadiducho/telegrambotapi/Chat.java b/src/main/java/com/cadiducho/telegrambotapi/Chat.java index 3454e99..456f0ba 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/Chat.java +++ b/src/main/java/com/cadiducho/telegrambotapi/Chat.java @@ -12,6 +12,8 @@ import lombok.Setter; import lombok.ToString; +import java.util.List; + /** * Represents a chat. * This might be a chat with a {@link User} or a GroupChat @@ -50,12 +52,27 @@ public class Chat { * Optional. Last name of the other party in a private chat */ @Json(name = "last_name") private String lastName; + + /** + * Optional. True, if the supergroup chat is a forum (has topics enabled) + */ + @Json(name = "is_forum") private String isForum; /** * Optional. Chat photo. Returned only in getChat. */ private ChatPhoto photo; + /** + * Optional. If non-empty, the list of all active chat usernames; for private chats, supergroups and channels. Returned only in getChat. + */ + @Json(name = "active_usernames") private List activeUsernames; + + /** + * Optional. Custom emoji identifier of emoji status of the other party in a private chat. Returned only in getChat. + */ + @Json(name = "emoji_status_custom_emoji_id") private String emojiStatusCustomEmojiId; + /** * Optional. Bio of the other party in a private chat. Returned only in getChat. */ diff --git a/src/main/java/com/cadiducho/telegrambotapi/ChatAdministratorRights.java b/src/main/java/com/cadiducho/telegrambotapi/ChatAdministratorRights.java index f69cb7e..1b5466e 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/ChatAdministratorRights.java +++ b/src/main/java/com/cadiducho/telegrambotapi/ChatAdministratorRights.java @@ -71,4 +71,9 @@ public class ChatAdministratorRights { * Optional. True, if the user is allowed to pin messages; groups and supergroups only */ @Json(name = "can_pin_messages") private Boolean canPinMessages; + + /** + * Optional. True, if the user is allowed to create, rename, close, and reopen forum topics; supergroups only + */ + @Json(name = "can_manage_topics") private Boolean canManageTopics; } diff --git a/src/main/java/com/cadiducho/telegrambotapi/ChatMemberAdministrator.java b/src/main/java/com/cadiducho/telegrambotapi/ChatMemberAdministrator.java index 30be3e6..f764818 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/ChatMemberAdministrator.java +++ b/src/main/java/com/cadiducho/telegrambotapi/ChatMemberAdministrator.java @@ -82,6 +82,11 @@ public ChatMemberAdministrator(String status, User user) { */ @Json(name = "can_pin_messages") private Boolean canPinMessages; + /** + * Optional. True, if the user is allowed to create, rename, close, and reopen forum topics; supergroups only + */ + @Json(name = "can_manage_topics") private Boolean canManageTopics; + /** * Optional. Custom title for this user */ diff --git a/src/main/java/com/cadiducho/telegrambotapi/ChatMemberRestricted.java b/src/main/java/com/cadiducho/telegrambotapi/ChatMemberRestricted.java index c2a15ac..077f9af 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/ChatMemberRestricted.java +++ b/src/main/java/com/cadiducho/telegrambotapi/ChatMemberRestricted.java @@ -41,6 +41,11 @@ public ChatMemberRestricted(String status, User user) { */ @Json(name = "can_pin_messages") private Boolean canPinMessages; + /** + * True, if the user is allowed to create forum topics + */ + @Json(name = "can_manage_topics") private Boolean canManageTopics; + /** * True, if the user is allowed to send text messages, contacts, locations and venues */ diff --git a/src/main/java/com/cadiducho/telegrambotapi/ChatPermissions.java b/src/main/java/com/cadiducho/telegrambotapi/ChatPermissions.java index 9f0d55b..1da28e8 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/ChatPermissions.java +++ b/src/main/java/com/cadiducho/telegrambotapi/ChatPermissions.java @@ -58,5 +58,10 @@ public class ChatPermissions { * Optional. True, if the user is allowed to pin messages. Ignored in public supergroups */ @Json(name = "can_pin_messages") private Boolean canPinMessages; + + /** + * Optional. True, if the user is allowed to create forum topics. If omitted defaults to the value of can_pin_messages + */ + @Json(name = "can_manage_topics") private Boolean canManageTopics; } diff --git a/src/main/java/com/cadiducho/telegrambotapi/ForumTopic.java b/src/main/java/com/cadiducho/telegrambotapi/ForumTopic.java new file mode 100644 index 0000000..60ed641 --- /dev/null +++ b/src/main/java/com/cadiducho/telegrambotapi/ForumTopic.java @@ -0,0 +1,41 @@ +/* + * The MIT License + * + * Copyright 2022 Cadiducho. + * Read more in https://github.com/Cadiducho/Telegram-Bot-API/blob/master/LICENSE + */ + +package com.cadiducho.telegrambotapi; + +import com.squareup.moshi.Json; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * This object represents a forum topic. + */ +@ToString +@Getter @Setter +public class ForumTopic { + + /** + * Unique identifier of the forum topic + */ + @Json(name = "message_thread_id") private Integer messageThreadId; + + /** + * Name of the topic + */ + private String name; + + /** + * Color of the topic icon in RGB format + */ + @Json(name = "icon_color") private Integer iconColor; + + /** + * Optional. Unique identifier of the custom emoji shown as the topic icon + */ + @Json(name = "icon_custom_emoji_id") private String iconCustomEmojiId; +} diff --git a/src/main/java/com/cadiducho/telegrambotapi/ForumTopicClosed.java b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicClosed.java new file mode 100644 index 0000000..cf9e955 --- /dev/null +++ b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicClosed.java @@ -0,0 +1,18 @@ +/* + * The MIT License + * + * Copyright 2022 Cadiducho. + * Read more in https://github.com/Cadiducho/Telegram-Bot-API/blob/master/LICENSE + */ + +package com.cadiducho.telegrambotapi; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@ToString +@Getter @Setter +public class ForumTopicClosed { + +} diff --git a/src/main/java/com/cadiducho/telegrambotapi/ForumTopicCreated.java b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicCreated.java new file mode 100644 index 0000000..04d0998 --- /dev/null +++ b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicCreated.java @@ -0,0 +1,34 @@ +/* + * The MIT License + * + * Copyright 2022 Cadiducho. + * Read more in https://github.com/Cadiducho/Telegram-Bot-API/blob/master/LICENSE + */ + +package com.cadiducho.telegrambotapi; + +import com.squareup.moshi.Json; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@ToString +@Getter @Setter +public class ForumTopicCreated { + + /** + * Name of the topic + */ + private String name; + + /** + * Color of the topic icon in RGB format + */ + @Json(name = "icon_color") private Integer iconColor; + + /** + * Optional. Unique identifier of the custom emoji shown as the topic icon + */ + @Json(name = "icon_custom_emoji_id") private String iconCustomEmojiId; + +} diff --git a/src/main/java/com/cadiducho/telegrambotapi/ForumTopicReopened.java b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicReopened.java new file mode 100644 index 0000000..0669164 --- /dev/null +++ b/src/main/java/com/cadiducho/telegrambotapi/ForumTopicReopened.java @@ -0,0 +1,18 @@ +/* + * The MIT License + * + * Copyright 2022 Cadiducho. + * Read more in https://github.com/Cadiducho/Telegram-Bot-API/blob/master/LICENSE + */ + +package com.cadiducho.telegrambotapi; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@ToString +@Getter @Setter +public class ForumTopicReopened { + +} diff --git a/src/main/java/com/cadiducho/telegrambotapi/Message.java b/src/main/java/com/cadiducho/telegrambotapi/Message.java index 1dd4bd8..494dc5f 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/Message.java +++ b/src/main/java/com/cadiducho/telegrambotapi/Message.java @@ -29,6 +29,11 @@ public class Message { * Unique message identifier */ @Json(name = "message_id") private Integer messageId; + + /** + * Unique message identifier + */ + @Json(name = "message_thread_id") private Integer messageThreadId; /** * Sender @@ -82,6 +87,11 @@ public class Message { */ @Json(name = "forward_date") private Integer forwardDate; + /** + * Optional. True, if the message is sent to a forum topic + */ + @Json(name = "is_topic_message") private Integer isTopicMessage; + /** * Optional. True, if the message is a channel post that was automatically forwarded to the connected discussion group */ @@ -282,6 +292,12 @@ public class Message { */ @Json(name = "proximity_alert_triggered") private ProximityAlertTriggered proximityAlertTriggered; + @Json(name = "forum_topic_created") private ForumTopicCreated forumTopicCreated; + + @Json(name = "forum_topic_closed") private ForumTopicClosed forumTopicClosed; + + @Json(name = "forum_topic_reopened") private ForumTopicReopened forumTopicReopened; + /** * Optional. Service message: voice chat scheduled */ diff --git a/src/main/java/com/cadiducho/telegrambotapi/TelegramBot.java b/src/main/java/com/cadiducho/telegrambotapi/TelegramBot.java index b32b466..0e99ccf 100644 --- a/src/main/java/com/cadiducho/telegrambotapi/TelegramBot.java +++ b/src/main/java/com/cadiducho/telegrambotapi/TelegramBot.java @@ -30,7 +30,7 @@ /** * Default implementation to build Telegrams Bots - * Telegram Bot API version 6.2 + * Telegram Bot API version 6.3 */ public class TelegramBot implements BotAPI { @@ -171,11 +171,12 @@ public Boolean close() throws TelegramException { } @Override - public Message sendMessage(Object chat_id, String text, ParseMode parse_mode, Boolean disable_web_page_preview, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendMessage(Object chat_id, Integer message_thread_id, String text, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Boolean disable_web_page_preview, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "text", text); safeAdd(parameters, "parse_mode", parse_mode); safeAdd(parameters, "disableWebPagePreview", disable_web_page_preview); @@ -193,11 +194,12 @@ public Message sendMessage(Object chat_id, String text, ParseMode parse_mode, Bo } @Override - public Message forwardMessage(Object chat_id, Integer from_chat_id, Boolean disable_notification, Boolean protect_content, Integer message_id) throws TelegramException { + public Message forwardMessage(Object chat_id, Integer message_thread_id, Integer from_chat_id, Boolean disable_notification, Boolean protect_content, Integer message_id) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); safeAdd(parameters, "from_chat_id", from_chat_id); @@ -211,12 +213,13 @@ public Message forwardMessage(Object chat_id, Integer from_chat_id, Boolean disa } @Override - public MessageId copyMessage(Object chat_id, Object from_chat_id, Integer message_id, String caption, String parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Boolean allow_sending_without_reply, Object reply_markup) throws TelegramException { + public MessageId copyMessage(Object chat_id, Integer message_thread_id, Object from_chat_id, Integer message_id, String caption, String parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Boolean allow_sending_without_reply, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); Object safeFromChatId = getSafeChatId(from_chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "from_chat_id", safeFromChatId); safeAdd(parameters, "message_id", message_id); safeAdd(parameters, "caption", caption); @@ -235,11 +238,12 @@ public MessageId copyMessage(Object chat_id, Object from_chat_id, Integer messag } @Override - public Message sendPhoto(Object chat_id, Object photo, String caption, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendPhoto(Object chat_id, Integer message_thread_id, Object photo, String caption, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "caption", caption); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); @@ -255,11 +259,12 @@ public Message sendPhoto(Object chat_id, Object photo, String caption, Boolean d } @Override - public Message sendAudio(Object chat_id, Object audio, String caption, Integer duration, String performer, String title, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendAudio(Object chat_id, Integer message_thread_id, Object audio, String caption, Integer duration, String performer, String title, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "caption", caption); safeAdd(parameters, "duration", duration); safeAdd(parameters, "performer", performer); @@ -278,11 +283,12 @@ public Message sendAudio(Object chat_id, Object audio, String caption, Integer d } @Override - public Message sendDocument(Object chat_id, Object document, Boolean disable_content_type_detection, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendDocument(Object chat_id, Integer message_thread_id, Object document, Boolean disable_content_type_detection, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "disable_content_type_detection", disable_content_type_detection); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); @@ -298,11 +304,12 @@ public Message sendDocument(Object chat_id, Object document, Boolean disable_con } @Override - public Message sendVideo(Object chat_id, Object video, Integer duration, Integer width, Integer height, String caption, ParseMode parse_mode, Boolean supports_streaming, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendVideo(Object chat_id, Integer message_thread_id, Object video, Integer duration, Integer width, Integer height, String caption, ParseMode parse_mode, Boolean supports_streaming, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "duration", duration); safeAdd(parameters, "width", width); safeAdd(parameters, "height", height); @@ -323,11 +330,12 @@ public Message sendVideo(Object chat_id, Object video, Integer duration, Integer } @Override - public Message sendAnimation(Object chat_id, Object animation, Integer duration, Integer width, Integer height, Object thumb, String caption, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendAnimation(Object chat_id, Integer message_thread_id, Object animation, Integer duration, Integer width, Integer height, Object thumb, String caption, ParseMode parse_mode, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); addFile(parameters, "animation", animation, MediaTypes.MEDIA_TYPE_VIDEO); safeAdd(parameters, "duration", duration); safeAdd(parameters, "width", width); @@ -348,11 +356,12 @@ public Message sendAnimation(Object chat_id, Object animation, Integer duration, } @Override - public Message sendVoice(Object chat_id, Object voice, String caption, Integer duration, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendVoice(Object chat_id, Integer message_thread_id, Object voice, String caption, Integer duration, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "caption", caption); safeAdd(parameters, "duration", duration); safeAdd(parameters, "disable_notification", disable_notification); @@ -369,11 +378,12 @@ public Message sendVoice(Object chat_id, Object voice, String caption, Integer d } @Override - public Message sendMediaGroup(Object chat_id, List media, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id) throws TelegramException { + public Message sendMediaGroup(Object chat_id, Integer message_thread_id, List media, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "media", moshi.adapter(Types.newParameterizedType(List.class, InputMedia.class)).toJson(media)); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); @@ -387,11 +397,12 @@ public Message sendMediaGroup(Object chat_id, List media, Boolean di } @Override - public Message sendLocation(Object chat_id, Float latitude, Float longitude, Float horizontal_accuracy, Integer live_period, Integer heading, Integer proximity_alert_radius, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendLocation(Object chat_id, Integer message_thread_id, Float latitude, Float longitude, Float horizontal_accuracy, Integer live_period, Integer heading, Integer proximity_alert_radius, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "latitude", latitude); safeAdd(parameters, "longitude", longitude); safeAdd(parameters, "horizontal_accuracy", horizontal_accuracy); @@ -450,11 +461,12 @@ public Object stopMessageLiveLocation(Object chat_id, Integer message_id, String } @Override - public Message sendVideoNote(Object chat_id, Object video_note, Integer duration, Integer length, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendVideoNote(Object chat_id, Integer message_thread_id, Object video_note, Integer duration, Integer length, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "duration", duration); safeAdd(parameters, "length ", length); safeAdd(parameters, "disable_notification", disable_notification); @@ -471,11 +483,12 @@ public Message sendVideoNote(Object chat_id, Object video_note, Integer duration } @Override - public Message sendVenue(Object chat_id, Float latitude, Float longitude, String title, String address, String foursquare_id, String foursquare_type, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendVenue(Object chat_id, Integer message_thread_id, Float latitude, Float longitude, String title, String address, String foursquare_id, String foursquare_type, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "latitude", latitude); safeAdd(parameters, "longitude", longitude); safeAdd(parameters, "title", title); @@ -495,11 +508,13 @@ public Message sendVenue(Object chat_id, Float latitude, Float longitude, String } @Override - public Message sendContact(Object chat_id, String phone_number, String first_name, String last_name, String vcard, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendContact(Object chat_id, Integer message_thread_id, String phone_number, String first_name, String last_name, String vcard, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "phone_number", phone_number); safeAdd(parameters, "first_name", first_name); safeAdd(parameters, "last_name", last_name); @@ -517,13 +532,14 @@ public Message sendContact(Object chat_id, String phone_number, String first_nam } @Override - public Message sendPoll(Object chat_id, String question, List options, Boolean is_anonymous, String type, Boolean allows_multiple_answers, + public Message sendPoll(Object chat_id, Integer message_thread_id, String question, List options, Boolean is_anonymous, String type, Boolean allows_multiple_answers, Integer correct_option_id, String explanation, String explanation_parse_mode, Integer open_period, Integer close_date, Boolean is_closed, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "question", question); safeAdd(parameters, "options", moshi.adapter(Types.newParameterizedType(List.class, String.class)).toJson(options)); safeAdd(parameters, "is_anonymous", is_anonymous); @@ -548,12 +564,13 @@ public Message sendPoll(Object chat_id, String question, List options, B } @Override - public Message sendDice(Object chat_id, String emoji, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendDice(Object chat_id, Integer message_thread_id, String emoji, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "emoji", emoji); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); @@ -645,7 +662,7 @@ public Boolean restrictChatMember(Object chat_id, Long user_id, ChatPermissions } @Override - public Boolean promoteChatMember(Object chat_id, Long user_id, Boolean is_anonymous, Boolean can_manage_chat, Boolean can_change_info, Boolean can_post_messages, Boolean can_edit_messages, Boolean can_delete_messages, Boolean can_manage_video_chats, Boolean can_invite_users, Boolean can_restrict_members, Boolean can_pin_messages, Boolean can_promote_members) throws TelegramException { + public Boolean promoteChatMember(Object chat_id, Long user_id, Boolean is_anonymous, Boolean can_manage_chat, Boolean can_change_info, Boolean can_post_messages, Boolean can_edit_messages, Boolean can_delete_messages, Boolean can_manage_video_chats, Boolean can_invite_users, Boolean can_restrict_members, Boolean can_pin_messages, Boolean can_promote_members, Boolean can_manage_topics) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); @@ -662,6 +679,7 @@ public Boolean promoteChatMember(Object chat_id, Long user_id, Boolean is_anonym safeAdd(parameters, "can_restrict_members", can_restrict_members); safeAdd(parameters, "can_pin_messages", can_pin_messages); safeAdd(parameters, "can_promote_members", can_promote_members); + safeAdd(parameters, "can_manage_topics", can_manage_topics); final Request request = new Request.Builder() .url(apiUrl + "promoteChatMember") @@ -1047,6 +1065,108 @@ public Boolean deleteChatStickerSet(Object chat_id) throws TelegramException { return handleRequest(request, Boolean.class); } + @Override + public List getForumTopicIconStickers() throws TelegramException { + final Request request = new Request.Builder() + .url(apiUrl + "getForumTopicIconStickers") + .build(); + return handleRequest(request, Types.newParameterizedType(List.class, Sticker.class)); + } + + @Override + public ForumTopic createForumTopic(Object chat_id, String name, Integer icon_color, String icon_custom_emoji_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "name", name); + safeAdd(parameters, "icon_color", icon_color); + safeAdd(parameters, "icon_custom_emoji_id", icon_custom_emoji_id); + + final Request request = new Request.Builder() + .url(apiUrl + "createForumTopic") + .post(parameters.build()) + .build(); + return handleRequest(request, ForumTopic.class); + } + + @Override + public Boolean editForumTopic(Object chat_id, Integer message_thread_id, String name, String icon_custom_emoji_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); + safeAdd(parameters, "name", name); + safeAdd(parameters, "icon_custom_emoji_id", icon_custom_emoji_id); + + final Request request = new Request.Builder() + .url(apiUrl + "editForumTopic") + .post(parameters.build()) + .build(); + return handleRequest(request, Boolean.class); + } + + @Override + public Boolean closeForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); + + final Request request = new Request.Builder() + .url(apiUrl + "closeForumTopic") + .post(parameters.build()) + .build(); + return handleRequest(request, Boolean.class); + } + + @Override + public Boolean reopenForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); + + final Request request = new Request.Builder() + .url(apiUrl + "reopenForumTopic") + .post(parameters.build()) + .build(); + return handleRequest(request, Boolean.class); + } + + @Override + public Boolean deleteForumTopic(Object chat_id, Integer message_thread_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); + + final Request request = new Request.Builder() + .url(apiUrl + "deleteForumTopic") + .post(parameters.build()) + .build(); + return handleRequest(request, Boolean.class); + } + + @Override + public Boolean unpinAllForumTopicMessages(Object chat_id, Integer message_thread_id) throws TelegramException { + final Object safeChatId = getSafeChatId(chat_id); + final MultipartBody.Builder parameters = bodyBuilder(); + + safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); + + final Request request = new Request.Builder() + .url(apiUrl + "unpinAllForumTopicMessages") + .post(parameters.build()) + .build(); + return handleRequest(request, Boolean.class); + } + @Override public Boolean answerCallbackQuery(String callback_query_id, String text, Boolean show_alert, String url, Integer cache_time) throws TelegramException { final MultipartBody.Builder parameters = bodyBuilder(); @@ -1326,11 +1446,12 @@ public Boolean deleteWebhook(Boolean drop_pending_updates) throws TelegramExcept } @Override - public Message sendSticker(Object chat_id, Object sticker, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { + public Message sendSticker(Object chat_id, Integer message_thread_id, Object sticker, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, Object reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content); safeAdd(parameters, "reply_to_message_id", reply_to_message_id); @@ -1502,7 +1623,7 @@ public SentWebAppMessage answerWebAppQuery(String web_app_query_id, InlineQueryR } @Override - public Message sendInvoice(Integer chat_id, String title, String description, String payload, String provider_token, String start_parameter, String currency, + public Message sendInvoice(Integer chat_id, Integer message_thread_id, String title, String description, String payload, String provider_token, String start_parameter, String currency, List prices, String provider_data, String photo_url, Integer photo_size, Integer photo_width, Integer photo_height, Boolean need_name, Boolean need_phone_number, Boolean need_email, Boolean need_shipping_address, Boolean send_phone_number_to_provider, Boolean send_email_to_provider, Boolean is_flexible, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException { @@ -1510,6 +1631,7 @@ public Message sendInvoice(Integer chat_id, String title, String description, St final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "title", title); safeAdd(parameters, "description", description); safeAdd(parameters, "payload", payload); @@ -1605,11 +1727,12 @@ public Boolean answerPreCheckoutQuery(String pre_checkout_query_id, Boolean ok, } @Override - public Message sendGame(Object chat_id, String game_short_name, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException { + public Message sendGame(Object chat_id, Integer message_thread_id, String game_short_name, Boolean disable_notification, Boolean protect_content, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException { Object safeChatId = getSafeChatId(chat_id); final MultipartBody.Builder parameters = bodyBuilder(); safeAdd(parameters, "chat_id", safeChatId); + safeAdd(parameters, "message_thread_id", message_thread_id); safeAdd(parameters, "game_short_name", game_short_name); safeAdd(parameters, "disable_notification", disable_notification); safeAdd(parameters, "protect_content", protect_content);