【问题标题】:Telegram BOT JAVA电报机器人 JAVA
【发布时间】:2018-07-22 13:18:09
【问题描述】:

我有一个带有内联键盘的机器人。 该机器人有一个带有按钮的文本来下订单。按下机器人后会询问人的姓名,下面有一个取消操作的按钮。 如果我输入人名,我会正确地使用新按钮加载新文本,但旧的取消按钮不会被删除并且仍然可见。 我希望能够在编写文本后删除按钮。

此代码用于插入名称:

String answer = "Insert the Name";

                EditMessageText new_message = new EditMessageText()
                        .setChatId(chat_id)
                        .setMessageId(message_id)
                        .setText(answer).setParseMode("HTML");

                markupInline = new InlineKeyboardMarkup();
                List<List<InlineKeyboardButton>> bottoni_totali = new ArrayList<>();
                List<InlineKeyboardButton> riga1 = new ArrayList<>();

                riga1.add(createButton("annulla", emoji_annulla+" Annulla"));

                bottoni_totali.add(riga1);

                // Add it to the message
                markupInline.setKeyboard(bottoni_totali);

                new_message.setReplyMarkup(markupInline);

                try {
                    execute(new_message); 
                } catch (TelegramApiException e) {
                    e.printStackTrace();
                }

当我插入姓名时,我会显示姓氏,但旧按钮 CANCEL 可见。

String answer = "Now insert the surname";

                sendMessage = new SendMessage().setChatId(update.getMessage().getChatId());
                sendMessage.setText(answer).setParseMode("HTML");

                markupInline = new InlineKeyboardMarkup();
                List<List<InlineKeyboardButton>> bottoni_totali = new ArrayList<>();
                List<InlineKeyboardButton> riga1 = new ArrayList<>();

                riga1.add(createButton("annulla", emoji_annulla+" Annulla"));

                bottoni_totali.add(riga1);

                // Add it to the message
                markupInline.setKeyboard(bottoni_totali);
                sendMessage.setReplyMarkup(markupInline);
                try {
                    execute(sendMessage);
                } catch (TelegramApiException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

【问题讨论】:

  • 虽然我链接的消息是指其他语言的 API,但它仍然应该有足够的信息来确定一个足够的答案。
  • 当我第一次尝试编辑时 - EditMessage(使用 InlineKeyboardMarkup)方法工作正常,但是当我第二次尝试修改此消息时,我得到“错误请求:消息未修改”为什么? ??

标签: java telegram-bot


【解决方案1】:

首先我要说一下这个链接: How to hide ReplyKeyboardMarkup after user click in Telegram Bot API

上面的问题是关于InlineKeyboardMarkup,链接问题是关于ReplyKeyboardMarkup。这两个是不同的东西,不要混用。

其次,你必须澄清你的问题。

但旧的取消按钮不会被删除并保持可见

你这是什么意思? (截图是最好的解释方式)

在代码的第二个 sn-p 中,您使用 SendMessage 而不是 EditMessageText(与第一个 sn-p 一样)。这意味着带有文本Now insert the surname 的消息不会替换带有文本Insert the Name 的消息。 Now insert the surname 将显示为新消息。

看来你也应该在第二种情况下使用EditMessageText

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2018-08-02
    • 2022-01-01
    • 2021-05-16
    相关资源
    最近更新 更多