如何在 Java 中为 Telegram 机器人键盘编写一组自定义命令?
How can I code a customized set of commands for a Telegram Bot Keyboard in Java?
所以我看了这个机器人的例子,我是黑手党的粉丝,他们的自定义键盘让我感到惊讶:
我发现我必须为 Telegram Bots jar 添加这个简单 Java API 才能实现它。我确实添加了罐子,但我不知道该怎么做。我想使用 Java 创建自定义键盘。这是源代码:
public class Pizza {
private static final Logger LOG = Logger.getLogger(Pizza.class.getName());
public static void main(String... args) throws Exception {
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
telegramBotsApi.registerBot(new TelegramLongPollingBot() {
@Override
public void onUpdateReceived(Update update) {
Message message = update.getMessage();
Long chatId = message.getChatId();
String input = message.getText();
if ("/recommend".equals(input)) {
SendMessage request = new SendMessage();
request.setChatId(chatId.toString());
request.setText("Peperoni");
try {
sendMessage(request);
} catch (TelegramApiException e) {
LOG.log(Level.SEVERE, "Could not send message", e);
}
}
}
@Override
public String getBotUsername() {
return "USERNAME_BOT";
}
@Override
public String getBotToken() {
return "BOT_TOKEN";
}
});
}
}
在 https://github.com/rubenlagus/TelegramBotsExample. More exactly, you can check custom keybaords at https://github.com/rubenlagus/TelegramBotsExample/blob/master/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java (@weatherbot).
上有一些该库的使用示例
在该文件中,您可以看到,例如,设置键盘是使用以下方法生成的:
private static ReplyKeyboardMarkup getSettingsKeyboard(String language) {
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
replyKeyboardMarkup.setSelective(true);
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow keyboardFirstRow = new KeyboardRow();
keyboardFirstRow.add(getLanguagesCommand(language));
keyboardFirstRow.add(getUnitsCommand(language));
KeyboardRow keyboardSecondRow = new KeyboardRow();
keyboardSecondRow.add(getAlertsCommand(language));
keyboardSecondRow.add(getBackCommand(language));
keyboard.add(keyboardFirstRow);
keyboard.add(keyboardSecondRow);
replyKeyboardMarkup.setKeyboard(keyboard);
return replyKeyboardMarkup;
}
您可以在 SendMessage
方法中使用 ReplyKeyboardMarkup,例如:
SendMessage message = new SendMessage();
message.enableMarkdown(true);
message.setReplyMarkup(getSettingsKeyboard(language));
message.setReplyToMessageId(message.getMessageId());
message.setChatId(message.getChatId().toString());
message.setText(getSettingsMessage(language));
所以我看了这个机器人的例子,我是黑手党的粉丝,他们的自定义键盘让我感到惊讶:
我发现我必须为 Telegram Bots jar 添加这个简单 Java API 才能实现它。我确实添加了罐子,但我不知道该怎么做。我想使用 Java 创建自定义键盘。这是源代码:
public class Pizza {
private static final Logger LOG = Logger.getLogger(Pizza.class.getName());
public static void main(String... args) throws Exception {
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
telegramBotsApi.registerBot(new TelegramLongPollingBot() {
@Override
public void onUpdateReceived(Update update) {
Message message = update.getMessage();
Long chatId = message.getChatId();
String input = message.getText();
if ("/recommend".equals(input)) {
SendMessage request = new SendMessage();
request.setChatId(chatId.toString());
request.setText("Peperoni");
try {
sendMessage(request);
} catch (TelegramApiException e) {
LOG.log(Level.SEVERE, "Could not send message", e);
}
}
}
@Override
public String getBotUsername() {
return "USERNAME_BOT";
}
@Override
public String getBotToken() {
return "BOT_TOKEN";
}
});
}
}
在 https://github.com/rubenlagus/TelegramBotsExample. More exactly, you can check custom keybaords at https://github.com/rubenlagus/TelegramBotsExample/blob/master/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java (@weatherbot).
上有一些该库的使用示例在该文件中,您可以看到,例如,设置键盘是使用以下方法生成的:
private static ReplyKeyboardMarkup getSettingsKeyboard(String language) {
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
replyKeyboardMarkup.setSelective(true);
replyKeyboardMarkup.setResizeKeyboard(true);
replyKeyboardMarkup.setOneTimeKeyboad(false);
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow keyboardFirstRow = new KeyboardRow();
keyboardFirstRow.add(getLanguagesCommand(language));
keyboardFirstRow.add(getUnitsCommand(language));
KeyboardRow keyboardSecondRow = new KeyboardRow();
keyboardSecondRow.add(getAlertsCommand(language));
keyboardSecondRow.add(getBackCommand(language));
keyboard.add(keyboardFirstRow);
keyboard.add(keyboardSecondRow);
replyKeyboardMarkup.setKeyboard(keyboard);
return replyKeyboardMarkup;
}
您可以在 SendMessage
方法中使用 ReplyKeyboardMarkup,例如:
SendMessage message = new SendMessage();
message.enableMarkdown(true);
message.setReplyMarkup(getSettingsKeyboard(language));
message.setReplyToMessageId(message.getMessageId());
message.setChatId(message.getChatId().toString());
message.setText(getSettingsMessage(language));