如何通过单击 InlineKeyboardButton 打开 ReplyKeyboardMarkup?
How to open ReplyKeyboardMarkup by clicking InlineKeyboardButton?
我需要使用 library 单击 InlineKeyboardButton
打开 ReplyKeyboardMarkup
。
在我的例子中,点击 Create post
按钮
并打开这种类型的键盘
所以,我尝试单击 InlineKeyboardButton
并使用 CallbackQuery
打开 ReplyKeyboardMarkup
(处理单击),就像 snippet.
当我点击我的按钮时,我只看到屏幕上的时钟(但我有 CallbackQuery
来处理这个按钮):
else if (call_data.equals("correcting_post")) {
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row = new KeyboardRow();
row.add("Clear");
row.add("Preview");
keyboard.add(row);
row = new KeyboardRow();
row.add("Cancel");
row.add("Next");
keyboard.add(row);
keyboardMarkup.setKeyboard(keyboard);
AnswerCallbackQuery a = new AnswerCallbackQuery()
.setCallbackQueryId(update.getCallbackQuery().getId());
try {
execute(a);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
我需要更正或补充什么?感谢您的帮助。
如果我没看错,您想单击 InlineKeyboardButton
按钮之一,然后打开 ReplyKeyboardMarkup
。为此,您可以使用如下代码:
public class YourClass extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
if (update.hasCallbackQuery()) {
String data = update.getCallbackQuery().getData();
if (data.equals("correcting_post")) {
try {
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row = new KeyboardRow();
row.add("Test button");
keyboard.add(row);
keyboardMarkup.setKeyboard(keyboard);
// Create a message object
SendMessage message = new SendMessage()
.setChatId(update.getCallbackQuery().getMessage().getChatId())
.enableMarkdown(true)
.setText("Message text");
message.setReplyMarkup(keyboardMarkup);
execute(message);
} catch (TelegramApiException e) {
//exception handling
}
}
//Check another options for data
}
}
...
}
可能这个库提供了一种更方便的方法,但至少这种代码的和平有效。
我需要使用 library 单击 InlineKeyboardButton
打开 ReplyKeyboardMarkup
。
在我的例子中,点击 Create post
按钮
并打开这种类型的键盘
所以,我尝试单击 InlineKeyboardButton
并使用 CallbackQuery
打开 ReplyKeyboardMarkup
(处理单击),就像 snippet.
当我点击我的按钮时,我只看到屏幕上的时钟(但我有 CallbackQuery
来处理这个按钮):
else if (call_data.equals("correcting_post")) {
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row = new KeyboardRow();
row.add("Clear");
row.add("Preview");
keyboard.add(row);
row = new KeyboardRow();
row.add("Cancel");
row.add("Next");
keyboard.add(row);
keyboardMarkup.setKeyboard(keyboard);
AnswerCallbackQuery a = new AnswerCallbackQuery()
.setCallbackQueryId(update.getCallbackQuery().getId());
try {
execute(a);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
我需要更正或补充什么?感谢您的帮助。
如果我没看错,您想单击 InlineKeyboardButton
按钮之一,然后打开 ReplyKeyboardMarkup
。为此,您可以使用如下代码:
public class YourClass extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
if (update.hasCallbackQuery()) {
String data = update.getCallbackQuery().getData();
if (data.equals("correcting_post")) {
try {
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row = new KeyboardRow();
row.add("Test button");
keyboard.add(row);
keyboardMarkup.setKeyboard(keyboard);
// Create a message object
SendMessage message = new SendMessage()
.setChatId(update.getCallbackQuery().getMessage().getChatId())
.enableMarkdown(true)
.setText("Message text");
message.setReplyMarkup(keyboardMarkup);
execute(message);
} catch (TelegramApiException e) {
//exception handling
}
}
//Check another options for data
}
}
...
}
可能这个库提供了一种更方便的方法,但至少这种代码的和平有效。