PARTE 1 Per non confondersi successivamente nelle parti del programma, provo a dividere tutta la logica in classi separate. Le frasi effettive con cui il bot risponderà verranno memorizzate nell'interfaccia
Constants
. Creiamo una linea lì:
String START_DESCRIPTION = "Hello";
Andiamo quindi in classe TelegramBot
e inseriamo il seguente codice:
public Ability replyToStart() {
return Ability
.builder()
.name("start")
.info(Constants.START_DESCRIPTION)
.locality(ALL)
.privacy(PUBLIC)
.action(ctx -> silent.send("Hello!", ctx.chatId()))
.build();
}
Ora il bot può salutare i propri client in risposta a un comando standard /start
. Prova a eseguirlo: il bot è già un po' vivo! Ma, come ogni mostro di Frankenstein, gli mancano un paio di arti.
Utilizzando la tastiera integrata
Affinché il bot possa costruire un dialogo con noi, abbiamo bisogno di altre due classi:MessageFactory
e KeyboardFactory
. Il primo leggerà le risposte delle persone e genererà messaggi, mentre il secondo creerà pulsanti con le risposte.
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>
Lungo il percorso aggiungeremo a 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!";
Ora possiamo semplicemente chiamare il metodo statico della nostra fabbrica per utilizzare la tastiera integrata. La parte più importante del codice è il file setCallbackData()
. Riconosce quale pulsante è stato premuto dall'utente. Andiamo a 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();
}
}
}
Sostituiamo il codice nel metodo 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();
}
E un altro emendamento nella stessa classe: sostituzione del costruttore:
private TelegramBot(String botToken, String botUsername) {
super(botToken, botUsername);
messageFactory = new MessageFactory(sender);
}
Prova a riavviare il bot. Ora offrirà la tastiera integrata in risposta alle tue azioni. Trucchi utili per i principianti: se stai usando Idea e vuoi vedere la documentazione di una classe, seleziona la classe o il metodo e premi Ctrl+J su Mac o Ctrl+Q su Windows. Puoi anche fare clic con il pulsante destro del mouse->Vai a->Dichiarazione di utilizzo. Così, ad esempio, puoi scoprire che il nostro AbilityBot in realtà eredita dallo standard TelegramLongPollingBot. Solo che utilizza lambda, il che riduce significativamente il codice. La parte successiva (finale) svilupperà il dialogo e lo schieramento su Heroku.
GO TO FULL VERSION