java - 如何在用户单击时更改 InlineKeyboardButton 标签?

标签 java telegram telegram-bot

我想在单击后更改由 setText() 方法初始化的 InlineKeyboardButton 对象的标签

例如,通过单击按钮将“label”字符串更改为“label-1”。

这是我的一段代码:

if (update.hasMessage() && update.getMessage().hasText()) {
    if (update.getMessage().getText().equals("/start")) {
        long chat_id = update.getMessage().getChatId();
        message = new SendMessage() 
                .setChatId(chat_id)
                .setText("You send /start");
        InlineKeyboardButton dk1=new InlineKeyboardButton().setText("labe1").setCallbackData("change_the_label");
        InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
        List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
        List<InlineKeyboardButton> rowInline = new ArrayList<>();
        rowInline.add(dk1);
        rowsInline.add(rowInline);
        markupInline.setKeyboard(rowsInline);
        message.setReplyMarkup(markupInline);
        try {execute(message); catch (TelegramApiException e) {e.printStackTrace();}}}

最佳答案

我通过添加这段代码解决了这个问题 使用 EditMessageReplyMarkup 对象 编辑现有的内联键盘:

   String call_data = update0.getCallbackQuery().getData();
            long message_id = update0.getCallbackQuery().getMessage().getMessageId();
            long chat_id = update0.getCallbackQuery().getMessage().getChatId();
            String inline_message_id = update0.getCallbackQuery().getInlineMessageId();
            if (call_data.equals("change_the_label")) {
                String answer = "Updated message text";
                EditMessageReplyMarkup new_message = new EditMessageReplyMarkup()
                        .setChatId(chat_id).setMessageId(toIntExact(message_id))
                        .setInlineMessageId(inline_message_id);
                InlineKeyboardButton dk1=new InlineKeyboardButton();
                dk1.setText("label1");
                dk1.setCallbackData("change_the_label");
                InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
                List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
                List<InlineKeyboardButton> rowInline = new ArrayList<>();

                rowInline.add(dk1);

                rowsInline.add(rowInline);

                markupInline.setKeyboard(rowsInline);
                new_message.setReplyMarkup(markupInline);

                                try {editMessageReplyMarkup(new_message);

                } catch (TelegramApiException e) {
                    e.printStackTrace();
                }

关于java - 如何在用户单击时更改 InlineKeyboardButton 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967168/

相关文章:

java - 为什么 JOOQ 仅限于整数值而不是长整数?

java - Java 中删除注释的脚本

python - (python) Telegram bot-如何定期发送消息?

telegram - 如何以编程方式关闭 Telegram 中的 native 浏览器?

java - 在 Java 中实现请求限制的任何开箱即用的方法?

java - 调用后 AWS Lambda 对 SNS 的响应

python-3.x - Telethon 中有没有办法从聊天中获取消息以及发件人姓名、日期和时间?

java - 如何检查用户是否是 Telegram 群组的成员?

javascript - Google Sheets Apps 脚本用于确定 Telegram 群组中的管理员

qt - 将 Qt 中的 setWebhook 用于 Telegram 机器人