Salam, teman-teman terkasih. Ya, ya, tepatnya teman. Saya sudah begitu familiar dengan rangkaian artikel ini sehingga orang-orang yang secara rutin menuliskan rasa terima kasihnya di kolom komentar dan/atau menunjukkan bahwa mereka telah membaca dan memahami materi tersebut sudah menjadi dekat. Anda dan saya bergerak dari kedua sisi menuju tujuan yang sama. Anda ingin memahami, tetapi saya ingin menjelaskan. Dan kami memiliki tujuan akhir yang sama - aplikasi tertulis yang dapat Anda pahami dari awal hingga akhir. Anda mungkin sudah banyak mendengar tentang apa yang akan saya uraikan di artikel ini. Saya rasa saya tidak akan memberi tahu Anda sesuatu yang baru dan luar biasa (tetapi dalam kerangka proyek, hal ini perlu diketahui/diulangi). Pada musim semi saya menulis bot untuk diri saya sendiri, jadi kami akan mengandalkan “pola”-nya.
Kami menulis JRTB-2
Kami akan melakukan hal yang sama seperti yang kami lakukan di artikel dengan tugas JRTB-0 :- Kami memperbarui cabang utama di proyek lokal menggunakan kombinasi ctrl + t .
- Berdasarkan cabang utama, kami membuat:
- Tambahkan bot.
- Kami membuat komitmen baru dengan deskripsi tentang apa yang telah dilakukan dan mengirimkannya ke GitHub.
- Buat permintaan tarik untuk cabang utama dan periksa lagi. Kami menunggu build selesai (tindakan github), menggabungkannya ke cabang utama.
- Tutup tugas terkait.
Apa itu bot telegram
Kami, para pengembang, dapat membayangkan bekerja dengan bot telegram seperti ini: kami menggunakan klien mereka untuk bekerja dengan mereka. Kami memiliki perpustakaan siap pakai untuk bekerja. Ada serangkaian tindakan yang setelahnya bot telegram akan mengetahui bahwa itu terkait dengan program kami. Dan sudah di dalam program ini kita akan belajar cara menerima surat, perintah, dan memprosesnya. Ada yang namanya perintah di bot telegram : diawali dengan garis miring “/”. Setelah itu, kita langsung menulis kata itu bersama-sama, dan ini akan dianggap sebagai perintah. Misalnya, ada dua perintah yang harus diketahui semua orang:- /start — mulai bekerja dengan bot;
- /stop - mengakhiri pekerjaan dengan bot.
Buat bot dengan Botfather
Untuk menghubungkan bot, Anda harus membuatnya terlebih dahulu. Telegram memiliki pendekatan - membuat bot dengan nama uniknya sendiri. Itu juga akan disertai dengan token (string besar yang berfungsi seperti kata sandi). Saya sudah membuat bot untuk JavaRush - @javarush_community_bot . Bot ini masih kosong dan tidak bisa berbuat apa-apa. Yang penting harus ada _bot di akhir nama . Untuk menunjukkan cara melakukan ini, saya akan membuat bot tempat kami akan menguji fungsionalitasnya. Dalam hal proyek nyata, ini akan menjadi lingkungan pengujian. Dan lingkungan utama kita adalah lingkungan prod (prod - produksi, yaitu lingkungan nyata di mana proyek akan dijalankan). Tentu saja, dimungkinkan untuk menambahkan lingkungan lain - lingkungan kotak pasir: kotak pasir umum, lebih mudah diubah dan dapat diakses oleh semua peserta pengembangan. Tapi ini hanya akan memperumit situasi pada tahap pembuatan proyek. Untuk saat ini, mari buat dua bot lagi untuk pengujian dan untuk lingkungan sandbox. Langkah pertama adalah membuat (mendaftarkan) bot di Telegram itu sendiri. Kita perlu mencari botnya: @Botfather dan menulis perintah padanya: /newbot Selanjutnya kita diminta memberi nama pada bot ini. Karena ini adalah bot untuk tugas pengujian, namanya akan sesuai: [TEST] JavarushBot Sekarang saatnya memberikan nama unik yang selalu dapat ditemukan - nama penggunanya: test_javarush_community Seperti yang saya katakan di atas, Anda perlu menambahkan _bot akhiran untuk nama pengguna, jadi kita tulis lagi: test_javarush_community_bot Dan selesai! Bot telah dibuat. Sekarang, dengan menggunakan nama pengguna dan token, itu dapat dihubungkan ke proyek kita. Tentu saja, demi kelancaran server pengujian, saya tidak akan menampilkan token (pada dasarnya kata sandi untuk mengakses bot) bot ini untuk dilihat publik.Kami menghubungkan bot ke proyek
Kami tidak akan menyertakan perpustakaan seperti biasa, tetapi akan segera memanfaatkan kerangka kami - SpringBoot. Dia memiliki sesuatu seperti Starter. Dengan menyertakan perpustakaan, kita dapat menggunakannya untuk memberi tahu SpringBoot bahwa kita ingin mengonfigurasi proyek dengan benar. Jika kita menggunakan rute biasa, yang dijelaskan di banyak tempat, kita perlu membuat konfigurasi di suatu tempat yang memiliki sesuatu seperti ini:ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
telegramBotsApi.registerBot(Bot.getBot());
} catch (TelegramApiRequestException e) {
e.printStackTrace();
}
Di sini sebuah objek dibuat yang dengannya Anda dapat membuat koneksi dengan bot. Dalam kasus kami, starter yang ingin kami sambungkan akan melakukan segalanya untuk kami di suatu tempat "di bawah tenda" (ini juga merupakan terjemahan dari frasa yang sering digunakan dalam TI - di bawah tenda). Berikut ini tautan ke starter ini . Anda bisa langsung melihat dari file README.md apa itu, mengapa dan bagaimana cara menggunakannya. Untuk menghubungkannya, Anda hanya perlu menambahkan ketergantungan ini ke memori. Itu saja :) Inilah ketergantungan yang diperlukan:
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-spring-boot-starter</artifactId>
<version>5.0.1</version>
</dependency>
Kami menambahkannya ke memori kami. Kami menginstal versi seperti yang diharapkan dan memperbarui proyek Maven. Berdasarkan uraiannya, kita hanya perlu membuat kelas baru, mewarisi dari TelegramLongPollingBot dan menambahkan kelas ini ke Konteks Aplikasi SpringBoot kita. Konteks Aplikasi adalah tempat penyimpanan objek yang dibuat untuk menjalankan proyek. Untuk menambahkan kelas, Anda perlu menggunakan salah satu anotasi: @Component, @Service, @Repository, @Controller. Atau anotasi @Bean jika dibuat melalui metode di kelas konfigurasi (yaitu, di kelas yang ditandai dengan anotasi Konfigurasi). Saya memahami bahwa semua ini mungkin masih tampak tidak dapat dipahami. Tetapi ketika Anda mulai memahaminya, Anda akan melihat bahwa tidak ada yang rumit di sana. Untuk memahami Spring Boot dengan cepat, saya merekomendasikan buku keren - Spring In Action edisi ke-5. Jika mau, saya bisa menulis serangkaian artikel berdasarkan buku ini. Ayo kembali. Dalam paket yang berisi JavarushTelegramBotApplication, kami membuat paket bot , yang akan berisi bot telegram kami. Namanya adalah JavaRushTelegramBot :
package com.github.javarushcommunity.jrtb.bot;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
/**
* Telegrambot for Javarush Community from Javarush community.
*/
@Component
public class JavarushTelegramBot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return null;
}
@Override
public String getBotToken() {
return null;
}
}
Kelas ini abstrak dan tiga metode harus diterapkan. Mari kita bahas lebih detail:
- onUpdateReceived(Perbarui pembaruan) - ini adalah titik masuk di mana pesan dari pengguna akan tiba. Semua logika baru akan datang dari sini;
- getBotUsername() - di sini Anda perlu menambahkan nama pengguna bot kami yang akan kami sambungkan;
- getBotToken() - dan ini adalah token bot.
- bot.nama pengguna ;
- bot.token .
package com.github.javarushcommunity.jrtb.bot;
import org.springframework.beans.factory.annotation.Value;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
/**
* Telegram bot for Javarush Community from Javarush community.
*/
@Component
public class JavarushTelegramBot extends TelegramLongPollingBot {
@Value("${bot.username}")
private String username;
@Value("${bot.token}")
private String token;
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return username;
}
@Override
public String getBotToken() {
return token;
}
}
Terlihat bahwa kita meneruskan nilai variabel ke anotasi. Dan ketika SpringBoot membuat objek bot kita, nilainya akan diambil dari properti (sekali lagi, kertas kalkir dari bahasa Inggris - properti). Kita hampir sampai. Anda perlu membuat bot menjawab sesuatu. Oleh karena itu, mari perbarui metode onUpdateReceived . Kita perlu mengambil pesan yang masuk ke bot dan meneruskannya kembali. Dengan cara ini kita akan mengetahui bahwa bot tersebut berfungsi. Untuk melakukan ini, kami akan menulis secara kasar dan cepat apa yang diperlukan:
@Override
public void onUpdateReceived(Update update) {
if(update.hasMessage() && update.getMessage().hasText()) {
String message = update.getMessage().getText().trim();
String chatId = update.getMessage().getChatId().toString();
SendMessage sm = new SendMessage();
sm.setChatId(chatId);
sm.setText(message);
try {
execute(sm);
} catch (TelegramApiException e) {
//todo add logging to the project.
e.printStackTrace();
}
}
}
Semuanya di sini sangat sederhana: kami memeriksa apakah pesan tersebut benar-benar ada, jadi kami mengekstrak pesan itu sendiri ( message ) dan ID obrolan ( chatId ) tempat korespondensi berlangsung. Selanjutnya, kita membuat objek untuk mengirim pesan SendMessage , meneruskan pesan itu sendiri dan ID obrolan ke sana - yaitu, apa yang akan dikirim ke bot dan ke mana. Kita sudah muak dengan hal ini. Selanjutnya, kita menjalankan metode utama di kelas JavarushTelegramBotApplication dan mencari bot kita di Telegram: Dari log kita melihat bahwa bot telah dimulai. Jadi, saatnya membuka Telegram dan menulis ke bot: Kami klik mulai dan kami segera menerima jawaban: Ayo tulis lagi omong kosong untuk diperiksa: Dan selesai, pada titik ini kami dapat mengatakan bahwa tugas JRTB-2 kami selesai . Anda belum bisa menulis tes apa pun di sini, jadi kami biarkan semuanya apa adanya. Selanjutnya Anda perlu membuat komit baru: Perhatikan nama komit: sekali lagi saya menarik perhatian Anda pada hal ini. Komit pertama-tama berisi nama tugas, dan kemudian penjelasan lebih rinci tentang apa yang telah dilakukan. Klik Komit dan Dorong... dan konfirmasikan dengan mengklik Dorong lagi : Buka proyek kami . Seperti sebelumnya, GitHub telah melihat cabang baru dan menawarkan untuk membuat permintaan tarik untuk main. Kami tidak menolak dan menciptakannya: Seperti biasa, kami telah memilih label, proyek, dan menugaskannya kepada saya. Terakhir, klik Buat Permintaan Tarik. Mari kita tunggu sebentar sementara pembangunan selesai - dan selesai, permintaan tarik siap untuk digabungkan:
Pembuatan versi
Saya entah bagaimana melewatkan poin bahwa kita perlu melakukan pembuatan versi. Untuk melakukan ini, kami akan membuat beberapa perubahan lagi di cabang kami. Kami kembali ke IDEA dan melihat versi proyek di memori: Versinya adalah 0.0.1-SNAPSHOT . Ini adalah versi tugas. Dan kami akan mulai dengan memperbarui versi proyek dengan setiap masalah baru yang terpecahkan. Hingga kami mencapai MVP, versi tersebut akan hadir dengan akhiran -SNAPSHOT. Apa skema versinya? XYZ-SNAPSHOT Dimana:- X - pembaruan versi utama, sering kali mengandung masalah kompatibilitas mundur dengan versi sebelumnya;
- Y - perubahan tidak terlalu besar, sepenuhnya kompatibel dengan versi sebelumnya;
- Z adalah penghitung cacat yang kami temukan dan perbaiki.
GO TO FULL VERSION