Hai semua! Pada satu ketika dalam pengajian anda, anda ingin beralih daripada menyelesaikan masalah kepada mencipta projek sebenar yang akan membentuk asas portfolio anda. Apabila saya memulakan latihan saya (yang saya sangat mengesyorkan kepada semua orang), saya menerima tawaran untuk menulis bot telegram sebagai pekerja bebas. Disebabkan pengetahuan saya yang sedikit, saya menulis bot yang agak mudah ( komit terakhir sebelum berhijrah ke Spring ), yang mengandungi tiga utas:
dan API Telegram yang telah disebutkan di atas : Pustaka TelegramBots-Spring-Boot-Starter termasuk Spring Boot dan Telegram API. Menggunakannya membolehkan kami mengisytiharkan bot dalam kod kami dengan cara yang agak mudah, dan Spring sendiri akan mencipta Bean dan mengaktifkan bot. Jika anda berminat dengan apa yang berlaku di bawah hud pada masa ini, kemudian lihat sumber perpustakaan (dalam persekitaran pembangunan atau pada Github ). Kami juga menambah parameter kompilasi: Jangan lupa untuk mengemas kini semua kebergantungan selepas mengisi pom! Mari buat dua kelas - App dan Bot, serta fail application.yaml dalam folder sumber. Struktur projek saya kelihatan seperti ini: Pada peringkat ini, mari tambahkan bukti kelayakan bot kami pada application.yaml:
- benang penerima mesej;
- benang menghantar mesej;
- urutan penjadualan acara (ia menyemak untuk mesej berjadual dan mengemas kini data cache daripada JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notasi hierarki membolehkan kami mengelakkan pengulangan (bot.name, bot.token) dan meningkatkan kebolehbacaan. Jika anda belum mencipta bot lagi, anda boleh menciptanya dengan mengikut arahan rasmi . Jika anda tidak mahu memaparkan bukti kelayakan bot dalam application.yaml (yang betul), gunakan pembolehubah persekitaran semasa menggunakan:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Mengisi kelas 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;
}
}
Isi kelas Apl:
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);
}
}
Jika kami melakukan semuanya dengan betul, maka kami boleh menjalankan main dan bertanya khabar bot kami. sedia! Kami telah berjaya menulis dan melancarkan bot telegram yang menyapa setiap mesej yang masuk. Sekiranya artikel ini berguna kepada anda, maka terima kasih yang terbaik adalah jika anda melihat repositori saya dan meninggalkan bintang. Di sana anda juga akan menemui bot telegram versi saya, yang mempunyai banyak ciri menarik:
- menyimpan pengguna dalam pangkalan data Postgres;
- kebenaran akses kepada arahan berdasarkan peranan pengguna;
- penggunaan anotasi tersuai @BotCommand dan @RequiredRoles untuk mencipta pengendali mesej dan menyemak hak pengguna;
- sokongan untuk membuat jadual pemberitahuan.
GO TO FULL VERSION