JavaRush /Java Blog /Random-KO /Telegram Ability Bot: 대화를 수행할 수 있는 봇: 2부
Chundrik
레벨 35
Санкт-Петербург

Telegram Ability Bot: 대화를 수행할 수 있는 봇: 2부

Random-KO 그룹에 게시되었습니다
PART 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 Ability Bot: 대화를 수행할 수 있는 봇: 2부 - 1이제 봇은 표준 명령에 대한 응답으로 클라이언트에게 인사할 수 있습니다 /start. 실행해 보세요. 봇이 이미 조금 살아있습니다! 하지만 여느 프랑켄슈타인 괴물처럼 그에게도 팔다리가 몇 개 없습니다.텔레그램 어빌리티 봇: 대화를 할 수 있는 봇: 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 Ability Bot: 대화를 수행할 수 있는 봇: 2부 - 3부초보자를 위한 유용한 생활 꿀팁: Idea를 사용하고 있고 클래스에 대한 문서를 보려면 클래스나 메서드를 선택하고 Mac에서는 Ctrl+J를, Windows에서는 Ctrl+Q를 누르세요. 마우스 오른쪽 버튼 클릭 -> 이동 -> 사용 선언을 수행할 수도 있습니다. 따라서 예를 들어 AbilityBot이 실제로 표준 TelegramLongPollingBot에서 상속된다는 것을 알 수 있습니다. 오직 람다를 사용하므로 코드가 크게 줄어듭니다. 다음(최종) 부분에서는 Heroku의 대화 및 배포를 개발합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION