JavaRush /Java Blog /Random-TW /Telegram 能力機器人:可以進行對話的機器人:第 2 部分
Chundrik
等級 35
Санкт-Петербург

Telegram 能力機器人:可以進行對話的機器人:第 2 部分

在 Random-TW 群組發布
第 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