Делаю учебный проект "Торговый телеграм бот". На данном этапе он отвечает на /start и /help, теперь должен обрабатывать нажатие на кнопку InlineKeyboardButton с указанным setCallbackData. Затем getData() проверяет в update запрос и выдает на него сообщение. Но последнего почему-то не делает. Ошибки в коде на наблюдается, возможно кто знает в чем проблема и как его заставить отвечать на нажатие ?
package app;
import java.util.ArrayList;
import java.util.List;
import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
import org.telegram.telegrambots.meta.api.objects.Message;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
public class Roric extends TelegramLongPollingBot{
public static void main(String[] args) {
ApiContextInitializer.init();
TelegramBotsApi botapi = new TelegramBotsApi();
try {
botapi.registerBot(new Roric());
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
@Override
public String getBotUsername() {
return "Roric_bot";
}
@Override
public void onUpdateReceived(Update u) {
Message msg = u.getMessage();
String txt = msg.getText();
if (txt.equals("/start")) {
// Set variables
long chat_id = u.getMessage().getChatId();
SendMessage message = new SendMessage() // Create a message object object
.setChatId(chat_id)
.setText("Чего желаете ?! Для помощи /help");
try {
execute(message); // Sending our message object to user
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
else if (txt.equals("/help")) {
long chat_id = u.getMessage().getChatId();
SendMessage message = new SendMessage()
.setChatId(chat_id)
.setText("Чем именно помочь ?" + "\n");
InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
List<InlineKeyboardButton> rowInline = new ArrayList<>();
rowInline.add(new InlineKeyboardButton().setText("Cникерс").setCallbackData("/snik"));
rowInline.add(new InlineKeyboardButton().setText("Марс").setCallbackData("/mars"));
rowInline.add(new InlineKeyboardButton().setText("Bounty").setCallbackData("/boun"));
rowInline.add(new InlineKeyboardButton().setText("Twix").setCallbackData("/twix"));
// Set the keyboard to the markup
rowsInline.add(rowInline);
// Add it to the message
markupInline.setKeyboard(rowsInline);
message.setReplyMarkup(markupInline);
try {
execute(message);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
else if (u.hasCallbackQuery()) {
// Set variables
String call_data = u.getCallbackQuery().getData();
long message_id = u.getCallbackQuery().getMessage().getMessageId();
long chat_id = u.getCallbackQuery().getMessage().getChatId();
if (call_data.equals("/snik")) {
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();
}
}
}
}
private Integer toIntExact(long message_id) {
return (int) message_id;
}
public String getBotToken() {
return "*****my token*****";
} }