答案 0 :(得分:1)
我不知道如何用Java创建一个对象,但我可以为你提供一个如何做到这一点的想法。当您在键盘中显示时,JSON应该像这样发送:
...
...
'reply_markup': JSON.stringify({
keyboard:
[
[
{'text': 'Radio Button #1'}
],
[
{'text': 'Radio Button #2'}
],
[
{'text': 'Radio Button #3'}
],
[
{'text': 'Unlock'},
{'text': 'Mute'}
]
],
one_time_keyboard: true,
resize_keyboard: true
...
您需要像这样发送键盘JSON以将键盘显示为图像。只需搜索Java中JSON.stringify的等效内容,以及如何创建请求以及如何使用该语言构造对象。
要在键盘消息中添加表情符号,您需要搜索此表情符号的unicode代码并将其写入键盘文本,如下所示:
...
{'text': '\u{270B} Radio Button #1'},
...
答案 1 :(得分:1)
如果您正在使用Ruben's library
以下是9个按钮的示例,每行将分为3个按钮
输入/ inline会产生内联键盘
通过键入/键盘将生成自定义键盘
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.telegram.telegrambots.api.methods.AnswerCallbackQuery;
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.api.objects.replykeyboard.InlineKeyboardMarkup;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboardMarkup;
import org.telegram.telegrambots.api.objects.replykeyboard.buttons.InlineKeyboardButton;
import org.telegram.telegrambots.api.objects.replykeyboard.buttons.KeyboardButton;
import org.telegram.telegrambots.api.objects.replykeyboard.buttons.KeyboardRow;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.exceptions.TelegramApiException;
/**
* @author UnAfraid
*/
public class MyBot extends TelegramLongPollingBot
{
private static final Logger LOGGER = LoggerFactory.getLogger(MyBot.class);
private final String _token;
private final String _username;
public MyBot(String token, String username)
{
_token = token;
_username = username;
}
@Override
public void onUpdateReceived(Update update)
{
if (update.hasMessage() && update.getMessage().hasText())
{
final Message message = update.getMessage();
ReplyKeyboard markup = null;
if (message.getText().startsWith("/inline"))
{
markup = new InlineKeyboardMarkup();
final List<List<InlineKeyboardButton>> keyboard = ((InlineKeyboardMarkup) markup).getKeyboard();
for (int i = 0; i < 9; i++)
{
if (keyboard.isEmpty() || (keyboard.get(keyboard.size() - 1).size() >= 3))
{
keyboard.add(new ArrayList<>());
}
keyboard.get(keyboard.size() - 1).add(new InlineKeyboardButton().setText(" Button name #" + (i + 1)).setCallbackData("Button callback " + (i + 1)));
}
}
else if (message.getText().startsWith("/keyboard"))
{
markup = new ReplyKeyboardMarkup();
final List<KeyboardRow> keyboard = ((ReplyKeyboardMarkup) markup).getKeyboard();
for (int i = 0; i < 9; i++)
{
if (keyboard.isEmpty() || (keyboard.get(keyboard.size() - 1).size() >= 3))
{
keyboard.add(new KeyboardRow());
}
keyboard.get(keyboard.size() - 1).add(new KeyboardButton().setText(" Button #" + (i + 1)));
}
}
final SendMessage msg = new SendMessage();
msg.setChatId(Long.toString(message.getChat().getId()));
msg.setText("Your text here");
msg.setReplyToMessageId(message.getMessageId());
msg.setReplyMarkup(markup);
try
{
execute(msg);
}
catch (TelegramApiException e)
{
LOGGER.warn("Failed to execute SendMessage: ", e);
}
}
else if (update.hasCallbackQuery())
{
final AnswerCallbackQuery answer = new AnswerCallbackQuery();
answer.setCallbackQueryId(update.getCallbackQuery().getId());
answer.setText("You've clicked at the button: " + update.getCallbackQuery().getData());
answer.setShowAlert(true);
try
{
execute(answer);
}
catch (Exception e)
{
LOGGER.warn("Failed to execute AnswerCallbackQuery: ", e);
}
}
}
@Override
public String getBotUsername()
{
return _username;
}
@Override
public String getBotToken()
{
return _token;
}
}