JavaRush /Java Blog /Random-TK /Taslama telegramma bot goşmak - "Java taslamasy A-dan Z"

Taslama telegramma bot goşmak - "Java taslamasy A-dan Z"

Toparda çap edildi
Salam, eziz dostlarym. Hawa, hawa, takyk dostlar. Bu makalalar tapgyry bilen eýýäm şeýle bir tanyş boldum welin, teswirlerde minnetdarlygyny yzygiderli ýazýan we / ýa-da materialy okandyklaryny we düşünendiklerini görkezýän adamlar eýýäm ýakynlaşdy. Siz we men iki tarapdan bir maksada tarap hereket edýäris. Düşünmek isleýärsiňiz, ýöne düşündirmek isleýärin. Biziňem şol bir soňky maksadymyz bar - başdan ahyryna çenli size düşünip boljak ýazmaça programma. Bu makalada suratlandyrjak zatlarymyň köpüsini eýýäm eşiden bolsaňyz gerek. Size täze we adatdan daşary bir zat aýdaryn öýdemok (ýöne taslamanyň çäginde muny bilmek / gaýtalamak zerur). "Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 1Springazda özüm üçin bot ýazdym, şonuň üçinem onuň “nagyşlaryna” bil baglarys.

JRTB-2 ýazýarys

JRTB-0 meselesi bilen makalada edişimiz ýaly ederis :
  1. Ctrl + t kombinasiýasyny ulanyp, ýerli taslamadaky esasy şahany täzeleýäris ."A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 2
  2. Esasy şaha esaslanyp, döredýäris:"Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 3
  3. Bot goşuň.
  4. Edilen zatlaryň beýany bilen täze borçnama döredýäris we ony GitHub-a iterýäris.
  5. Esasy şaha üçin çekiş haýyşyny dörediň we gaýtadan barlaň. Gurluşygyň (github hereketleri) geçmegine garaşýarys, ony esasy şaha birleşdirýäris.
  6. Degişli meseläni ýapyň.

Telegram bot näme?

Biz, döredijiler, şular ýaly telegramma bot bilen işlemegi göz öňüne getirip bileris: müşderilerini olar bilen işlemek üçin ulanýarys. Iş üçin taýýar kitaphanamyz bar . Telegram botynyň biziň programmamyz bilen baglanyşyklydygyny bilýän hereketler toplumy bar. Programmanyň içinde bolsa harplary, buýruklary nädip almalydygyny we nädip işlemelidigini öwreneris. Telegram botlarynda buýruk ýaly bir zat bar : “/” çyzgysy bilen başlaýar. Ondan soň derrew sözi bilelikde ýazýarys we bu buýruk hasaplanar. Mysal üçin, her kimiň bilmeli iki buýrugy bar:
  • / başlamak - bot bilen işe başlamak;
  • / stop - bot bilen iş gutarmak.
Galan zatlary özümiz ederis. Derrew öňünden bellik goýaýyn: nämäni we öwrenen zadymyzy ederis. Bot bilen işlänimde has gowy edip boljakdygyna ynanýaryn. Kimdir biri muny etmek islese, men diňe bagtly bolaryn we bu synanyşygy mümkin boldugyça goldaýaryn. Theeri gelende aýtsak, iň oňat zat, kimdir biri telegrammadaky bot sazlamalary bilen däl-de, buýruklaryň beýanyny kod arkaly nädip programmirlemelidigini maňa düşündirse. Men muny öwrenmedim. Resursymyzda esasy bot ýasamagy beýan edýän birnäçe makalamyz bar: bu gün şuňa meňzeş bir zat ederis. Başga soraglaryňyz bar bolsa, bu makaladan geçmegi maslahat berýärin.

BotFather bilen bot dörediň

Bot birikdirmek üçin ilki bilen ony döretmeli. Telegramyň çemeleşmesi bar - özboluşly ady bilen bot döretmek. Şeýle hem bir belgi (parol ýaly işleýän uly setir) bilen bilelikde berler. JavaRush - @javarush_community_bot üçin eýýäm bot ýasadym . Bu bot henizem boş we hiç zat edip bilmeýär. Esasy zat, adyň soňunda _bot bolmaly . Muny nädip etmelidigini görkezmek üçin, işleýşimizi barlaýan bot dörederin. Hakyky taslamalar nukdaýnazaryndan bu synag gurşawy bolar. Iň esasymyz bolsa daşky gurşaw (önüm - önümçilik, ýagny taslamanyň ýerine ýetiriljek hakyky gurşawy) bolar. Elbetde, başga bir gurşawy goşmak mümkin - sandyk gutusy gurşawy: umumy çäge gutusy, has üýtgeýän we ähli ösüş gatnaşyjylary üçin elýeterli. Thisöne bu diňe taslamany döretmek tapgyrynda ýagdaýy çylşyrymlaşdyrar. Häzirlikçe synag we sandbox gurşawy üçin ýene iki bot döredeliň. Birinji ädim, Telegramyň özünde bot döretmek (hasaba almak). Bot tapmaly: @BotFather we oňa buýruk ýazmaly: / newbot"A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 4 Indiki, bu botyň adyny aýtmagymyzy haýyş edýäris. Synag meseleleri üçin bot bolansoň, onuň ady ýerlikli bolar: [TEST] JavarushBot"A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 5 Indi hemişe tapylyp bilinjek özboluşly at bermegiň wagty geldi - ulanyjy ady: test_javarush_community"Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 6 aboveokarda aýdyşym ýaly, _bot goşmaly ulanyjy adynyň goşulmasy, şonuň üçin ýene ýazýarys: test_javarush_community_bot"Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 7 Ine! Bot döredildi. Indi ulanyjy adyny we belligini ulanyp, taslamamyza birigip bolýar. Elbetde, synag serweriniň göwnejaý işlemegi üçin, bu botyň belligini (esasanam bot-a girmek üçin parol) köpçülige görkezmerin.

Boty taslama birikdirýäris

Kitaphanany hemişeki ýaly goşmarys, derrew skeletimizden - SpringBoot-dan peýdalanarys. Starter ýaly bir zady bar. Kitaphanany goşmak bilen, “SpringBoot” -a taslamany dogry düzmek isleýändigimizi habar bermek üçin ulanyp bileris. Köp ýerlerde beýan edilýän adaty ýoldan gitmeli bolsak, şuňa meňzeş bir zat boljak bir ýerde konfigurasiýa döretmeli bolarys:
ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
  telegramBotsApi.registerBot(Bot.getBot());
} catch (TelegramApiRequestException e) {
  e.printStackTrace();
}
Bu ýerde bot bilen baglanyşyk gurup boljak bir obýekt döredilýär. Biziň ýagdaýymyzda, birikdirmek isleýän başlangyç, “kapotyň aşagynda” bir ýerde biziň üçin hemme zady eder (bu hem IT-de ýygy-ýygydan ulanylýan sözlemiň terjimesi). Ine, bu başlangyç bilen baglanyşyk . README.md faýlyndan onuň nämedigini, näme üçin we nädip ulanmalydygyny derrew görüp bilersiňiz. Birikdirmek üçin diňe bu garaşlylygy ýada goşmaly. Bularyň hemmesi :) Ine zerur garaşlylyk:
<dependency>
        <groupId>org.telegram</groupId>
        <artifactId>telegrambots-spring-boot-starter</artifactId>
        <version>5.0.1</version>
    </dependency>
Biz ony ýadymyza goşýarys. Wersiýany garaşylşy ýaly gurýarys we Maven taslamasyny täzeleýäris. "Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 8Düşündirişe esaslanyp, diňe täze synp döretmeli, TelegramLongPollingBot-dan miras almaly we bu synpy “SpringBoot” -yň amaly mazmunyna goşmaly. Programmanyň mazmuny, taslamany işletmek üçin döredilen obýektleriň saklanýan ýeri. Sapak goşmak üçin belliklerden birini ulanmaly: @ Komponent, @ Hyzmat, @Repository, @Controller. Ora-da konfigurasiýa synpynda (ýagny, Konfigurasiýa belligi bilen bellenen synpda) bir usul arkaly döredilen bolsa @Bean düşündiriş. Bularyň hemmesine henizem düşünip bolmajak ýaly bolup biler. Emma düşünip başlanyňyzda, ol ýerde çylşyrymly zadyň ýokdugyny görersiňiz. “Spring Boot” -a çalt düşünmek üçin ajaýyp kitaby maslahat berýärin - “Spring In Action” 5-nji neşir. Isleg bar bolsa, bu kitaba esaslanýan makalalar tapgyryny ýazyp bilerin. Geliň. “JavarushTelegramBotApplication” -y öz içine alýan bukjada, telegramma botymyzy öz içine alýan bot paketini döredýäris. Onuň ady JavaRushTelegramBot bolar :
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;
   }
}
Bu synp abstraktdy we üç usul durmuşa geçirilmelidi. Geliň, olar hakda has jikme-jik gürleşeliň:
  • onUpdateReceived (Täzelenme täzelenmesi) - ulanyjylaryň habarlarynyň gelýän giriş nokady. Newhli täze logika şu ýerden geler;
  • getBotUsername () - bu ýerde birikdirjek botumyzyň ulanyjy adyny goşmaly;
  • getBotToken () - we şoňa görä-de bot nyşanydyr.
Aslynda bu sahypa girmek we parol ýaly. Bu bahany häzirlikçe aç-açan ýazmarys. Muňa “gaty kodlamak” diýilýär (ýagny, belli bir bahany baglamak - adaty bolşy ýaly, iňlis gaty kodundan kagyz gözlemek). Muny etmeli däl Başga ýol bilen bararys - bu maglumatlary application.properties synpyna ýazarys we şu ýerden okarys. Bu näme üçin zerur? Soňra, programma başlanda, bu bahalary daşardan düzüp bileris. Çeýe, dogry. Src / main / resources / application.properties faýlyna giriň. Şol ýerde bu üýtgeýjileriň atlaryny taparys. .Properties giňeltmesi bolan faýllar, "=" bilen bölünen açar baha gurluşy hökmünde okalýar, her jübüt aýratyn setir. Şonuň üçin men bu üýtgeýjileri tapdym:
  • bot.username ;
  • bot.token _
Görnüşi ýaly: "A-dan Z-a çenli Java taslamasy": taslama telegramma bot goşmak - 9“SpringBoot” -yň ajaýyp düşündirişi bar - @Value. Dogry ulanylsa, bahalary application.properties faýlyndan çykarar. Taslamany munuň bilen täzeleýäris:
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;
   }
}
Üýtgeýjiniň bahasyny düşündirişe geçirendigimizi görmek bolýar. “SpringBoot” bot obýektimizi döredeninde, bahalar häsiýetlerden alynar (ýene-de iňlis dilinden kagyz gözlemek - häsiýetler). Biz tas diýen ýaly. Bot bir zada jogap bermeli. Şonuň üçin onUpdateReceived usulyny täzeläliň . Bot-a gelen habary yzyna alyp, yzyna gaýtarmaly. Şeýdip, botyň işleýändigini bileris. Munuň üçin zerur zatlary takmynan we çalt ýazarys:
@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();
       }
   }
}
Bu ýerde hemme zat gaty ýönekeý: habaryň hakykatdanam bardygyny barlaýarys, şonuň üçin habaryň ( habary ) we hat alyşýan söhbetdeşlik ID-sini ( chatId ) çykarýarys . Ondan soň, SendMessage habaryny ibermek üçin bir obýekt döredýäris , habaryň özi we söhbet belgisini oňa geçirýäris, ýagny bot-a näme ibermeli we nirä. Bizde eýýäm ýeterlik. Ondan soň, JavarushTelegramBotApplication synpynda esasy usuly işledýäris we Telegramda botymyzy gözleýäris: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 10surnallardan botyň başlandygyny görýäris. Şeýlelik bilen, Telegramma baryp, bot ýazmagyň wagty geldi: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 11Başlamaga basýarys we derrew jogap alarys: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 12Barlamak üçin ýene bir bölek ýazalyň: "Java-dan A-dan Z-a çenli taslama": taslama telegramma bot goşmak - 13Ine, şu pursatda JRTB-2 işimiziň gutarandygyny aýdyp bileris. . Hakykatdanam bu ýerde synag ýazyp bilmersiňiz, şonuň üçin hemme zady bolşy ýaly galdyrarys. Ondan soň täze bir borçnama döretmeli: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 14Wadanyň adyna üns beriň: ýene-de ünsüňizi bu meselä çekýärin. Wada ilki bilen meseläniň adyny, soň bolsa edilen zatlaryň has jikme-jik beýanyny öz içine alýar. “Commit and Push” düwmesine basyň we “Push” -a ýene bir gezek basyp tassyklaň : Taslamamyza"Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 15 gidiň . Öňküsi ýaly, GitHub täze şahamçany eýýäm gördi we esasy üçin çekiş haýyşyny döretmegi teklip edýär. Biz muňa garşy durmaýarys we döredemzok: Hemişe bolşy ýaly, bir belligi, taslamany saýladyk we maňa belledik. Ahyrynda, Pull haýyşyny döretmek düwmesine basyň. Gurluşyk geçenden soň azajyk garaşalyň - ine, ine, çekmek haýyşy birleşmäge taýyn:"A-dan Z-a çenli Java taslamasy": taslama telegramma bot goşmak - 16"A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 17

Wersiýa

Näme-de bolsa wersiýa etmeli diýen nokady sypdyrdym. Munuň üçin şahamçamyzda ýene birnäçe üýtgeşme girizeris. IDEA-a gaýdyp, ýatda taslama wersiýasyna seredýäris: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 18Wersiýasy 0.0.1-SNAPSHOT . Bu borç görnüşi. Taslamanyň wersiýasyny her täze çözülen mesele bilen täzeläp başlarys. MVP ýetýänçäk, wersiýa -SNAPSHOT goşulmasy bilen geler. Wersiýa shemasy näme bolar? XYZ-SNAPSHOT Nirede:
  • X - esasy wersiýa täzelenmesi, köplenç öňki wersiýa bilen yza gabat gelmekde kynçylyklary öz içine alýar;
  • Y - öňki wersiýa bilen doly gabat gelýän gaty uly üýtgeşmeler däl;
  • Z - tapylan we bejerilen kemçilikleriň hasaplaýjysy.
Şundan ugur alyp, ilkinji wersiýamyz bolar - 0.1.0-SNAPSHOT - ýagny entek düýpli täzelenmeler ýok, hemme zat azajyk, entek MVP-ä ýetmedik, şonuň üçin -SNAPSHOT goşulmasy bar . Muny ýatda üýtgedeliň: "A-dan Z-a çenli Java taslamasy": taslama telegramma bot goşmak - 19RELEASE_NOTES faýlyna geçiň, bu ýerde her täze wersiýa bilen taslamadaky üýtgeşmeleri suratlandyrarys: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 20Ilkinji ýazgymyz. Indi, her wersiýa täzelenmesi bilen, nämäniň bolandygyny şu ýerde düşündireris. Bu işi edýäris, düşündiriş ýazýarys: JRTB-2: täzelenen taslama wersiýasy we RELEASE_NOTES-e goşuldy Hemme zat öňküsi ýaly. Gurluşygyň geçmegine garaşýarys we üýtgeşmelerimizi birleşdirip bileris. Diňe şu ýerde azajyk üýtgeşik bolar. Esasy bölümdäki her bir meseläniň aýratyn bir borjuna göz ýetirmek isleýärin, şonuň üçin birleşdirmek haýyşyny basmak biziň üçin peýdaly bolmaz. Git-de ähli borçlary bir ýere jemleýän we birleşdirýän git squash görnüşi bar. Bu opsiýany saýlaýarys: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 21“Squash” we “Merge” düwmesine basyň we bize ahyrynda boljak habary redaktirlemegi teklip edýäris: "A-dan Z-a çenli Java taslamasy": taslama telegramma bot goşmak - 22Örän amatly we iň esasysy, talap edilýän zat. Theeri gelende aýtsak, bitbucket-de beýle aýratynlygy görmedim = / Birleşmegi tassyklaň. Galan zat, işimiziň ýagdaýyny tagtamyzda ýerine ýetirildi, çekmek haýyşyna baglanyşyk bilen teswir ýazyň we ýapyň: "A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 23Geňeşimiz indi şeýle:"A-dan Z-a Java taslamasy": taslama telegramma bot goşmak - 24

Netije

Bu gün ädimme-ädim telegramma botyny döretdik we ony “SpringBoot” taslamamyzda durmuşa geçirdik. Bot işleýär we jogap berýär. Aýratynlyklar arkaly bot maglumatlaryna derrew girdik. Geljekde has köp zat ederis - JRTB-3 ýerine ýetireris - taslamamyz üçin buýruk nusgasyny goşarys. Aý, ýene bir zat ... Tokeni ulanmaz ýaly çap etmerin diýdim. Theöne makalany ýary gije ýakynrak ýazanymdan we işden soň ammarda dogry bellik goýandygym ýüze çykdy we GitGuardian maňa bu barada hat ýazdy: "Java-dan A-dan Z" taslamasy: taslama telegramma bot goşmak - 25Munuň üçin olara sag bolsun aýdýaryn! Indi name etmeli? Indi gitden pozmak mümkin bolmaz, sebäbi bu belgi bolmazdan täze bir tabşyryk ýüklesem-de, ol köne görnüşinde galar. Emma borçnamany ýok etmek we yzyna gaýtarmak islämok. Şeýdip, men eýýäm agzalan BotFather-den belgini öçürdim. Indi bellik şol ýerde, ýöne indi güýji ýok. Makalany çap etmezden ozal ähli kodlary görmek üçin GitHub hasabyma ýazylyň . Okanyňyz üçin hemmäňize sag boluň, ýakyn wagtda görüşeris.

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

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