@MarkusEfr

Telegram бот не отвечает на кнопки, как заставить?

Делаю учебный проект "Торговый телеграм бот". На данном этапе он отвечает на /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*****";
	} }
  • Вопрос задан
  • 1667 просмотров
Пригласить эксперта
Ответы на вопрос 2
RATlius
@RATlius
Разработчик Android
Ваша проблема сложна и неочевидна. Она не описывается в тех туториалах, по которым Вы скорее всего изучаете это Api.
Пришлось самостоятельно написать нового Бота, чтобы понять это.
После трудностей Telegram с РКН его до сих пор пытаются блокировать.
Подключитесь к интернету через vpn и Ваш Бот будет работать
Ответ написан
Allepta
@Allepta
Выглядит так, будто вы не верно указываете параметры ReplyMarkup или вообще не указали. Запросы в апи телеграма отправляются в формате json, по-этому попробуйте просто этот запрос вывести в строку и проверить синтаксис.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы