JavaRush /Java Blog /Random-TK /Telegram bot ilkinji taslama hökmünde we şahsy tejribä es...
Pavel Mironov (Miroha)
Dereje
Москва

Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti

Toparda çap edildi
Hemmelere salam! Özüň hakda gürrüň ber. Men 24 ýaşymda, geçen ýyl tehniki uniwersiteti gutardym we henizem iş tejribäm ýok. Öňe seretseň, başda kesgitlenen meýilnamada (2019-njy ýylyň güýzünde düzülen) 2020-nji ýylyň mart-aprel aýlarynda işe gitmegi meýilleşdirýändigimi aýtmak isleýärin, ýöne gynansak-da karantin gatyşdy, şonuň üçin hemme zady ortasyna çenli yza süýşürdim. - tomus we geljekde öz üstünliklerim hakda ýazmagy umyt edýärin. Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 1Men hiç haçan programmirleme çekmedim. Uniwersitetde ýeterlik programmirleme öwretdiler, ýöne bu hünär meni gyzyklandyryp bilmedi. Şeýle hem prosessual diller (C), OOP (Java) -da bir ýyllyk okuw, maglumat bazalary, hatda montalerçy we C ++ bardy. Emma, ​​dogrymy aýtsam, okamaga umuman biperwaý garadym, sebäbi öwredilýän dersleriň köpüsi maňa diňe peýdasyz ýalydy, diňe hasabat bermek üçin laýykdy (prinsipde şeýle). Uniwersiteti gutaranymdan soň, bir karara gelmeli boldum: Käbir endiklerim ýokdy, ýöne işlemeli boldum. Öz-özüňi terbiýelemek hakda pikirlenmeli boldum (ah, boş oturmak bilen azyndan 2 ýyl doly sypdyrdym) we saýlama tebigy ýagdaýda Java-a düşdi, sebäbi uniwersitetdäki OOP kursunda ýigitleriň biri jawaruş kursyny maslahat berdi we bilşiňiz ýaly ýörite Java diline bagyşlanýar. Kursyň tanyşdyrylyşy bilen gyzyklandym. Hawa, şol wagt programmirlemegi halamokdym, sebäbi haýsydyr bir kynçylyk bilen ýüzbe-ýüz bolanymda derrew ýüz öwürdim, programmirlemekde ýeterlik kynçylyk bar. Theöne şol bir wagtyň özünde kod ýazmak isleýändigimi duýdum, şonuň üçin ahyrynda programmirleme girmegi makul bildim. Javaruş bilen başdan geçirenlerim hakda gysgaça aýdyp bereýin. 2019-njy ýylyň awgust aýynda başladym, derrew bir aý abuna ýazdym, ýöne 7-nji derejede meseleleriň kyndygyna düşündim. Kursy bir gapdala goýup, Şildti aldym. Şeýlelik bilen paralel kursy 3 aý tamamladym. 20-nji derejä ýetdim (bu meniň ikinji hasabym), Şildti doly diýen ýaly okadym, soň bu ýerdäki işlerden ýadadym, bu ýerde özüm üçin amaly peýdalary görmegi bes etdim. Kod programmalaryna, leetkodlara bardym we wideo kurslaryna tomaşa edip başladym. Theeri gelende aýtsak, 3 aýyň içinde “Aý ýok, bir massiw näme? Munuň bilen nädip işlemeli we näme üçin beýle gorkunç”? ýygnamak synplarynyň deslapky kody (ArrayList, HashMap we ş.m.) jikme-jik öwrenmek üçin. Şahsy tejribä esaslanyp, täze başlanlara aýdaryn: bu ýerde esasy zat, hiç zada düşünmeseňiz we hiç zady çözüp bilmeseňiz ýüze çykýan duýgyny ýeňip geçmekdir. Itüze çykanda, diňe hemme zatdan ýüz öwürmek isleýärsiňiz we bu meselede gaty samsyk ýaly görünýärsiňiz. Şeýle pursatlary içiňizde ýeňip, akyl taýdan dynç alsaňyz, üstünlik geler. Meniň pikirimçe, köp adam muňa çydap bilmeýär, şonuň üçin bu işlerden tiz ýüz öwürýärler. Netijede, 2019-njy ýylyň dekabrynda öz taslamam hakda pikirlenip başladym. Telegram botyny saýlamagy makul bildim, ýöne pikir ýokdy. Şol bir wagtyň özünde, bir dosty awtomatlaşdyrmak isleýän telegrammada öz topary üçin işlemeli boldy. Programmirlemegi çuňňur öwrenýändigime düşünip, maňa taslama teklip etdi. Meniň üçin, tejribe we geljekdäki rezýume, onuň üçin, toparyň ösüşi üçin. Hatda öz pikirini sitata bermäge rugsat bererin: "Недавно софтину хотел у программиста заказать, которая загружала бы в выбранное Облако файлы по прямым linkм. Это интересно, так How аналогов нет. И просто очень удобно. Суть: копируешь ссылку, вставляешь в окно и выбираешь нужное Облако (GDrive, Mail, Яндекс Диск и т.п), в своё время софт всё делает на стороне serverа и юзеру ничего не нужно загружать на свою машину (особенно круто, когда у тебя сборка на SSD-накопителях). Думали сделать в web-интерфейсе, чтобы можно было запускать How с телефонов, так и с десктопа... Можно в принципе через приложение реализовать, а не через web-интерфейс. Тебе такое по силам?"Men işe başladym, ýöne ahyrynda, bir-iki günden soň, esasan bilimiň ýoklugy sebäpli hiç zadyň peýda bermejekdigine düşündim. Bir dostuma" Cloud.Mail "bilen şol baglanyşyklar gerekdi, emma olar henizem bermeýärler" “API” ýok. GDrive-iň üsti bilen bir zady bir ýere jemlemek synanyşygy boldy, ýöne durmuşa geçirilmegi maýypdy, üstesine-de bu bulut hyzmaty “müşderä” laýyk gelmedi. Ilki bilen birnäçe bulut saýlamagy teklip etse-de, ahyrsoňy poçta bilen birlikde hemme zady ret etdi. .ru, hiç hili çözgüt tapylmady. nämüçindir hemmesi gymmat boldy, maglumat bazasyny birikdirmeli, saklamak üçin serwer ulanmaly we ş.m. theeri gelende aýtsak, henizem bu web programmasy gerek. “Google Play” dükanyndan oýna baglanyşyk almak, baglanyşygy derňemek we alnan maglumatlary kitaphanada saklamak, soň bolsa json faýlyna ýazmak gerekdi. Şeýlelik bilen, her haýyş bilen kitaphananyň ulanyjylaryň tagallasy bilen giňelip biler. Geljekde Google Play-e girip, oýun hakda amatly görnüşde maglumat alyp bilmersiňiz. Diňe buýruk / kitaphanaHere_game_name ýazyp, zerur zatlaryň hemmesini alarsyňyz. Lateröne soňrak aýdyp berjek birnäçe kynçylyk bar. Ilki bilen bir wagtyň özünde iki SQL kursyny alyp başlanymdan haýal öňe gitdim. Botyň düýbünden nähili işleýändigine we haýyşlary nädip işlemelidigine düşünip bilmedim. Taslamanyň üstünde işlemek isleýän bir dostum bilen tanyşdym. Botyň birinji wersiýasy bir aýa golaý wagt bäri taýýardy, ýöne dostum bilen düşünişmezlikler ýüze çykdy (meniň pikirimçe). Botyň derňew üçin jogapkär bölegini aldym, ol botyň haýyşlary we olary gaýtadan işlemek boýunça gönüden-göni işledi. Nämüçindir boty çylşyrymlaşdyryp başlady, haýsydyr bir ygtyýarnama girizdi, adminleri oýlap tapdy, gereksiz funksiýalary goşdy, üstesine-de onuň kodlaşdyryş stilini halamokdym. Meniň pikirimçe, maglumat botynda bu zerur däldi. Şonuň üçin zerur funksiýa bilen özümden başlap bot ýazmagy makul bildim. Indi botyň aslynda näme edýändigini aýdaryn (taslama kodundan mysal alyp). Taslamanyň doly koduny makalanyň ahyrynda goşaryn we gynansagam bu barada doly düşündiriş berip bilmerin. Bot-a iberilen islendik ulanyjy habary täzelenme synpynyň obýektidir. Onda köp maglumat bar (habar ID, söhbet ID, üýtgeşik ulanyjy ID we ş.m.). Täzelenmegiň birnäçe görnüşi bar: tekst habary bolup biler, telegram klawiaturasyndan (yzyna çagyryş), surat, ses we ş.m. jogap bolup biler. Ulanyjynyň gaty köp gürleşmeginiň öňüni almak üçin, men diňe klawiaturadan tekst haýyşlaryny we yzyna çagyryşlary işleýärin. Ulanyjy surat iberse, bot oňa hiç zat etmek niýetiniň ýokdugyny habar berer. Esasy bot synpynda, onUpdateReceived usulynda bot täzelenme alýar.
@Override
    public void onUpdateReceived(Update update) {
        UpdatesReceiver.handleUpdates(update);
    }
işleýjä geçirýärin (“UpdatesReceiver” synpy):
public static void handleUpdates(Update update) {
        ...
        if (update.hasMessage() && update.getMessage().hasText()){
            log.info("[Update (id {}) типа \"Текстовое сообщение\"]", update.getUpdateId());
            new TextMessageHandler(update, replyGenerator).handleTextMessage();
        }
        else if (update.hasCallbackQuery()) {
            //логгирование
            new CallbackQueryHandler(update, replyGenerator).handleCallBackQuery();
        }
        else {
           //логгирование
            replyGenerator.sendTextMessage(update.getMessage().getChatId(), "Я могу принимать только текстовые messages!");
        }
    }
“UpdatesReceiver” täzelenmäniň görnüşine baglylykda dolandyryşy başga bir ýöriteleşdirilen işleýjä geçirýän merkezi işleýjidir: TextMessageHandler ýa-da CallbackQueryHandler, konstruktorlaryna zynjyry hasam täzeleýärin. Täzelenme bot bilen işlän wagtyňyz iň möhüm zat we ýitirilmeli däldir, sebäbi täzelenmede saklanýan maglumatlaryň kömegi bilen haýsy ulanyja we haýsy söhbetdeşlige jogap iberilmelidigini bilýäris. Ulanyja jogap döretmek üçin aýratyn synp ýazdym. Ol yzygiderli tekst habary, içerki klawiatura bilen habar, suratly habar we jogap klawiaturasy bilen habar iberip biler. Içerki klawiatura şuňa meňzeýär: Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 1Düwmeleri kesgitleýär, basmak bilen ulanyjy adaty habarlar bilen birmeňzeş işlenip bilinýän serwere jaň iberýär. “Saklamak” üçin öz işleýjiňiz gerek. Her düwme üçin hereket edýäris, soň bolsa täzelenme obýektine ýazylýar. Bular. "Çykdajy" düwmesi üçin, täzelenmeden soň alyp boljak yzyna çagyryş üçin düşündiriş "/ baha" belläris. Ondan soň, aýratyn synpda, bu jaňy eýýäm işläp bilerin:
public void handleCallBackQuery() {
  String call_data = update.getCallbackQuery().getData();
  long message_id = update.getCallbackQuery().getMessage().getMessageId();
  long chat_id = update.getCallbackQuery().getMessage().getChatId();
    switch (call_date){
      case "/price" :
        //тут что-то сделать
        break;
...
Jogap bermek klawiaturasy şuňa meňzeýär: Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 2Aslynda ulanyjynyň ýazuwynyň ýerini alýar. "Kitaphana" düwmesine basylanda bot "Kitaphana" habaryny çalt iberer. Klawiaturanyň her görnüşi üçin, Gurluşyk nagyşyny durmuşa geçirip, öz synpymy ýazdym: setir we jogap . Netijede, talaplaryňyza baglylykda islenýän klawiaturany “çyzyp” bilersiňiz. Bu gaty amatly, sebäbi klawiaturalar başgaça bolup biler, ýöne ýörelge şol bir bolmagynda galýar. Ine, içerki klawiatura bilen habar ibermegiň içgin usuly:
public synchronized void sendInlineKeyboardMessage(long chat_id, String gameTitle) {
        SendMessage keyboard = InlineKeyboardMarkupBuilder.create(chat_id)
                .setText("Вы может узнать следующую информацию об игре " + gameTitle)
                .row()
                .button("Стоимость " + "\uD83D\uDCB0", "/price " + gameTitle)
                .button("Обновлено " + "\uD83D\uDDD3", "/updated " + gameTitle)
                .button("Версия " + "\uD83D\uDEE0", "/version " + gameTitle)
                .endRow()
                .row()
                .button("Требования " + "\uD83D\uDCF5", "/requirements " + gameTitle)
                .button("Покупки " + "\uD83D\uDED2", "/iap " + gameTitle)
                .button("Размер " + "\uD83D\uDD0E", "/size " + gameTitle)
                .endRow()
                .row()
                .button("Получить всю информацию об игре" + "\uD83D\uDD79", "/all " + gameTitle)
                .endRow()
                .row()
                .button("Скрыть клавиатуру", "close")
                .endRow()
                .build();
        try {
            execute(keyboard);
        } catch (TelegramApiException e) {
            log.error("[Не удалось отправить сообщение с -inline- клавиатурой]: {}", e.getMessage());
        }
    }
Botyň berk işlemegi üçin, çyzgy belgisini ulanýan ýörite buýruklar oýlanyp tapyldy: / ​​kitaphana, / kömek, / oýun we ş.m. Otherwiseogsam, ulanyjynyň ýazyp biljek islendik zibilini gaýtadan işlemeli bolarys. Aslynda, MessageHandler üçin ýazylan zat:
if (message.equals(ChatCommands.START.getDescription())) {
     replyGenerator.sendTextMessage(chat_id, new StartMessageHandler().reply());
     replyGenerator.sendReplyKeyboardMessage(chat_id);
}
else if (message.equals(ChatCommands.HELP.getDescription())
             || message.equalsIgnoreCase("Помощь")) {
      replyGenerator.sendTextMessage(chat_id, new HelpMessageHandler().reply());
}
 ...
Şeýlelik bilen, bota haýsy buýrugy iberýändigiňize baglylykda işe ýörite işleýji goşular. Geliň, derňewçiniň we kitaphananyň işine seredeliň. Boty Google Play dükanyndaky bir oýna baglanyşyk iberseňiz, ýörite işleýän awtomatiki usulda işlär . Muňa jogap hökmünde ulanyjy oýun hakda aşakdaky görnüşde maglumat alar: Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 3Şol bir wagtyň özünde, oýny botyň kitaphanasyna (ilki ýerli kartada, soňra -> json faýlyna) goşjak bir usul çagyrylar. ). Oýun eýýäm kitaphanada bolsa, onda barlag geçiriler (adaty hashmapdaky ýaly) we meýdan maglumatlary (mysal üçin, wersiýa belgisi üýtgedi), kitaphanadaky oýun gaýtadan ýazylar. Hiç hili üýtgeşme tapylmasa, hiç hili ýazgy edilmez. Kitaphanada asla oýun bolmadyk bolsa, ilki ýerli karta ( tyk ýaly bir obýekt ) ýazylýar, soň bolsa json faýlyna ýazylýar, sebäbi serwerdäki programma garaşylmadyk ýagdaýda ýapylsa, maglumatlar bolar ýitdi, ýöne faýly ulanyp hemişe okap bolýar. Aslynda, programma başlanda kitaphana hemişe ilkinji gezek statik blokdan bir faýldan ýüklenýär:
static {
        TypeFactory typeFactory = mapper.getTypeFactory();
        MapType mapType = typeFactory.constructMapType(ConcurrentSkipListMap.class, String.class, GooglePlayGame.class);

        try {
            Path path = Paths.get(LIBRARY_PATH);
            if (!Files.exists(path)) {
                Files.createDirectories(path.getParent());
                Files.createFile(path);
                log.info("[Файл библиотеки создан]");
            }
            else {
                ConcurrentMap<string, googleplaygame=""> temporary = mapper.readValue(new File(LIBRARY_PATH), mapType);
                games.putAll(temporary);
                log.info("[Количество игр в загруженной библиотеке] = " + games.size());
            }
        }
        catch (IOException e) {
            log.error("[Ошибка при чтении/записи file] {}", e.getMessage());
        }
    }
Mundan başga-da, faýlda oýun gözläniňizde hadysanyň duýgurlygyny saklamak üçin faýldan maglumatlary wagtlaýyn kartada okamaly bolarsyňyz (TITan QuEST ýazyp, bot henizem tapylar) kitaphanadaky “Titan Quest” oýny). Başga bir çözgüt tapmak mümkin däldi, bular Jeksonyň kömegi bilen deserializasiýa aýratynlyklary. Şeýlelik bilen, baglanyşyk üçin her haýyş bilen, mümkin boldugyça oýun kitaphana goşulýar we kitaphana giňelýär. Belli bir oýun hakda has giňişleýin maglumat / LibraryGame_Name buýrugy arkaly alyp bilersiňiz . Belli bir parametri (mysal üçin, häzirki wersiýa) we ähli parametrleri birbada tapyp bilersiňiz. Bu, ozal ara alnyp maslahatlaşylan içerki klawiaturanyň kömegi bilen amala aşyrylýar. Iş wagtynda, bu ýerde gazanylan endikleri meseleleri çözmek bilen ulandym. Mysal üçin, kitaphanada ýerleşýän tötänleýin oýunlaryň atlarynyň sanawy (opsiýa / kitaphananyň buýrugy bilen elýeterlidir):
private String getRandomTitles(){
        if (LibraryService.getLibrary().size() < 10){
            return String.join("\n", LibraryService.getLibrary().keySet());
        }
        List<string> keys = new ArrayList<>(LibraryService.getLibrary().keySet());
        Collections.shuffle(keys);
        List<string> randomKeys = keys.subList(0, 10);
        return String.join("\n", randomKeys);
    }
Bot prosesi nähili baglanyşýar? Google Play-e degişlidigini ýa-da ýokdugyny barlaýar (host, protokol, port):
private static class GooglePlayCorrectURL {

        private static final String VALID_HOST = "play.google.com";

        private static final String VALID_PROTOCOL = "https";

        private static final int VALID_PORT = -1;

        private static boolean isLinkValid(URI link) {
            return (isHostExist(link) && isProtocolExist(link) && link.getPort() == VALID_PORT);
        }

        private static boolean isProtocolExist(URI link) {
            if (link.getScheme() != null) {
                return link.getScheme().equals(VALID_PROTOCOL);
            }
            else {
                return false;
            }
        }

        private static boolean isHostExist(URI link) {
            if (link.getHost() != null) {
                return link.getHost().equals(VALID_HOST);
            }
            else {
                return false;
            }
        }
Everythinghli zat tertipli bolsa, bot Jsoup kitaphanasyny ulanyp, sahypanyň HTML koduny almaga mümkinçilik berýän baglanyşyk arkaly birigýär, bu bolsa has giňişleýin derňelip we derňelip bilner. Nädogry ýa-da zyýanly baglanyşyk bilen boty aldap bilmersiňiz.
if (GooglePlayCorrectURL.isLinkValid(link)){
     if (!link.getPath().contains("apps")){
         throw new InvalidGooglePlayLinkException("К сожалению, бот работает исключительно с играми. Введите другую ссылку.");
     }
     URL = forceToRusLocalization(URL);
     document = Jsoup.connect(URL).get();
 }
     else {
         throw new NotGooglePlayLinkException();
      }
...
Bu ýerde sebit sazlamalary bilen bir meseläni çözmeli bolduk. Bot, Google Play dükanyna Europeewropada ýerleşýän serwerden birigýär, şonuň üçin Google Play dükanyndaky sahypa degişli dilde açylýar. Sahypanyň rus görnüşine zor bilen “gönükdirýän” taýak ýazmaly boldum (taslama ahyrsoňy diňleýjilerimize gönükdirilipdi). Munuň üçin baglanyşygyň soňunda Google Play serwerine GET haýyşynda hl: & hl = ru parametrini üns bilen goşmaly .
private String forceToRusLocalization(String URL) {
        if (URL.endsWith("&hl=ru")){
            return URL;
        }
        else {
            if (URL.contains("&hl=")){
                URL = URL.replace(
                        URL.substring(URL.length()-"&hl=ru".length()), "&hl=ru");
            }
            else {
                URL += "&hl=ru";
            }
        }
        return URL;
    }
Üstünlikli baglanyşykdan soň, derňew we derňew üçin taýýar HTML resminamasyny alýarys, ýöne bu makalanyň çäginden çykmaýar. Derňew kody şu ýerde . Derňewçiniň özi zerur maglumatlary alýar we oýun bilen bir obýekt döredýär, zerur bolsa soň kitaphana goşulýar. <h2> Jemlemek üçin </h2> Bot belli bir funksiýany öz içine alýan birnäçe buýrugy goldaýar. Ulanyjydan habar alýar we buýruklary bilen gabat gelýär. Eger baglanyşyk ýa-da / oýun + baglanyşyk buýrugy bolsa, bu baglanyşygy Google Play-e degişlidigini barlaýar. Baglanyşyk dogry bolsa, Jsoup arkaly birleşýär we HTML resminamasyny alýar. Bu resminama ýazylan derňewçiniň esasynda seljerilýär. Oýun hakda zerur maglumatlar resminamadan alynýar, soň bolsa oýun bilen obýekt bu maglumatlar bilen doldurylýar. Ondan soň, oýun bilen obýekt ýerli ammarda ýerleşdirilýär (eger oýun entek ýok bolsa) we maglumatlaryň ýitmezligi üçin derrew faýla ýazylýar. Kitaphanada ýazylan oýun (oýnuň ady kartanyň açary, oýun bilen obýekt kartanyň gymmaty) Game_name buýrugy / kitaphanasy arkaly alnyp bilner. Görkezilen oýun botyň kitaphanasynda tapylsa, ulanyja oýun hakda maglumat alyp boljak içerki klawiatura yzyna berler. Oýun tapylmasa, ýa-da adyň dogry ýazylandygyna göz ýetirmeli (bu ýagdaýdan başga Google Play dükanyndaky oýnuň adyna doly laýyk bolmaly) ýa-da bot iberip, kitaphana goşmaly. oýna baglanyşyk. Boty herokuda ýerleşdirdim we geljekde öz botyny ýazmagy we ony herokuda mugt ýerleşdirmegi meýilleşdirýänler üçin, ýüze çykyp biljek kynçylyklary çözmek üçin birnäçe maslahat bererin (sebäbi men özüme duş geldim). Gynansagam, Herokunyň tebigaty sebäpli bot kitaphanasy her 24 sagatda bir gezek "täzeden" düzülýär. Meýilnamam Heroku serwerlerinde faýllary saklamagy goldamaýar, şonuň üçin oýun faýlymy Github-dan çykarýar. Birnäçe çözgüt bardy: maglumat bazasyny ulanyň ýa-da bu faýly oýun bilen saklajak başga bir serwer gözläň. Häzirlikçe hiç zat etmezlik kararyna geldim, sebäbi bot beýle peýdaly däl. Maňa doly tejribe toplamak gerekdi, bu esasan ýeten zadym. Şeýlelikde, Heroku üçin teklipler:
  1. Russiýada ýaşaýan bolsaňyz, VPN ulanyp, herokuda hasaba alynmaly bolarsyňyz.

  2. Taslamanyň düýbünde “Procfile” atly giňeltmesiz bir faýl goýmaly. Mazmuny şeýle bolmaly: https://github.com/miroha/Telegram-Bot/blob/master/Procfile

  3. Pom.xml-de, mysal boýunça aşakdaky setirleri goşuň , esasyClass belliginde esasy usuly öz içine alýan synpa barýan ýoly görkezýär: bot.BotApplication (BotApplication synpy bot bukjasynda bolsa).

  4. Mvn paket buýruklaryny we ş.m. ulanyp, haýsydyr bir taslama gurmaň, Heroku siziň üçin hemme zady ýygnaýar.

  5. Taslama gitignore goşmak maslahat berilýär, mysal üçin:

    # Log file
    *.log
    
    # Compiled resources
    target
    
    # Tests
    test
    
    # IDEA files
    .idea
    *.iml
  6. Aslynda taslamany github-a ýükläň, soňra ammary Heroku bilen birikdiriň (ýa-da başga usullary ulanyň, ýalňyşmasam 3 sanysy bar).

  7. Göçürip almak üstünlikli bolsa ("Gurmak üstünlik gazandy"), Dynos-y sazlamak üçin hökman giriň:

    Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 4

    süýşürijini çalşyň, soňra bolsa ON ýagdaýynda bolandygyna göz ýetiriň (muny etmedigim sebäpli botym ​​işlemedi we bir-iki gün beýnimi döwdüm we köp gereksiz hereketler etdim ).

  8. Bot belligini Github-da gizläň. Munuň üçin daşky gurşaw üýtgeýjisinden belgi almaly:

    public class Bot extends TelegramLongPollingBot {
    
        private static final String BOT_TOKEN = System.getenv("TOKEN");
    
        @Override
        public String getBotToken() {
            return BOT_TOKEN;
        }
    ...
    }

    Soňra bot ýerleşdirilenden soň, bu üýtgeýjini Sazlamalar goýmasyndaky Heroku dolandyryş panelinde goýuň (TOKEN-iň sag tarapynda GYMMAT meýdançasy bolar, botyňyzyň belligini şol ýere göçüriň):

    Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 5
Umuman, öz taslamamyň üstünde 2 aý işlänimde:
  • Java-da ýazylan doly iş taslamasyny aldy;
  • üçünji tarap API (Telegram Bot API) bilen işlemegi öwrendi;
  • iş ýüzünde serializasiýa has çuňňur göz aýladym, JSON we Jekson kitaphanasy bilen köp işledim (başda GSON ulanýardym, ýöne bu ýerde kynçylyklar bardy);
  • faýllar bilen işleýän wagtym başarnygymy berkitdim, Java NIO bilen tanyşdym;
  • konfigurasiýa .xml faýllary bilen işlemegi öwrendim we hasaba girmäge öwrenişdim;
  • ösüş gurşawynda hünär derejesini ýokarlandyrmak (IDEA);
  • git bilen işlemegi öwrendi we gitignore-nyň bahasyny öwrendi;
  • web sahypasyny derňemek endiklerini gazandy (Jsoup kitaphanasy);
  • birnäçe dizaýn nagyşlaryny öwrendi we ulandy;
  • kody gowulaşdyrmak duýgusyny we islegini ösdürdi;
  • Onlaýn çözgüt tapmagy we jogap tapyp bilmeýän soraglary bermäge utanmazlygy öwrendim.
Telegram bot ilkinji taslama hökmünde we şahsy tejribä esaslanýan hünär ösüşi üçin ähmiýeti - 7Botyň näderejede peýdaly ýa-da peýdasyz bolandygyny ýa-da koduň nähili owadan / ýigrenjidigini bilemok, ýöne alan tejribäm hökman oňa mynasyp boldy. Taslamam üçin jogapkärçilik duýgusyny duýdum. Her wagt ony gowulaşdyrmak, täze bir zat goşmak isleýärin. Ony işledip, hemme zadyň isleýşim ýaly işleýändigini görenimde, gaty tolgundyryjy boldy. Bu esasy zat dälmi? Edýän zatlaryňyzdan lezzet alyň we soňky şokolad çubugy ýaly her iş kodundan lezzet alyň. Şonuň üçin programmirlemegi özleşdirýän bolsaňyz, size maslahatym: 40-njy derejä çenli bu ýerde galmaň, mümkin boldugyça öz taslamaňyzy başlaň. Kimdir biri gyzyklanýan bolsa, taslamanyň deslapky kody şu ýerde (Bahar üçin gaýtadan ýazyldy): https://github.com/miroha/GooglePlayGames-TelegramBot Soňky iki aýyň dowamynda täze materiallary öwrenmek kyn, sebäbi maňa görünýär ahyrky netijä geldim. Işsiz, indiki aýda etjek bolýan Baharyň çarçuwasyny öwretmekden başga nirede ösmelidigimi göremok. Soň bolsa bu çarçuwany ulanyp, boty “täzeden ýazmaga” synanyşaryn. Islendik soraga jogap bermäge taýýar. :) Hemmäňize üstünlik bolsun! 07/07/20-den täzeläň arassa Java-daky botly ammar ýitdi (pozdum, bir nusgasy başga bir ýerli enjamda galypdy), ýöne Bahar Boot üçin täzeden ýazylan boty göçürip aldym: https://github.com/miroha / GooglePlayGames-TelegramBot
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION