Всех приветствую. Не смог найти адекватного гайда по обработке нажатия кнопок в телеграм бот на Джава. Пришлось по чуть чуть воровать кусочки кода из разных источников. Туда-сюда,получился вот такой вот код , но ответа на коллБэк нет.Ошибка в консоли:NullPointerException. Помогите понять что не так ,в чем суть обработки колБэков,и если можно,статьи на эту тему,ибо в интернете развёрнутого пояснения не нашел.Код класса Бот ниже
public class Bot extends TelegramLongPollingBot{
@Override
public String getBotUsername() {
return "asdzxc_bot";
}
@Override
public String getBotToken() {
return "token";
}
@Override
public void onUpdateReceived(Update update) {
String message = update.getMessage().getText();
if(update.hasMessage()){
if(update.getMessage().hasText()){
if(update.getMessage().getText().equals("Hello")){
try {
execute(sendInlineKeyBoardMessage(update.getMessage().getChatId()));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
}else
if (update.hasCallbackQuery()) {
// Set variables
String call_data = update.getCallbackQuery().getData();
long message_id = update.getCallbackQuery().getMessage().getMessageId();
long chat_id = update.getCallbackQuery().getMessage().getChatId();
if (call_data.equals("1")) {
String answer = "ОтработалКоллБэк";
EditMessageText new_message = new EditMessageText()
.setChatId(chat_id)
.setMessageId(toIntExact(message_id))
.setText(answer);
try {
execute(new_message);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
switch(message) {
case("демики"):
sendMsgDemiki(update.getMessage().getChatId().toString(), message);
break;
case("Демики"):
sendMsgDemiki(update.getMessage().getChatId().toString(), message);
break;
case("24г"):
sendMsgDemiki(update.getMessage().getChatId().toString(), message);
break;
case("владики"):
sendMsgVladiki(update.getMessage().getChatId().toString(), message);
break;
case("Владики"):
sendMsgVladiki(update.getMessage().getChatId().toString(), message);
break;
/* case("Inf"):
sendMsgInf(update.getMessage().getChatId().toString(), message);
break;
case("inf"):
sendMsgInf(update.getMessage().getChatId().toString(), message);
break;
*/
}
}
private Integer toIntExact(long message_id) {
return (int) message_id;
}
/**
- Метод для настройки сообщения и его отправки.
- @param chatId id чата
- @param s Строка, которую необходимот отправить в качестве сообщения.
*/
public synchronized void sendMsgDemiki(String chatId, String s) {
SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true);
sendMessage.setChatId(chatId);
sendMessage.setText("Демидионы ,вас зовут! @Plumpla @NastasiaMolotkova");
try {
sendMessage(sendMessage);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
public synchronized void sendMsgVladiki(String chatId, String s) {
SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true);
sendMessage.setChatId(chatId);
sendMessage.setText("AGHTUNGH @ZhekaRoyzman @TolyaOdessit");
try {
sendMessage(sendMessage);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
public static SendMessage sendInlineKeyBoardMessage(long chatId) {
InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup();
InlineKeyboardButton inlineKeyboardButton1 = new InlineKeyboardButton();
InlineKeyboardButton inlineKeyboardButton2 = new InlineKeyboardButton();
inlineKeyboardButton1.setText("Тыk");
inlineKeyboardButton1.setCallbackData("1");
inlineKeyboardButton2.setText("Тык2");
inlineKeyboardButton2.setCallbackData("Button "Тык2" has been pressed");
List<InlineKeyboardButton> keyboardButtonsRow1 = new ArrayList<>();
List<InlineKeyboardButton> keyboardButtonsRow2 = new ArrayList<>();
keyboardButtonsRow1.add(inlineKeyboardButton1);
keyboardButtonsRow1.add(new InlineKeyboardButton().setText("Fi4a").setCallbackData("CallFi4a"));
keyboardButtonsRow2.add(inlineKeyboardButton2);
List<List<InlineKeyboardButton>> rowList = new ArrayList<>();
rowList.add(keyboardButtonsRow1);
rowList.add(keyboardButtonsRow2);
inlineKeyboardMarkup.setKeyboard(rowList);
return new SendMessage().setChatId(chatId).setText("Пример").setReplyMarkup(inlineKeyboardMarkup);
}
}
В консоли следующая ошибка :
янв. 28, 2021 1:20:06 PM org.telegram.telegrambots.logging.BotLogger severe
SEVERE: BOTSESSION
java.lang.NullPointerException
at bot.SBKbot.Bot.onUpdateReceived(Bot.java:35)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:306)
Как правильно обрабатывать каллБэк?В чём суть этого процеса,что у меня не правильно.и если кто то знает хорошие статьи на эту тему,буду очень благодарен за содействие.Спасибо зарание!
onUpdateReceivedуверенно обращаться кupdate.getMessage().getText(), а потом начинать сомневаться - "а был ли мальчик" (if(update.hasMessage()) – kami Jan 28 '21 at 11:40OnUpdateReceived- https://github.com/rubenlagus/TelegramBots/wiki/Getting-Started – kami Jan 30 '21 at 10:07