xabgesagtx / telegram-spring-boot-starter

Telegram Bot API Spring Boot Starter
MIT License
125 stars 41 forks source link

Exception: Numeric value is out of range of int #10

Closed DmitriySahno closed 2 years ago

DmitriySahno commented 2 years ago

Good day! I have some problems with using your solution. When Im trying to sending a message from bot by command execute(response);, the text is sending from my telegram bot, but it cause an error Numeric value (5040624363) out of range of int (-2147483648 - 2147483647) at [Source: (String)"{"ok":true,"result":{"message_id":38,"from":{"id":5040624363,"is_bot":true,"first_name":"Coinmarketcap","username":"cmc_sahd_bot"}....

Code:

@Override
public void onUpdateReceived(Update update) {
    Message message = update.getMessage();
    Long chatId = message.getChatId();

    SendMessage response = new SendMessage();
    response.setChatId(String.valueOf(chatId));
    switch (message.getText()) {
        case "/top10crypto":
            cryptoService.getLatestCryptoCurrencies(10)
                    .forEach(c -> {
                        String price = c.getQuote().getUsd().get("price");
                        price = price.substring(0, price.indexOf(".")+3);
                        response.setText(StringUtils.defaultIfBlank(response.getText(), "")+c.getName()+"("+c.getSymbol()+"): "+price+"\n");
                    });
            break;
    }

    try {
        execute(response);
        if (activeChatRepository.findActiveChatByChatId(chatId).isEmpty()) {
            ActiveChat activeChat = new ActiveChat();
            activeChat.setChatId(chatId);
            activeChatRepository.save(activeChat);
        }
        log.info("Sent message: \"{}\" to {}", response.getText(), chatId);
    } catch (TelegramApiException e) {
        e.printStackTrace();
        log.error("Failed to send message \"{}\" to {}, cause error {}, ", response.getText(), chatId, e.getMessage());
    }
}

Stack:

org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException: Unable to deserialize response
    at org.telegram.telegrambots.meta.api.methods.send.SendMessage.deserializeResponse(SendMessage.java:132)
    at org.telegram.telegrambots.meta.api.methods.send.SendMessage.deserializeResponse(SendMessage.java:32)
    at org.telegram.telegrambots.bots.DefaultAbsSender.sendApiMethod(DefaultAbsSender.java:1009)
    at org.telegram.telegrambots.meta.bots.AbsSender.execute(AbsSender.java:64)
    at org.sahd.coinmarketcapBot.service.BotService.onUpdateReceived(BotService.java:59)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at org.telegram.telegrambots.meta.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
    at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:320)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Numeric value (5040624363) out of range of int (-2147483648 - 2147483647)
 at [Source: (String)"{"ok":true,"result":{"message_id":38,"from":{"id":5040624363,"is_bot":true,"first_name":"Coinmarketcap","username":"cmc_sahd_bot"},"chat":{"id":397809995,"first_name":"Dmitriy","last_name":"Sahno","username":"DmitriySahno","type":"private"},"date":1638823357,"text":"Bitcoin(BTC): 49200.96\nEthereum(ETH): 4222.66\nBinance Coin(BNB): 573.07\nTether(USDT): 1.00\nSolana(SOL): 191.04\nCardano(ADA): 1.36\nUSD Coin(USDC): 0.99\nXRP(XRP): 0.79\nPolkadot(DOT): 27.28\nTerra(LUNA): 63.15"}}"; line: 1, column: 61] (through reference chain: org.telegram.telegrambots.meta.api.objects.ApiResponse["result"]->org.telegram.telegrambots.meta.api.objects.Message["from"]->org.telegram.telegrambots.meta.api.objects.User["id"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397)
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1726)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:295)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:293)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
    at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:293)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3468)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3451)
    at org.telegram.telegrambots.meta.api.methods.send.SendMessage.deserializeResponse(SendMessage.java:124)
    ... 7 more
Caused by: com.fasterxml.jackson.core.exc.InputCoercionException: Numeric value (5040624363) out of range of int (-2147483648 - 2147483647)
 at [Source: (String)"{"ok":true,"result":{"message_id":38,"from":{"id":5040624363,"is_bot":true,"first_name":"Coinmarketcap","username":"cmc_sahd_bot"},"chat":{"id":397809995,"first_name":"Dmitriy","last_name":"Sahno","username":"DmitriySahno","type":"private"},"date":1638823357,"text":"Bitcoin(BTC): 49200.96\nEthereum(ETH): 4222.66\nBinance Coin(BNB): 573.07\nTether(USDT): 1.00\nSolana(SOL): 191.04\nCardano(ADA): 1.36\nUSD Coin(USDC): 0.99\nXRP(XRP): 0.79\nPolkadot(DOT): 27.28\nTerra(LUNA): 63.15"}}"; line: 1, column: 61]
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportInputCoercion(ParserMinimalBase.java:596)
    at com.fasterxml.jackson.core.base.ParserMinimalBase.reportOverflowInt(ParserMinimalBase.java:565)
    at com.fasterxml.jackson.core.base.ParserBase.convertNumberToInt(ParserBase.java:889)
    at com.fasterxml.jackson.core.base.ParserBase._parseIntValue(ParserBase.java:802)
    at com.fasterxml.jackson.core.base.ParserBase.getIntValue(ParserBase.java:646)
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:477)
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:457)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:293)
    ... 18 more

Please help me to solve this problem.

longstone commented 2 years ago

FYI: https://core.telegram.org/api/layers#layer-133