JavaRush /Java 博客 /Random-ZH /Telegram 能力机器人:可以进行对话的机器人:第 2 部分
Chundrik
第 35 级
Санкт-Петербург

Telegram 能力机器人:可以进行对话的机器人:第 2 部分

已在 Random-ZH 群组中发布
第 1 部分 为了不让后面的程序部分变得混乱,我尝试将所有逻辑划分为单独的类。机器人响应的实际短语将存储在界面中Constants。让我们在那里创建一行:
String START_DESCRIPTION = "Hello";
然后我们到类中TelegramBot插入以下代码:
public Ability replyToStart() {
    return Ability
        .builder()
        .name("start")
        .info(Constants.START_DESCRIPTION)
        .locality(ALL)
        .privacy(PUBLIC)
        .action(ctx ->  silent.send("Hello!", ctx.chatId()))
        .build();
}
Telegram 能力机器人:可以进行对话的机器人:第 2 部分 - 1现在,机器人可以响应标准命令来迎接其客户/start。尝试运行它:机器人已经有点活跃了!但是,就像任何弗兰肯斯坦怪物一样,他失去了几条肢体。Telegram 能力机器人:可以进行对话的机器人:第 2 - 2 部分

使用内置键盘

为了让机器人与我们建立对话,我们还需要两个类:MessageFactoryKeyboardFactory。第一个将读取人们的答案并生成消息,第二个将创建带有答案的按钮。
public class KeyboardFactory {
    public static ReplyKeyboard startButtons() {
        InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
        List<list<inlinekeyboardbutton>> rowsInline = new ArrayList<>();
        List<inlinekeyboardbutton> rowInline = new ArrayList<>();

       rowInline.add(new InlineKeyboardButton().setText("DISCUSSION").setCallbackData(Constants.DISCUSSION));
        rowInline.add(new InlineKeyboardButton().setText("SMALL TALK").setCallbackData(Constants.SMALL_TALK));

        rowsInline.add(rowInline);
        inlineKeyboard.setKeyboard(rowsInline);
        return inlineKeyboard;
    }
}
</inlinekeyboardbutton></list<inlinekeyboardbutton>
在此过程中,我们将添加Constants
String START_REPLY = "Start using the telegram bot if you are lonely or bored";
String CHOOSE_OPTION = "Make a choice";
String DISCUSSION = "Let's discuss!";
String SMALL_TALK = "Let's talk!";
现在我们可以简单地调用工厂的静态方法来使用内置键盘。代码中最重要的部分是setCallbackData(). 它识别用户按下了哪个按钮。让我们去MessageFactory
public class MessageFactory {
    private final MessageSender sender; //используется для отправки сообщений обратно пользователю

    public MessageFactory(MessageSender sender) {
        this.sender = sender;
    }

    public void start (long chatId) {
        try {
            sender.execute(new SendMessage()
                    .setText(Constants.START_REPLY)
                    .setChatId(chatId));

            sender.execute(new SendMessage()
                    .setText(Constants.CHOOSE_OPTION)
                    .setChatId(chatId)
                    .setReplyMarkup(KeyboardFactory.startButtons()));


        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
}
让我们替换方法中的代码Telegrambot.replyToStart()
public Ability replyToStart() {
        return Ability
                .builder()
                .name("start")
                .info(Constants.START_DESCRIPTION)
                .locality(ALL)
                .privacy(PUBLIC)
                .action(ctx ->  messageFactory.start(ctx.chatId()))
                .build();
    }
同一类中还有一项修改 - 替换构造函数:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
尝试重新启动您的机器人。它现在将提供内置键盘来响应您的操作。Telegram 能力机器人:可以进行对话的机器人:第 2 - 3 部分对初学者有用的生活窍门: 如果您正在使用 Idea 并且想要查看某个类的文档,请选择该类或方法,然后按 Ctrl+J(Mac 上)或 Ctrl+Q(Windows 上)。您还可以右键单击->转到->用法声明。因此,例如,您可以发现我们的AbilityBot实际上继承自标准TelegramLongPollingBot。只是它使用了 lambda,这大大减少了代码。 下一个(最后)部分将开发 Heroku 上的对话和部署。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION