TDLightTelegramBots/TelegramBots.wiki/How-To-Update.md
2021-07-04 13:04:15 +01:00

7.4 KiB

To version 5.3.0

  1. As per API guidelines, ChatMember method has been divided in different classed. Where used in your code, replace old import with new one (GetChatAdministrators.java, GetChatMember.java, ChatMemberUpdated.java):

    import org.telegram.telegrambots.meta.api.objects.ChatMember;

    to

    import org.telegram.telegrambots.meta.api.objects.chatmember.ChatMember;

  2. ChatMember is an interface now, you'll need to cast it to the corresponding implementation when using it.

  3. GetChatMembersCount renamed to GetChatMemberCount, old version will still work until next major version.

  4. KickChatMember renamed to BanChatMember, old version will still work until next major version.

To version 5.1.0

  1. All users IDs fields are now Long type as per API guidelines.

To version 5.0.0

  1. ApiContextInitializer.init(); has been removed and is not required anymore, instead:
    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
    
    // When using webhook, create your own version of DefaultWebhook with all your parameters set.
    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class, defaultWebhookInstance);
    
  2. For location related class, change from Float to Double type, i.e:
       Double latitude = location.getLatitude()
    
  3. Instead of chain set method, use builder pattern:
       // Before
       new SendMessage()
                       .setChatId("@test")
                       .setText("Hithere")
                       .setReplyToMessageId(12)
                       .setParseMode(ParseMode.HTML)
                       .setReplyMarkup(new ForceReplyKeyboard())
       // After
       SendMessage
                       .builder()
                       .chatId("@test")
                       .text("Hithere")
                       .replyToMessageId(12)
                       .parseMode(ParseMode.HTML)
                       .replyMarkup(new ForceReplyKeyboard())
                       .build();
    
  4. Method doesn't accept chatId as Long any more, only as a String. Use Long.toString(...) when needed I.e:
       Long chatIdLong = message.getChatId();
       SendMessage
                  .builder()
                  .chatId(Long.toString(chatIdLong))
                  .text("Hithere")
                  .build();
    
  5. When registering a Webhook bot, provide the SetWebhook method object:
       TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class, defaultWebhookInstance);
       telegramApi.registerBot(myWebhookBot, mySetWebhook);
    
  6. When using Spring with a webhook bot, make your bot inherit form SpringWebhookBot instead of WebhookBot and provide your SetWebhook method in the constructor:
       // Extend correct class
       public class TestSpringWebhookBot extends SpringWebhookBot {
    
               public TestSpringWebhookBot(SetWebhook setWebhook) {
                   super(setWebhook);
               }
    
               public TestSpringWebhookBot(DefaultBotOptions options, SetWebhook setWebhook) {
                   super(options, setWebhook);
               }
    
               @Override
               public String getBotUsername() {
                   return null;
               }
    
               @Override
               public String getBotToken() {
                   return null;
               }
    
               @Override
               public BotApiMethod onWebhookUpdateReceived(Update update) {
                   return null;
               }
    
               @Override
               public String getBotPath() {
                   return null;
               }
           }
    
       // Create your SetWebhook method
       @Bean
       public SetWebhook setWebhookInstance() {
           return SetWebhook.builder()....build();
       }
    
       // Create it as
       @Bean
       public TestSpringWebhookBot testSpringWebhookBot(SetWebhook setWebhookInstance) {
           return new TestSpringWebhookBot(setWebhookInstance);
       }
    
  7. Use InputFile to set files to upload instead of different setters, i.e:
       // With a file
       SendDocument
           .builder()
           .chatId("123456")
           .document(new InputFile(new File("Filename.pdf")))  
           .build()  
       // With a Stream
       SendDocument
           .builder()
           .chatId("123456")
           .document(new InputFile("FileName", new FileInputStream("Filename.pdf")))  
           .build()
    

To version 4.4.0.2

  1. Logging framework has been replaced by slf4j, so now you'll need to manage your own implementation.

To version 4.0.0

  1. Replace removed method from AbsSender with execute requests.
  2. Everything under "Telegrambots-meta" has been moved to package org.telegram.telegrambots.meta.
  3. close method has been removed from BotSession, use stop instead.
  4. All methods that are intended to upload files are using now InputMedia and InputFile.

To version 2.4.3

  1. Replace BotOptions by DefaultBotOptions.
  2. At the beginning of your program (before creating your TelegramBotsApi or Bot instance, add the following line:
    ApiContextInitializer.init();
    
  3. In SentCallback, update parameter types of onResult and onError. Inside those two method, you don't need to deserialize anything now, it comes already done.
  4. Deprecated (will be removed in next version):
    • org.telegram.telegrambots.bots.BotOptions. Use org.telegram.telegrambots.bots.DefaultBotOptions instead.
    • getPersonal from AnswerInlineQuery. Use isPersonal instead.
    • FILEBASEURL from File. Use getFileUrl instead.

To version 2.4.4

  1. Replace ReplyKeyboardHide by ReplyKeyboardRemove and its field hideKeyboard by removeKeyboard (remember getter and setters)
  2. Replace usage of edit_message by disable_edit_message (see this post)
  3. Removed deprecated stuff from version 2.4.3

To version 2.4.4.3

  1. Replace BotSession.close() by BotSession.stop().

To version 2.4.4.4

  1. All calls to editMessageText, editMessageCaption or editMessageReplyMarkup in AbsSender return value is changed to Serializable
  2. In editMessageTextAsync, editMessageCaptionAsync or editMessageReplyMarkupAsync in AbsSender, second parameter should become SentCallback<Serializable> due to new return type.

To version 3.0

  1. In Message object, field new_chat_member was replaced by new_chat_members that is now an array of users.

To version 3.0.2

  1. If you were using TelegramLongPollingCommandBot, add the new extensions dependency to your maven and fix import statements in your project.
  2. If you were using TelegramLongPollingCommandBot, make sure you start using constructors with username and prevent overriding getUsername method.

To version 3.2

  1. Replace usage of all deprecated methods from AbsSender with methods execute or executeAsync.
  2. If you are extending AbsSender class, implement new added methods.