JavaRush /Blog Jawa /Random-JV /Nambahake bot telegram menyang proyek - "Proyek Jawa saka...

Nambahake bot telegram menyang proyek - "Proyek Jawa saka A nganti Z"

Diterbitake ing grup
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). "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 1Ing 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 :
  1. Kita nganyari cabang utama ing proyek lokal nggunakake kombinasi ctrl + t ."Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 2
  2. Adhedhasar cabang utama, kita nggawe:"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 3
  3. Tambah bot.
  4. Kita nggawe komitmen anyar kanthi katrangan babagan apa sing wis ditindakake lan push menyang GitHub.
  5. Nggawe panjalukan narik kanggo cabang utama lan mriksa maneh. Kita ngenteni mbangun kanggo liwat (tumindak github), gabungke menyang cabang utama.
  6. 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.
Kita bakal nindakake liyane dhewe. Ayo kula nggawe reservasi langsung: kita bakal nindakake persis apa lan kanthi cara sing aku sinau. Lan nalika nggarap bot, aku yakin manawa bisa luwih apik. Lan yen ana wong sing pengin nindakake iki, aku mung bakal seneng lan bakal ndhukung upaya iki ing kabeh cara. Miturut cara, bab pisanan sing bakal kelangan yen ana wong nerangake carane program gambaran saka printah liwat kode, lan ora liwat setelan bot ing telegram. Aku ora sinau iki. Kita duwe sawetara artikel babagan sumber daya sing nerangake carane nggawe bot dhasar: dina iki kita bakal nindakake sing padha. Yen sampeyan duwe pitakon liyane, aku nyaranake maca artikel iki .

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"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 4 Sabanjure, kita dijaluk menehi jeneng kanggo bot iki. Amarga iki minangka bot kanggo nguji tugas, jenenge bakal cocog: [TEST] JavarushBot"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 5 Saiki wektune menehi jeneng unik sing bisa ditemokake - jeneng pangguna: test_javarush_community"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 6 Kaya sing wis dakkandhakake ing ndhuwur, sampeyan kudu nambah _bot. suffix kanggo jeneng panganggo, supaya kita nulis maneh: test_javarush_community_bot"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 7 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. "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 8Adhedhasar 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.
Ateges kaya login lan sandhi kanggo situs. Saiki kita ora bakal nulis nilai iki kanthi jelas. Iki diarani "hardcoding" (yaiku, ngiket sawetara nilai tartamtu - kaya biasane, nelusuri kertas saka kode hard Inggris). Sampeyan ora kudu nglakoni. Kita bakal pindhah cara liyane - kita bakal nulis data iki menyang application.properties kelas lan maca saka kene. Yagene iki perlu? Banjur, supaya nalika aplikasi diwiwiti, kita bisa nyetel nilai kasebut sacara eksternal. Iku fleksibel, iku bener. Pindhah menyang file src/main/resources/application.properties. Ing kana kita bakal nemokake jeneng kanggo variabel kasebut. File karo extension .properties diwaca minangka struktur tombol-nilai dipisahake dening "="", saben pasangan dadi baris kapisah. Dadi aku teka karo variabel kasebut:
  • bot.username ;
  • bot.token .
Iki bakal katon kaya: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 9SpringBoot nduweni anotasi sing apik - @Value. Yen digunakake kanthi bener, bakal narik nilai saka file application.properties. Kita nganyari proyek kanthi iki:
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: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 10Saka log kita weruh yen bot wis diwiwiti. Dadi, wektune pindhah menyang Telegram lan nulis menyang bot: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 11Kita klik wiwitan lan langsung nampa jawaban: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 12Ayo nulis sawetara omong kosong liyane kanggo dipriksa: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 13Lan 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: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 14Pay 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 : "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 15Pindhah menyang proyek kita . Kaya sadurunge, GitHub wis ndeleng cabang anyar lan nawakake nggawe panjaluk tarik kanggo main. Kita ora nolak lan nggawe: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 16Kaya 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:"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 17

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: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 18Versi 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.
Adhedhasar iki, kita bakal duwe versi pisanan - 0.1.0-SNAPSHOT - yaiku, kita durung duwe nganyari utama, mung sethithik kabeh, lan kita durung tekan MVP, mula ana suffix -SNAPSHOT. . Ayo ngganti iki ing memori: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 19Menyang file RELEASE_NOTES, ngendi kita bakal njlèntrèhaké owah-owahan ing project karo saben versi anyar: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 20Entri pisanan kita. Saiki, kanthi saben nganyari versi sakteruse, kita bakal nerangake apa sing kedadeyan. Kita nindakake kasus iki, nulis katrangan: JRTB-2: versi proyek sing dianyari lan ditambahake menyang RELEASE_NOTES Kabeh padha persis kaya sadurunge. Kita ngenteni mbangun lan kita bisa nggabungake owah-owahan kita. Mung ing kene bakal rada beda. Aku pengin mesthekake yen saben tugas ing cabang utama minangka komitmen sing kapisah, mula mung meksa panjaluk tarik Gabung ora bisa digunakake kanggo kita. Git nduweni opsi git squash, sing nglumpukake kabeh komit dadi siji lan nggabungake. Kita milih pilihan iki: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 21Klik Squash lan Gabung, lan kita ditawakake kanggo ngowahi pesen, sing bakal pungkasan: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 22Trep banget lan sing paling penting, apa sing dikarepake. Miturut cara, aku durung weruh fitur kasebut ing bitbucket =/ Konfirmasi gabungan. Siji-sijine sing isih ana yaiku ngganti status tugas dadi Rampung ing papan kita, tulis komentar kanthi tautan menyang panyuwunan tarik lan tutup: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 23Papan kita saiki katon kaya iki:"Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 24

Kesimpulan

Dina iki kita nggawe bot telegram kanthi langkah lan dileksanakake ing proyek SpringBoot. Bot kerjane lan menehi jawaban. Kita langsung nggawe akses menyang data bot liwat properti. Liyane sing bakal teka: kita bakal nindakake potongan gedhe - nindakake JRTB-3 - nambah Pola Komando kanggo proyek kita. Oh, siji liyane ... Aku ngandhani yen aku ora bakal nerbitake token kasebut supaya ora digunakake. Nanging wiwit aku nulis artikel sing nyedhaki tengah wengi lan sawise kerja, ternyata aku wis ngirim token sing bener ing gudang, lan GitGuardian ngandhani babagan iki ing surat: "Proyek Jawa saka A nganti Z": nambahake bot telegram menyang proyek - 25Thanks kanggo wong-wong mau! Apa sing kudu ditindakake saiki? Ora bakal bisa mbusak saka git, amarga sanajan aku ngunggah komitmen anyar tanpa token iki, bakal tetep ana ing sing lawas. Nanging aku ora pengin mbusak lan muter maneh komit. Dadi aku lunga lan mateni token saka BotFather sing wis kasebut. Saiki token kasebut ana, nanging ora sah maneh. Langganan akun GitHub kanggo ndeleng kabeh kode sadurunge nerbitake artikel kasebut. Matur nuwun kanggo kabeh sing wis maca, nganti ketemu.

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION