自定义键盘单选按钮电报JAVA

时间:2017-09-06 21:51:29

标签: telegram telegram-bot

我喜欢这个?,我怎么做JAVA?

source = https://www.mql5.com/es/articles/2355

image ...

2 个答案:

答案 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;
    }
}