ตอนที่ 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();
}
ตอนนี้บอทสามารถทักทายลูกค้าเพื่อตอบสนองต่อคำสั่งมาตรฐาน/start
ได้ ลองรันดู: บอทยังมีชีวิตอยู่นิดหน่อยแล้ว! แต่เช่นเดียวกับสัตว์ประหลาดแฟรงเกนสไตน์ เขาสูญเสียแขนขาไปสองสามข้าง
การใช้แป้นพิมพ์ในตัว
เพื่อให้บอทสร้างบทสนทนากับเรา เราจำเป็นต้องมีคลาสเพิ่มเติมอีกสองคลาส:MessageFactory
และKeyboardFactory
. อันแรกจะอ่านคำตอบของผู้คนและสร้างข้อความ และอันที่สองจะสร้างปุ่มพร้อมคำตอบ
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);
}
ลองรีสตาร์ทบอทของคุณ ตอนนี้จะมีคีย์บอร์ดในตัวเพื่อตอบสนองต่อการกระทำของคุณ เคล็ดลับที่เป็นประโยชน์สำหรับผู้เริ่มต้น: หากคุณใช้ Idea และต้องการดูเอกสารสำหรับชั้นเรียน ให้เลือกชั้นเรียนหรือวิธีการ แล้วกด Ctrl+J บน Mac หรือ Ctrl+Q บน Windows คุณยังสามารถคลิกขวา -> ไปที่ -> ประกาศการใช้งาน ตัวอย่างเช่น คุณจะพบว่าความสามารถ Bot ของเราสืบทอดมาจาก TelegramLongPollingBot มาตรฐานจริงๆ มีเพียงการใช้แลมบ์ดาซึ่งลดโค้ดลงอย่างมาก ส่วนถัดไป (สุดท้าย) จะพัฒนาบทสนทนาและการปรับใช้บน Heroku
GO TO FULL VERSION