JavaRush /จาวาบล็อก /Random-TH /การสร้างบอทโทรเลขโดยใช้ Spring Boot
Whiskels
ระดับ
Москва

การสร้างบอทโทรเลขโดยใช้ Spring Boot

เผยแพร่ในกลุ่ม
สวัสดีทุกคน! เมื่อถึงจุดหนึ่งของการศึกษา คุณต้องการเปลี่ยนจากการแก้ปัญหาไปสู่การสร้างโครงการจริงที่จะเป็นพื้นฐานของแฟ้มผลงานของคุณ เมื่อฉันเริ่มฝึกงาน (ซึ่งฉันแนะนำให้ทุกคนเป็นอย่างยิ่ง) ฉันได้รับข้อเสนอให้เขียนบอทโทรเลขในฐานะฟรีแลนซ์ เนื่องจากความรู้อันน้อยนิดของฉัน ฉันจึงเขียนบอทที่ค่อนข้างเรียบง่าย ( คำสั่งสุดท้ายก่อนที่จะย้ายไปยัง Spring ) ซึ่งมีสามเธรด:
  • เธรดการรับข้อความ
  • เธรดการส่งข้อความ
  • เธรดการกำหนดเวลากิจกรรม (ตรวจสอบข้อความที่กำหนดเวลาและอัปเดตข้อมูลแคชจาก JSON)
เมื่อเขียนฟังก์ชันนี้ ฉันอาศัยบทความนี้ เป็นอย่าง มาก ทุกอย่างทำงานได้ค่อนข้างดี แต่ยิ่งฉันเจาะลึก Spring มากเท่าไหร่ ฉันก็ยิ่งต้องการปรับโครงสร้างใหม่ทุกอย่างมากขึ้นเพื่อลดการเชื่อมโยงกันของโปรแกรมและปรับปรุงคุณภาพของโค้ด SonarLint (ปลั๊กอินสำหรับตรวจสอบคุณภาพโค้ดโดยอัตโนมัติ) พยายามโน้มน้าวฉันว่าการมี while วนซ้ำไม่สิ้นสุดนั้นไม่ดีนัก เมื่อถึงจุดหนึ่ง ฉันตัดสินใจและเขียนทุกอย่างใหม่ และตอนนี้ฉันต้องการแบ่งปันความรู้ที่ฉันได้รับระหว่างกระบวนการปรับโครงสร้างใหม่กับคุณ เริ่มต้นด้วยพื้นฐานและโดยเฉพาะอย่างยิ่ง - ด้วยTelegramBots-Spring-Boot-Starter เอาล่ะ ไปกันเลย! มาสร้างบอทที่จะทักทายตอบข้อความกัน ก่อนอื่น เราต้องสร้างโปรเจ็กต์ Maven ใหม่ มาเพิ่มการพึ่งพาที่จำเป็นให้กับ pom.xml เพิ่มเวอร์ชัน Java และ TelegramBots-Spring-Boot-Starter ให้กับคุณสมบัติ และเราลงทะเบียนการพึ่งพา - ที่นี่เราจะมี TelegramBots-Spring-Boot-Starter และ Telegram API ที่กล่าวถึงข้างต้นแล้ว : การสร้างบอทโทรเลขโดยใช้ Spring Boot - 1ไลบรารี TelegramBots-Spring-Boot-Starter ประกอบด้วย Spring Boot และ Telegram API การใช้มันทำให้เราสามารถประกาศบอทในโค้ดของเราด้วยวิธีที่ค่อนข้างง่าย และ Spring เองก็จะสร้าง Bean และเปิดใช้งานบอท หากคุณสนใจในสิ่งที่เกิดขึ้นภายใต้ประทุนในขณะนี้ ให้ดูที่แหล่งที่มาของไลบรารี (ในสภาพแวดล้อมการพัฒนาหรือบนGithub ) นอกจากนี้เรายังเพิ่มพารามิเตอร์การคอมไพล์: การสร้างบอทโทรเลขโดยใช้ Spring Boot - 2 อย่าลืมอัปเดตการอ้างอิงทั้งหมดหลังจากกรอก pom แล้ว! มาสร้างสองคลาส - App และ Bot รวมถึงไฟล์ application.yaml ในโฟลเดอร์ทรัพยากร โครงสร้างของโปรเจ็กต์ของฉันมีลักษณะดังนี้: การสร้างบอทโทรเลขโดยใช้ Spring Boot - 3ในขั้นตอนนี้ มาเพิ่มข้อมูลประจำตัวของบอทของเราไปที่ application.yaml:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
สัญกรณ์แบบลำดับชั้นช่วยให้เราหลีกเลี่ยงการทำซ้ำ (bot.name, bot.token) และปรับปรุงความสามารถในการอ่าน หากคุณยังไม่ได้สร้างบอท คุณสามารถสร้างได้โดยทำตามคำแนะนำอย่างเป็นทางการ หากคุณไม่ต้องการแสดงข้อมูลประจำตัวของบอทใน application.yaml (ซึ่งถูกต้อง) ให้ใช้ตัวแปรสภาพแวดล้อมเมื่อปรับใช้:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
กรอกคลาส Bot:
package com.whiskels.telegram.bot;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;

// Аннотация @Component необходима, чтобы наш класс распознавался Spring, How полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
    // Аннотация @Value позволяет задавать meaning полю путем считывания из application.yaml
    @Value("${bot.name}")
    private String botUsername;

    @Value("${bot.token}")
    private String botToken;

    /* Перегружаем метод интерфейса LongPollingBot
    Теперь при получении messages наш бот будет отвечать сообщением Hi!
     */
    @Override
    public void onUpdateReceived(Update update) {
        try {
            execute(new SendMessage().setChatId(update.getMessage().getChatId())
            .setText("Hi!"));
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }

    // Геттеры, которые необходимы для наследования от TelegramLongPollingBot
    public String getBotUsername() {
        return botUsername;
    }

    public String getBotToken() {
        return botToken;
    }
}
กรอกคลาสแอป:
package com.whiskels.telegram;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.telegram.telegrambots.ApiContextInitializer;

// Аннотация, которая объединяет в себя @Configuration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        // Здесь code написан по заветам
        // https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
        ApiContextInitializer.init();

        SpringApplication.run(App.class, args);
    }
}
หากเราทำทุกอย่างถูกต้อง เราก็จะสามารถรัน main และทักทายบอทของเราได้ การสร้างบอทโทรเลขโดยใช้ Spring Boot - 4พร้อม! เราประสบความสำเร็จในการเขียนและเปิดตัวบอทโทรเลขที่ทักทายทุกข้อความที่เข้ามา หากบทความนี้มีประโยชน์สำหรับคุณ ขอขอบคุณอย่างดีที่สุดหากคุณดูที่พื้นที่เก็บข้อมูลของฉันและฝากดาวไว้ คุณจะพบบอตโทรเลขเวอร์ชันของฉันซึ่งมีคุณสมบัติที่น่าสนใจมากมาย:
  • การจัดเก็บผู้ใช้ในฐานข้อมูล Postgres
  • การอนุญาตการเข้าถึงคำสั่งตามบทบาทของผู้ใช้
  • การใช้คำอธิบายประกอบที่กำหนดเอง @BotCommand และ @RequiredRoles เพื่อสร้างตัวจัดการข้อความและตรวจสอบสิทธิ์ของผู้ใช้
  • รองรับการสร้างกำหนดการแจ้งเตือน
หากคุณสนใจฟังก์ชั่นใด ๆ นี้เขียนความคิดเห็นและฉันจะพยายามตอบหรือเขียนบทความโดยละเอียดเกี่ยวกับวิธีการสร้างมันขึ้นมาใหม่ ป.ล. นี่เป็นบทความแรกของฉันเกี่ยวกับ JavaRush และฉันอยากจะเจาะลึกเข้าไปในคำอธิบายประกอบของ Spring JPA และ @Scheduled แต่ก่อนอื่น ฉันคิดว่ามันคุ้มค่าที่จะเขียนคู่มือนี้เกี่ยวกับวิธีการสร้างบอทโดยทั่วไปโดยใช้ Spring Boot มีการเขียนบทความเกี่ยวกับบอทหลายบทความแล้ว แต่การค้นหาไม่ปรากฏคำแนะนำดังกล่าวดังนั้นฉันจึงตัดสินใจเติมช่องนี้ :) ฉันอยากจะพูดถึง Miroha ด้วย - ขอบคุณสำหรับแนวคิดของ UpdateHandlers ฉันขโมยมันมาเพื่อ ตัวฉันเอง :) ตอนที่ 2 ตอนที่ 3
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION