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). Springazda ö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 :- Ctrl + t kombinasiýasyny ulanyp, ýerli taslamadaky esasy şahany täzeleýäris .
- Esasy şaha esaslanyp, döredýäris:
- Bot goşuň.
- Edilen zatlaryň beýany bilen täze borçnama döredýäris we ony GitHub-a iterýäris.
- 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.
- 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.
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 Indiki, bu botyň adyny aýtmagymyzy haýyş edýäris. Synag meseleleri üçin bot bolansoň, onuň ady ýerlikli bolar: [TEST] JavarushBot Indi hemişe tapylyp bilinjek özboluşly at bermegiň wagty geldi - ulanyjy ady: test_javarush_community aboveokarda aýdyşym ýaly, _bot goşmaly ulanyjy adynyň goşulmasy, şonuň üçin ýene ýazýarys: test_javarush_community_bot 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. Düşü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.
- 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;
}
}
Üý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: surnallardan botyň başlandygyny görýäris. Şeýlelik bilen, Telegramma baryp, bot ýazmagyň wagty geldi: Başlamaga basýarys we derrew jogap alarys: Barlamak üçin ýene bir bölek ýazalyň: Ine, ş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: Wadanyň 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 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:
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: Wersiý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.
GO TO FULL VERSION