Salam, kanca-kanca sing daktresnani. Ya, ya, persis kanca. Aku wis kenal banget karo seri artikel iki, mula wong-wong sing ajeg nulis matur nuwun ing komentar lan / utawa nuduhake yen dheweke wis maca lan ngerti materi kasebut wis cedhak. Sampeyan lan aku pindhah saka loro-lorone menyang tujuan sing padha. Sampeyan pengin ngerti, nanging aku pengin nerangake. Lan kita duwe tujuan pungkasan sing padha - aplikasi sing ditulis sing bisa dingerteni saka wiwitan nganti rampung. Sampeyan bisa uga wis krungu babagan akeh sing bakal dakgambarake ing artikel iki. Aku ora mikir sing aku bakal pitutur marang kowe apa-apa anyar lan mirunggan (nanging ing framework saka project perlu ngerti / mbaleni iki). Ing musim semi aku nulis bot kanggo aku, supaya kita bakal ngandelake "pola".
Kita nulis JRTB-2
Kita bakal nindakake padha kaya sing ditindakake ing artikel kanthi tugas JRTB-0 :- Kita nganyari cabang utama ing proyek lokal nggunakake kombinasi ctrl + t .
- Adhedhasar cabang utama, kita nggawe:
- Tambah bot.
- Kita nggawe komitmen anyar kanthi katrangan babagan apa sing wis ditindakake lan push menyang GitHub.
- Nggawe panjalukan narik kanggo cabang utama lan mriksa maneh. Kita ngenteni mbangun kanggo liwat (tumindak github), gabungke menyang cabang utama.
- Nutup tugas sing cocog.
Apa bot telegram
Kita, pangembang, bisa mbayangno nggarap bot telegram kaya iki: kita nggunakake klien kanggo nggarap dheweke. Kita duwe perpustakaan siap-digawe kanggo karya. Ana sawetara tumindak sawise bot telegram bakal ngerti manawa ana gandhengane karo program kita. Lan wis ana ing program kasebut, kita bakal sinau carane nampa layang, prentah lan cara ngolah. Ana prentah ing bot telegram : diwiwiti kanthi garis miring "/". Sawise iku, kita langsung nulis tembung kasebut bebarengan, lan iki bakal dianggep minangka prentah. Contone, ana rong prentah sing kudu dingerteni saben wong:- /start — miwiti nggarap bot;
- / mandeg - mungkasi karya karo bot.
Nggawe bot karo BotFather
Kanggo nyambungake bot, sampeyan kudu nggawe. Telegram duwe pendekatan - nggawe bot kanthi jeneng unik dhewe. Uga bakal diiringi token (senar gedhe sing dianggo kaya sandhi). Aku wis nggawe bot kanggo JavaRush - @javarush_community_bot . Bot iki isih kosong lan ora bisa nindakake apa-apa. Sing utama yaiku kudu ana _bot ing mburi jeneng . Kanggo nuduhake carane nindakake iki, aku bakal nggawe bot sing bakal nyoba fungsi kita. Ing babagan proyek nyata, iki bakal dadi lingkungan tes. Lan sing utama yaiku lingkungan prod (prod - produksi, yaiku, lingkungan nyata ing ngendi proyek kasebut bakal ditindakake). Mesthi wae, bisa uga nambah lingkungan liyane - lingkungan kothak wedhi: kothak wedhi umum, luwih bisa diganti lan bisa diakses kabeh peserta pembangunan. Nanging iki mung bakal nggawe rumit kahanan ing tahap nggawe proyek. Saiki, ayo nggawe rong bot maneh kanggo tes lan kanggo lingkungan kothak wedhi. Langkah pisanan yaiku nggawe (ndhaptar) bot ing Telegram dhewe. Kita kudu nemokake bot: @BotFather lan nulis perintah kasebut: / newbot Sabanjure, kita dijaluk menehi jeneng kanggo bot iki. Amarga iki minangka bot kanggo nguji tugas, jenenge bakal cocog: [TEST] JavarushBot Saiki wektune menehi jeneng unik sing bisa ditemokake - jeneng pangguna: test_javarush_community Kaya sing wis dakkandhakake ing ndhuwur, sampeyan kudu nambah _bot. suffix kanggo jeneng panganggo, supaya kita nulis maneh: test_javarush_community_bot Lan iku! Bot wis digawe. Saiki, nggunakake jeneng pangguna lan token, bisa disambungake menyang proyek kita. Mesthi, kanggo operasi lancar saka server test, aku ora bakal nampilake token (utamane tembung sandhi kanggo ngakses bot) bot iki kanggo ndeleng umum.Kita nyambungake bot menyang proyek kasebut
Kita ora bakal kalebu perpustakaan kaya biasane, nanging bakal langsung njupuk kauntungan saka balung kita - SpringBoot. Dheweke duwe perkara kaya Starter. Kanthi kalebu perpustakaan, kita bisa nggunakake aplikasi kasebut supaya SpringBoot ngerti yen kita pengin ngatur proyek kanthi bener. Yen kita arep menyang rute biasanipun, kang diterangake ing akeh panggonan, kita kudu nggawe konfigurasi nang endi wae sing bakal duwe kaya iki:ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
telegramBotsApi.registerBot(Bot.getBot());
} catch (TelegramApiRequestException e) {
e.printStackTrace();
}
Ing kene obyek digawe sing sampeyan bisa nggawe sambungan karo bot. Ing kasus kita, wiwitan sing arep kita sambungake bakal nindakake kabeh kanggo kita nang endi wae "ing hood" (iki uga terjemahan saka tembung sing kerep digunakake ing IT - ing hood). Punika link kanggo wiwitan iki . Sampeyan bisa langsung ndeleng saka file README.md apa iku, apa lan carane nggunakake. Kanggo nyambungake, sampeyan mung kudu nambah katergantungan iki menyang memori. Iku kabeh :) Mangkene ketergantungan sing dibutuhake:
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-spring-boot-starter</artifactId>
<version>5.0.1</version>
</dependency>
Kita nambahake ing memori kita. Kita nginstal versi kaya sing dikarepake lan nganyari proyek Maven. Adhedhasar katrangan, kita mung kudu nggawe kelas anyar, warisan saka TelegramLongPollingBot lan nambah kelas iki menyang Konteks Aplikasi SpringBoot kita. Konteks Aplikasi minangka papan ing ngendi obyek sing digawe kanggo nglakokake proyek disimpen. Kanggo nambah kelas, sampeyan kudu nggunakake salah sawijining anotasi: @Component, @Service, @Repository, @Controller. Utawa anotasi @Bean yen digawe liwat metode ing kelas konfigurasi (yaiku, ing kelas sing ditandhani karo anotasi Konfigurasi). Aku ngerti manawa kabeh iki isih katon ora bisa dingerteni. Nanging nalika sampeyan miwiti kanggo tokoh metu, sampeyan bakal weruh sing ana apa-apa rumit ana. Kanggo ngerteni kanthi cepet Spring Boot, aku nyaranake buku sing keren - Spring In Action edisi kaping 5. Yen ana kepinginan, aku bisa nulis seri artikel adhedhasar buku iki. Ayo padha bali. Ing paket sing ngemot JavarushTelegramBotApplication, kita nggawe paket bot , sing bakal ngemot bot telegram kita. Jenenge bakal 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 iki abstrak lan telung cara kudu ditindakake. Ayo dadi pirembagan bab mau luwih rinci:
- onUpdateReceived(Update update) - iki minangka titik entri ing ngendi pesen saka pangguna bakal teka. Kabeh logika anyar bakal teka saka kene;
- getBotUsername() - ing kene sampeyan kudu nambah jeneng panganggo bot sing bakal kita sambungake;
- getBotToken () - lan iki, miturut, minangka token bot.
- bot.username ;
- 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;
}
}
Bisa dideleng yen kita ngliwati nilai variabel menyang anotasi. Lan nalika SpringBoot nggawe obyek bot kita, nilai kasebut bakal dijupuk saka properti kasebut (maneh, nelusuri kertas saka basa Inggris - properti). Kita wis meh ana. Sampeyan kudu nggawe bot njawab soko. Mula, ayo nganyari metode onUpdateReceived . Kita kudu njupuk pesen sing teka menyang bot lan bali maneh. Kanthi cara iki kita bakal ngerti manawa bot kasebut bisa digunakake. Kanggo nindakake iki, kita bakal nulis kanthi kasar lan cepet apa sing dibutuhake:
@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();
}
}
}
Kabeh ing kene gampang banget: kita mriksa manawa pesen kasebut pancen ana, mula kita ngekstrak pesen kasebut dhewe ( pesen ) lan ID obrolan ( chatId ) ing ngendi korespondensi kasebut ditindakake. Sabanjure, kita nggawe obyek kanggo ngirim pesen SendMessage , ngirim pesen kasebut dhewe lan ID chatting - yaiku, apa sing kudu dikirim menyang bot lan ing ngendi. Kita wis cukup iki. Sabanjure, kita mbukak cara utama ing kelas JavarushTelegramBotApplication lan goleki bot kita ing Telegram: Saka log kita weruh yen bot wis diwiwiti. Dadi, wektune pindhah menyang Telegram lan nulis menyang bot: Kita klik wiwitan lan langsung nampa jawaban: Ayo nulis sawetara omong kosong liyane kanggo dipriksa: Lan saiki, kita bisa ujar manawa tugas JRTB-2 wis rampung. . Sampeyan durung bisa nulis tes apa wae ing kene, mula kita bakal ninggalake kabeh. Sabanjure sampeyan kudu nggawe komitmen anyar: Pay manungsa waé kanggo jeneng commit: maneh aku tarik manungsa waé kanggo iki. Komit pisanan ngemot jeneng tugas, banjur katrangan sing luwih rinci babagan apa sing wis ditindakake. Klik Komit lan Push... lan konfirmasi kanthi ngeklik Push maneh : Pindhah menyang proyek kita . Kaya sadurunge, GitHub wis ndeleng cabang anyar lan nawakake nggawe panjaluk tarik kanggo main. Kita ora nolak lan nggawe: Kaya biasane, kita wis milih label, proyek lan menehi aku. Pungkasan, klik Gawe Panjaluk Tarik. Ayo ngenteni sawetara wektu mbangun - lan iku, panjalukan tarik siap kanggo gabung:
Versiing
Aku piye wae ora kejawab titik sing kita kudu nindakake versioning. Kanggo nindakake iki, kita bakal nggawe sawetara owah-owahan ing cabang kita. Kita bali menyang IDEA lan katon ing versi project ing memori: Versi 0.0.1-SNAPSHOT . Iki versi tugas. Lan kita bakal miwiti kanthi nganyari versi project karo saben masalah anyar ditanggulangi. Nganti tekan MVP, versi kasebut bakal teka kanthi suffix -SNAPSHOT. Apa sing bakal dadi skema versi? XYZ-SNAPSHOT Where:- X - nganyari versi utama, asring ngemot masalah karo kompatibilitas mundur karo versi sadurungé;
- Y - ora owah-owahan gedhe banget, kanthi kompatibel karo versi sadurungé;
- Z minangka counter cacat sing ditemokake lan didandani.
GO TO FULL VERSION