JavaRush /Blog Java /Random-FR /Telegram Ability Bot : un bot capable de dialoguer : Part...
Chundrik
Niveau 35
Санкт-Петербург

Telegram Ability Bot : un bot capable de dialoguer : Partie 2

Publié dans le groupe Random-FR
PARTIE 1 Afin de ne pas me tromper plus tard dans certaines parties du programme, j'essaie de diviser toute la logique en classes distinctes. Les phrases réelles avec lesquelles le bot répondra seront stockées dans l'interface Constants. Créons ici une ligne :
String START_DESCRIPTION = "Hello";
Allons ensuite dans la classe TelegramBotet insérons le code suivant :
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 : un bot capable de dialoguer : Partie 2 - 1Le bot peut désormais saluer ses clients en réponse à une commande standard /start. Essayez de le lancer : le bot est déjà un peu vivant ! Mais comme tout monstre de Frankenstein, il lui manque quelques membres.Telegram Ability Bot : un bot capable de dialoguer : Partie 2 - 2

Utilisation du clavier intégré

Pour que le bot puisse établir un dialogue avec nous, nous avons besoin de deux classes supplémentaires : MessageFactoryet KeyboardFactory. Le premier lira les réponses des gens et générera des messages, et le second créera des boutons avec des réponses.
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>
En chemin, nous ajouterons à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!";
Nous pouvons désormais simplement appeler la méthode statique de notre usine pour utiliser le clavier intégré. La partie la plus importante du code est le setCallbackData(). Il reconnaît sur quel bouton l'utilisateur a appuyé. Allons à 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();
        }
    }
}
Remplaçons le code dans la méthode 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();
    }
Et encore un amendement dans la même classe - remplacement du constructeur :
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Essayez de redémarrer votre bot. Il proposera désormais le clavier intégré en réponse à vos actions. Telegram Ability Bot : un bot capable de dialoguer : Partie 2 - 3Astuces utiles pour les débutants : si vous utilisez Idea et souhaitez consulter la documentation d'un cours, sélectionnez la classe ou la méthode et appuyez sur Ctrl+J sur Mac ou Ctrl+Q sur Windows. Vous pouvez également faire un clic droit->Aller vers->Déclaration des usages. Ainsi, par exemple, vous pouvez découvrir que notre AbilityBot hérite en fait du TelegramLongPollingBot standard. Seulement, il utilise des lambdas, ce qui réduit considérablement le code. La prochaine (dernière) partie développera le dialogue et le déploiement sur Heroku.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION