Halo semua! Pada titik tertentu dalam studi Anda, Anda ingin beralih dari memecahkan masalah ke menciptakan proyek nyata yang akan menjadi dasar portofolio Anda. Ketika saya memulai magang (yang sangat saya rekomendasikan kepada semua orang), saya menerima tawaran untuk menulis bot telegram sebagai pekerja lepas. Karena sedikit pengetahuan saya, saya menulis bot yang cukup sederhana ( komit terakhir sebelum bermigrasi ke Spring ), yang berisi tiga utas:
dan Telegram API yang telah disebutkan di atas : Pustaka TelegramBots-Spring-Boot-Starter mencakup Spring Boot dan Telegram API. Menggunakannya memungkinkan kita untuk mendeklarasikan bot dalam kode kita dengan cara yang cukup sederhana, dan Spring sendiri akan membuat Bean dan mengaktifkan bot tersebut. Jika Anda tertarik dengan apa yang terjadi saat ini, lihat sumber perpustakaan (di lingkungan pengembangan atau di Github ). Kami juga menambahkan parameter kompilasi: Jangan lupa untuk memperbarui semua dependensi setelah mengisi pom! Mari buat dua kelas - Aplikasi dan Bot, serta file application.yaml di folder sumber daya. Struktur proyek saya terlihat seperti ini: Pada tahap ini, mari tambahkan kredensial bot kita ke application.yaml:
- utas penerimaan pesan;
- utas pengiriman pesan;
- thread penjadwalan acara (memeriksa pesan terjadwal dan memperbarui data cache dari JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notasi hierarki memungkinkan kita menghindari pengulangan (bot.name, bot.token) dan meningkatkan keterbacaan. Jika Anda belum membuat bot, Anda dapat membuatnya dengan mengikuti petunjuk resmi . Jika Anda tidak ingin menampilkan kredensial bot di application.yaml (yang benar), gunakan variabel lingkungan saat menerapkan:
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 Aplikasi:
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 kita melakukan semuanya dengan benar, maka kita dapat menjalankan main dan menyapa bot kita. Siap! Kami telah berhasil menulis dan meluncurkan bot telegram yang menyapa setiap pesan masuk. Jika artikel ini bermanfaat bagi Anda, terima kasih yang terbaik adalah jika Anda melihat repositori saya dan meninggalkan bintang. Di sana Anda juga akan menemukan bot telegram versi saya, yang memiliki banyak fitur menarik:
- menyimpan pengguna dalam database Postgres;
- otorisasi akses ke perintah berdasarkan peran pengguna;
- penggunaan anotasi khusus @BotCommand dan @RequiredRoles untuk membuat penangan pesan dan memeriksa hak pengguna;
- dukungan untuk membuat jadwal notifikasi.
GO TO FULL VERSION