【发布时间】:2018-03-12 21:26:43
【问题描述】:
【问题讨论】:
-
我不明白你在问什么。关于如何创建图像中链接的菜单的说明也可以在您刚刚提供的链接中找到。澄清一下:这些单选按钮只是表情符号。 ⚪️和????。
标签: telegram telegram-bot
【问题讨论】:
标签: telegram telegram-bot
我不知道如何在 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'},
...
【讨论】:
如果您使用的是Ruben's library
这是一个 9 个按钮的示例,每行将分成 3 个按钮
通过输入 /inline 会产生内联键盘
通过输入 /keyboard 会产生自定义键盘
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;
}
}
【讨论】: