JavaRush /Blog Java /Random-VI /Telegram Khả năng Bot: một bot có thể thực hiện một cuộc ...
Chundrik
Mức độ
Санкт-Петербург

Telegram Khả năng Bot: một bot có thể thực hiện một cuộc đối thoại: Phần 2

Xuất bản trong nhóm
PHẦN 1 Để không bị nhầm lẫn sau này trong các phần của chương trình, tôi cố gắng chia tất cả logic thành các lớp riêng biệt. Các cụm từ thực tế mà bot sẽ phản hồi sẽ được lưu trữ trong giao diện Constants. Hãy tạo một dòng ở đó:
String START_DESCRIPTION = "Hello";
Sau đó chúng ta vào lớp TelegramBotvà chèn đoạn mã sau:
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 Khả năng Bot: một bot có thể tiến hành đối thoại: Phần 2 - 1Bây giờ bot có thể chào đón khách hàng của mình theo lệnh tiêu chuẩn /start. Hãy thử chạy nó: bot đã hoạt động được một chút! Tuy nhiên, giống như bất kỳ quái vật Frankenstein nào, anh ta bị mất một vài chi.Telegram Khả năng Bot: một bot có thể tiến hành đối thoại: Phần 2 - 2

Sử dụng bàn phím tích hợp

Để bot có thể đối thoại với chúng ta, chúng ta cần thêm hai lớp nữa: MessageFactoryKeyboardFactory. Cái đầu tiên sẽ đọc câu trả lời của mọi người và tạo tin nhắn, cái thứ hai sẽ tạo các nút có câu trả lời.
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>
Trên đường đi, chúng tôi sẽ thêm vào 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!";
Bây giờ chúng ta có thể chỉ cần gọi phương thức tĩnh của nhà máy để sử dụng bàn phím tích hợp. Phần quan trọng nhất của mã là setCallbackData(). Nó nhận ra nút nào được người dùng nhấn. Chúng ta hãy đi đến 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();
        }
    }
}
Hãy thay thế mã trong phương thức 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();
    }
Và một sửa đổi nữa trong cùng một lớp - thay thế hàm tạo:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Hãy thử khởi động lại bot của bạn. Bây giờ nó sẽ cung cấp bàn phím tích hợp để đáp ứng hành động của bạn. Telegram Khả năng Bot: một bot có thể tiến hành đối thoại: Phần 2 - 3Thủ thuật hữu ích cho người mới bắt đầu: Nếu bạn đang sử dụng Idea và muốn xem tài liệu về một lớp, hãy chọn lớp hoặc phương thức đó rồi nhấn Ctrl+J trên Mac hoặc Ctrl+Q trên Windows. Bạn cũng có thể nhấp chuột phải-> Đi tới-> Khai báo cách sử dụng. Vì vậy, chẳng hạn, bạn có thể phát hiện ra rằng AbleBot của chúng tôi thực sự kế thừa từ TelegramLongPollingBot tiêu chuẩn. Chỉ có điều nó sử dụng lambdas, giúp giảm đáng kể mã. Phần tiếp theo (cuối cùng) sẽ phát triển phần đối thoại và triển khai trên Heroku.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION