JavaRush /Blog Java /Random-MS /Bot Telegram sebagai projek pertama dan kepentingannya un...
Pavel Mironov (Miroha)
Tahap
Москва

Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi

Diterbitkan dalam kumpulan
Salam sejahtera semua! Beritahu kami tentang diri anda. Saya berumur 24 tahun, lulus dari universiti teknikal tahun lepas dan masih belum mempunyai pengalaman bekerja. Melihat ke hadapan, saya ingin mengatakan bahawa pada mulanya, dalam pelan yang ditetapkan (dirangka pada musim gugur 2019), saya merancang untuk pergi bekerja pada Mac-April 2020, tetapi, malangnya, kuarantin campur tangan, jadi saya menangguhkan semuanya sehingga pertengahan -musim panas dan pada masa akan datang saya berharap untuk menulis kisah kejayaan saya sendiri. Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 1Saya tidak pernah tertarik dengan pengaturcaraan. Di universiti mereka mengajar pengaturcaraan yang mencukupi, tetapi kraf ini tidak menarik minat saya ketika itu. Terdapat juga bahasa prosedur (C), kursus selama setahun dalam OOP (Java), pangkalan data, malah pemasang dan C++. Tetapi sejujurnya, saya secara amnya tidak ambil peduli untuk belajar, kerana kebanyakan disiplin yang diajar kelihatan tidak berguna kepada saya, hanya sesuai untuk tujuan pelaporan (pada dasarnya, begitu). Selepas menamatkan pengajian dari universiti, saya terpaksa membuat keputusan: Saya tidak memperoleh beberapa kemahiran, tetapi saya perlu bekerja. Saya terpaksa memikirkan tentang pendidikan kendiri (oh, saya sudah terlepas sekurang-kurangnya 2 tahun penuh dengan duduk diam) dan pilihan itu sememangnya jatuh pada Java, kerana dalam kursus OOP di universiti salah seorang lelaki mengesyorkan kursus javarush , dan dia, seperti yang anda ketahui, didedikasikan khusus untuk bahasa Java. Saya tertarik dengan pembentangan kursus tersebut. Ya, saya tidak suka pengaturcaraan ketika itu, kerana saya segera menyerah apabila saya menghadapi sebarang kesukaran, dan terdapat lebih daripada cukup kesukaran dalam pengaturcaraan. Tetapi pada masa yang sama, saya merasakan bahawa saya ingin menulis kod, jadi akhirnya saya memutuskan untuk masuk ke pengaturcaraan. Saya akan memberitahu anda secara ringkas tentang pengalaman saya dengan javarush. Saya bermula pada Ogos 2019, segera membeli langganan selama sebulan, tetapi pada tahap 7 saya menyedari bahawa tugas itu sukar. Saya mengetepikan kursus dan mengambil Shildt. Jadi selari saya menamatkan kursus selama 3 bulan. Saya mencapai tahap 20 (ini adalah akaun kedua saya), membaca Schildt hampir sepenuhnya, kemudian bosan dengan tugas di sini, di mana saya berhenti melihat manfaat praktikal untuk diri saya sendiri. Saya pergi ke codewars, leetcode, dan mula menonton kursus video. By the way, dalam 3 bulan saya pergi dari "Oh tidak, apakah array? Bagaimana untuk bekerja dengannya dan mengapa ia sangat menakutkan"? kepada kajian terperinci tentang kod sumber kelas koleksi (ArrayList, HashMap, dsb.). Berdasarkan pengalaman peribadi, saya akan memberitahu pemula: perkara utama di sini adalah untuk mengatasi perasaan yang timbul jika anda tidak memahami apa-apa dan tidak dapat menyelesaikan apa-apa. Apabila ia timbul, anda hanya mahu melepaskan segala-galanya dan nampaknya anda terlalu bodoh untuk perkara ini. Jika anda mengatasi detik-detik sedemikian dalam diri anda dan berehat secara mental, maka kejayaan akan datang. Saya fikir ramai orang tidak dapat mengatasi perkara ini, jadi mereka cepat berputus asa dalam usaha sedemikian. Akibatnya, pada Disember 2019 saya mula memikirkan projek saya. Saya memutuskan untuk memilih bot Telegram, tetapi tidak ada idea. Pada masa yang sama, seorang rakan memerlukan fungsi untuk kumpulannya dalam telegram, yang ingin diautomasikan. Dia hanya sedar bahawa saya sedang belajar pengaturcaraan secara mendalam dan menawarkan saya projek. Bagi saya, untuk pengalaman dan resume masa depan, untuk dia, untuk pembangunan kumpulan. Saya juga akan membenarkan diri saya memetik ideanya: "Недавно софтину хотел у программиста заказать, которая загружала бы в выбранное Облако файлы по прямым linkм. Это интересно, так How аналогов нет. И просто очень удобно. Суть: копируешь ссылку, вставляешь в окно и выбираешь нужное Облако (GDrive, Mail, Яндекс Диск и т.п), в своё время софт всё делает на стороне serverа и юзеру ничего не нужно загружать на свою машину (особенно круто, когда у тебя сборка на SSD-накопителях). Думали сделать в web-интерфейсе, чтобы можно было запускать How с телефонов, так и с десктопа... Можно в принципе через приложение реализовать, а не через web-интерфейс. Тебе такое по силам?"Saya mula bekerja, tetapi akhirnya, selepas beberapa hari, saya menyedari bahawa tiada apa yang akan berjaya untuk kami, sebahagian besarnya disebabkan oleh kekurangan pengetahuan. Seorang rakan memerlukan pautan yang sama ke Cloud.Mail, tetapi mereka masih tidak t mempunyai API. Terdapat percubaan untuk menyusun sesuatu melalui GDrive, tetapi pelaksanaannya adalah pincang, ditambah pula dengan perkhidmatan awan ini tidak sesuai dengan "pelanggan." Walaupun pada mulanya dia menawarkan beberapa awan untuk dipilih, dia akhirnya menolak segala-galanya kecuali mel .ru, yang tiada penyelesaian ditemui. entah bagaimana semuanya ternyata mahal, ia perlu untuk menyambung pangkalan data, menggunakan pelayan untuk penyimpanan, dan lain-lain. By the way, ia masih memerlukan aplikasi web ini. Memandangkan perkara-perkara ' Tidak berkesan untuk kami, saya memutuskan untuk membuat bot maklumat. Ia sepatutnya menerima pautan ke permainan daripada gedung Google Play, menghuraikan pautan dan menyimpan maklumat yang diterima ke pustaka, dan kemudian menulisnya ke fail json. Oleh itu, dengan setiap permintaan, perpustakaan boleh berkembang berkat usaha pengguna. Pada masa hadapan, anda tidak boleh mendapatkan maklumat tentang permainan dalam bentuk yang mudah dengan pergi ke Google Play. Anda hanya menulis arahan /libraryHere_game_name dan dapatkan semua yang anda perlukan. Tetapi terdapat beberapa kesukaran yang akan saya ceritakan kemudian. Pada mulanya saya berkembang dengan perlahan, kerana saya mula mengambil dua kursus SQL pada masa yang sama. Saya langsung tidak dapat memahami cara bot itu berfungsi sama sekali dan cara memproses permintaan. Saya bertemu rakan yang juga berminat untuk mengusahakan projek tersebut. Versi pertama bot telah siap dalam masa sebulan, tetapi perselisihan faham timbul dengan rakan (di pihak saya). Saya mengambil bahagian bot yang bertanggungjawab untuk menghurai, dan dia secara langsung mengusahakan permintaan kepada bot dan pemprosesannya. Atas sebab tertentu, dia mula merumitkan bot, memperkenalkan beberapa jenis kebenaran, mencipta pentadbir, menambah fungsi yang tidak perlu, ditambah lagi saya tidak begitu menyukai gaya pengekodannya. Pada pendapat saya, ini tidak diperlukan dalam bot maklumat. Jadi saya memutuskan bahawa saya akan menulis bot dari awal sendiri dengan fungsi yang saya perlukan. Sekarang saya akan memberitahu anda apa yang bot sebenarnya lakukan (menggunakan contoh daripada kod projek). Saya akan melampirkan kod penuh projek pada akhir artikel dan, malangnya, saya tidak akan dapat mengulas sepenuhnya mengenainya. Sebarang mesej pengguna yang dihantar kepada bot ialah objek kelas Kemas Kini. Ia mengandungi banyak maklumat (id mesej, id sembang, id pengguna unik, dll.). Terdapat beberapa jenis kemas kini: ia boleh menjadi mesej teks, ia boleh menjadi respons daripada papan kekunci telegram (panggilan balik), foto, audio, dll. Untuk mengelakkan pengguna daripada bermain-main terlalu banyak, saya hanya memproses permintaan teks dan panggilan balik daripada papan kekunci. Jika pengguna menghantar foto, bot akan memberitahunya bahawa dia tidak berniat untuk melakukan apa-apa dengannya. Dalam kelas bot utama, dalam kaedah onUpdateReceived, bot menerima kemas kini.
@Override
    public void onUpdateReceived(Update update) {
        UpdatesReceiver.handleUpdates(update);
    }
yang saya berikan kepada pengendali (kelas Penerima Kemas Kini sendiri):
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 ialah pengendali pusat yang, bergantung pada jenis kemas kini, memindahkan kawalan kepada pengendali khusus lain: TextMessageHandler atau CallbackQueryHandler, kepada pembina yang saya luluskan kemas kini lebih jauh ke bawah rantaian. Kemas kini adalah perkara yang paling penting apabila bekerja dengan bot dan tidak boleh hilang, kerana dengan bantuan maklumat yang disimpan dalam kemas kini, kami mengetahui pengguna mana dan kepada sembang mana respons harus dihantar. Untuk menjana respons kepada pengguna, saya menulis kelas yang berasingan. Ia boleh menghantar mesej teks biasa, mesej dengan papan kekunci sebaris, mesej dengan gambar dan mesej dengan papan kekunci balasan. Papan kekunci sebaris kelihatan seperti ini: Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 1Ia mentakrifkan butang yang, dengan mengklik padanya, pengguna menghantar panggilan balik ke pelayan, yang boleh diproses dengan cara yang hampir sama seperti mesej biasa. Untuk "mengekalkannya" anda memerlukan pengendali anda sendiri. Kami menetapkan tindakan untuk setiap butang, yang kemudiannya ditulis pada objek Kemas kini. Itu. untuk butang "Kos" kami menetapkan perihalan "/harga" untuk panggilan balik, yang boleh kami perolehi kemudian daripada kemas kini. Seterusnya, dalam kelas yang berasingan, saya sudah boleh memproses panggilan balik ini:
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;
...
Papan kekunci Balas kelihatan seperti ini: Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 2Dan pada dasarnya, ia menggantikan penaipan pengguna. Mengklik butang "Perpustakaan" akan menghantar mesej "Perpustakaan" dengan pantas kepada bot. Untuk setiap jenis papan kekunci, saya menulis kelas saya sendiri, melaksanakan corak Builder: inline dan reply . Akibatnya, anda boleh "melukis" papan kekunci yang dikehendaki bergantung pada keperluan anda. Ini sangat mudah, kerana papan kekunci mungkin berbeza, tetapi prinsipnya tetap sama. Berikut ialah kaedah intuitif untuk menghantar mesej dengan papan kekunci sebaris:
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());
        }
    }
Untuk memberikan fungsi yang ketat kepada bot, arahan khas menggunakan aksara slash telah dicipta: /library, /help, /game, dsb. Jika tidak, kami perlu memproses sebarang sampah yang mungkin ditulis oleh pengguna. Sebenarnya, inilah MessageHandler ditulis untuk:
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());
}
 ...
Oleh itu, bergantung pada arahan yang anda hantar ke bot, pengendali khas akan disertakan dalam kerja. Mari kita pergi lebih jauh dan lihat kerja penghurai dan perpustakaan. Jika anda menghantar pautan kepada bot kepada permainan di gedung Google Play, pengendali khas akan berfungsi secara automatik . Sebagai tindak balas, pengguna akan menerima maklumat tentang permainan dalam bentuk berikut: Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 3Pada masa yang sama, kaedah akan dipanggil yang akan cuba menambahkan permainan ke pustaka bot (mula-mula ke peta setempat, kemudian ke -> fail json ). Jika permainan sudah ada dalam perpustakaan, maka semakan akan dijalankan (seperti dalam peta cincang biasa), dan jika data medan (contohnya, nombor versi telah berubah), maka permainan dalam perpustakaan akan ditimpa. Jika tiada perubahan dikesan, maka tiada entri akan dibuat. Jika tiada permainan dalam perpustakaan sama sekali, maka ia ditulis terlebih dahulu ke peta tempatan (objek seperti tyk ), dan kemudian ditulis ke fail json, kerana jika aplikasi pada pelayan ditutup secara tidak dijangka, data akan hilang, tetapi ia sentiasa boleh dibaca menggunakan fail. Sebenarnya, apabila program bermula, perpustakaan sentiasa dimuatkan buat kali pertama daripada fail daripada blok statik:
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());
        }
    }
Di sini anda juga perlu membaca data daripada fail ke dalam peta sementara, yang kemudiannya "disalin" ke dalam peta penuh untuk mengekalkan ketidakpekaan kes semasa mencari permainan dalam fail (dengan menulis tITan QuEST, bot masih akan mencari permainan Titan Quest di perpustakaan). Tidak dapat mencari penyelesaian lain, ini adalah ciri penyahserialisasian menggunakan Jackson. Jadi, dengan setiap permintaan untuk pautan, permainan akan ditambahkan ke perpustakaan, jika boleh, dan perpustakaan itu berkembang. Maklumat lanjut tentang permainan tertentu boleh diperoleh menggunakan arahan /libraryGame_Name. Anda boleh mengetahui kedua-dua parameter tertentu (contohnya, versi semasa) dan semua parameter sekaligus. Ini dilaksanakan menggunakan papan kekunci sebaris, yang telah dibincangkan sebelum ini. Semasa bekerja, saya juga mengaplikasikan kemahiran yang diperolehi di sini semasa menyelesaikan masalah. Sebagai contoh, senarai nama permainan rawak yang terletak di perpustakaan (pilihan tersedia menggunakan arahan /library):
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);
    }
Bagaimanakah proses bot dipautkan? Ia menyemak mereka untuk melihat sama ada mereka tergolong dalam Google Play (hos, 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;
            }
        }
Jika semuanya teratur, maka bot menyambung melalui pautan menggunakan perpustakaan Jsoup, yang membolehkan anda mendapatkan kod HTML halaman, yang tertakluk kepada analisis dan penghuraian selanjutnya. Anda tidak akan dapat menipu bot dengan pautan yang salah atau berbahaya.
if (GooglePlayCorrectURL.isLinkValid(link)){
     if (!link.getPath().contains("apps")){
         throw new InvalidGooglePlayLinkException("К сожалению, бот работает исключительно с играми. Введите другую ссылку.");
     }
     URL = forceToRusLocalization(URL);
     document = Jsoup.connect(URL).get();
 }
     else {
         throw new NotGooglePlayLinkException();
      }
...
Di sini kami terpaksa menyelesaikan masalah dengan tetapan serantau. Bot bersambung ke gedung Google Play daripada pelayan yang terletak di Eropah, jadi halaman dalam gedung Google Play dibuka dalam bahasa yang sesuai. Saya terpaksa menulis tongkat yang akan memaksa "lencong" ke versi halaman Rusia (projek itu, bagaimanapun, ditujukan kepada penonton kami). Untuk melakukan ini, pada penghujung pautan anda perlu menambah parameter hl: &hl=ru dengan teliti dalam permintaan GET ke pelayan Google Play .
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;
    }
Selepas sambungan berjaya, kami menerima dokumen HTML yang sedia untuk analisis dan penghuraian, tetapi ini di luar skop artikel ini. Kod parser ada di sini . Penghurai itu sendiri mendapatkan semula maklumat yang diperlukan dan mencipta objek dengan permainan, yang kemudiannya ditambahkan ke perpustakaan jika perlu. <h2>Untuk meringkaskan</h2>Bot menyokong beberapa arahan yang mengandungi fungsi tertentu. Ia menerima mesej daripada pengguna dan memadankannya dengan arahannya. Jika ia adalah pautan atau perintah /game + link, ia menyemak pautan itu untuk melihat sama ada ia milik Google Play. Jika pautan itu betul, ia bersambung melalui Jsoup dan menerima dokumen HTML. Dokumen ini dianalisis berdasarkan penghurai bertulis. Maklumat yang diperlukan tentang permainan diekstrak daripada dokumen, dan kemudian objek dengan permainan diisi dengan data ini. Seterusnya, objek dengan permainan diletakkan dalam storan tempatan (jika permainan itu belum ada) dan segera ditulis ke fail untuk mengelakkan kehilangan data. Permainan yang direkodkan dalam perpustakaan (nama permainan adalah kunci untuk peta, objek dengan permainan adalah nilai untuk peta) boleh diperoleh menggunakan arahan /library Game_name. Jika permainan yang ditentukan ditemui dalam pustaka bot, pengguna akan dikembalikan papan kekunci sebaris, yang dengannya dia boleh mendapatkan maklumat tentang permainan itu. Jika permainan tidak ditemui, anda mesti sama ada memastikan nama itu dieja dengan betul (ia mesti sepadan sepenuhnya dengan nama permainan di gedung Google Play, kecuali untuk kes itu), atau menambah permainan ke pustaka dengan menghantar bot pautan kepada permainan. Saya menggunakan bot pada heroku dan bagi mereka yang pada masa hadapan merancang untuk menulis bot mereka sendiri dan menjadi tuan rumah secara percuma pada heroku, saya akan memberikan beberapa cadangan untuk menyelesaikan kesukaran yang mungkin anda hadapi (sejak saya sendiri yang menghadapinya). Malangnya, disebabkan sifat Heroku, perpustakaan bot sentiasa "set semula" sekali setiap 24 jam. Pelan saya tidak menyokong penyimpanan fail pada pelayan Heroku, jadi ia hanya menarik fail permainan saya dari Github. Terdapat beberapa penyelesaian: gunakan pangkalan data, atau cari pelayan lain yang akan menyimpan fail ini dengan permainan. Saya memutuskan untuk tidak melakukan apa-apa buat masa ini, kerana pada dasarnya bot tidak begitu berguna. Saya memerlukannya untuk mendapatkan pengalaman penuh, yang pada asasnya adalah apa yang saya capai. Jadi, cadangan untuk Heroku:
  1. Anda berkemungkinan besar perlu mendaftar di heroku menggunakan VPN jika anda tinggal di Rusia.

  2. Pada akar projek anda perlu meletakkan fail tanpa sambungan yang dipanggil Procfile. Kandungannya hendaklah seperti ini: https://github.com/miroha/Telegram-Bot/blob/master/Procfile

  3. Dalam pom.xml, tambah baris berikut mengikut contoh , di mana dalam teg mainClass menunjukkan laluan ke kelas yang mengandungi kaedah utama: bot.BotApplication (jika kelas BotApplication berada dalam folder bot).

  4. Jangan bina sebarang projek menggunakan arahan pakej mvn, dsb., Heroku akan memasang segala-galanya untuk anda.

  5. Adalah dinasihatkan untuk menambah gitignore pada projek, contohnya ini:

    # Log file
    *.log
    
    # Compiled resources
    target
    
    # Tests
    test
    
    # IDEA files
    .idea
    *.iml
  6. Sebenarnya muat naik projek ke github, dan kemudian sambungkan repositori ke Heroku (atau gunakan kaedah lain, terdapat 3 daripadanya, jika saya tidak silap).

  7. Jika muat turun berjaya ("Bina berjaya"), pastikan anda pergi ke Konfigurasi Dynos:

    Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 4

    dan tukar peluncur, dan kemudian pastikan ia berada dalam kedudukan ON (kerana fakta bahawa saya tidak melakukan ini, bot saya tidak berfungsi dan saya memerah otak saya selama beberapa hari dan membuat banyak pergerakan yang tidak perlu ).

  8. Sembunyikan token bot pada Github. Untuk melakukan ini, anda perlu mendapatkan token daripada pembolehubah persekitaran:

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

    Dan kemudian selepas menggunakan bot, tetapkan pembolehubah ini dalam papan pemuka Heroku dalam tab Tetapan (di sebelah kanan TOKEN akan terdapat medan VALUE, salin token bot anda di sana):

    Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 5
Secara keseluruhan, dalam 2 bulan bekerja pada projek saya sendiri, saya:
  • menerima projek berfungsi sepenuhnya yang ditulis dalam Java;
  • belajar untuk bekerja dengan API pihak ketiga (Telegram Bot API);
  • dalam amalan, saya menyelidiki lebih mendalam ke dalam serialisasi, banyak bekerja dengan JSON dan perpustakaan Jackson (pada mulanya saya menggunakan GSON, tetapi terdapat masalah dengannya);
  • mengukuhkan kemahiran saya apabila bekerja dengan fail, berkenalan dengan Java NIO;
  • belajar bekerja dengan fail konfigurasi .xml dan membiasakan diri saya untuk mengelog;
  • peningkatan kecekapan dalam persekitaran pembangunan (IDEA);
  • belajar bekerja dengan git dan mempelajari nilai gitignore;
  • memperoleh kemahiran dalam penghuraian halaman web (perpustakaan Jsoup);
  • mempelajari dan menggunakan beberapa corak reka bentuk;
  • mengembangkan rasa dan keinginan untuk menambah baik kod (pemfaktoran semula);
  • Saya belajar untuk mencari penyelesaian dalam talian dan tidak malu bertanya soalan yang saya tidak dapat jawapannya.
Bot Telegram sebagai projek pertama dan kepentingannya untuk pertumbuhan profesional berdasarkan pengalaman peribadi - 7Saya tidak tahu betapa berguna atau tidak bergunanya bot itu, atau betapa cantik/hodohnya kod itu, tetapi pengalaman yang saya perolehi pasti berbaloi. Saya merasakan tanggungjawab untuk projek saya. Sekali-sekala saya ingin memperbaikinya, menambah sesuatu yang baru. Apabila saya dapat menjalankannya dan melihat bahawa segala-galanya berfungsi seperti yang saya mahu, ia adalah satu keseronokan yang sebenar. Bukankah itu perkara utama? Nikmati apa yang anda lakukan dan nikmati setiap baris kod yang berfungsi seperti bar coklat terakhir. Oleh itu, jika anda menguasai pengaturcaraan, maka nasihat saya kepada anda: jangan tinggal di sini sehingga tahap 40, tetapi mulakan projek anda sendiri seawal mungkin. Jika sesiapa berminat, kod sumber projek ada di sini (ditulis semula untuk Spring): https://github.com/miroha/GooglePlayGames-TelegramBot Selama dua bulan kebelakangan ini saya hampir tidak mempelajari bahan baharu, memandangkan saya nampaknya bahawa saya telah menemui jalan buntu. Tanpa kerja, saya tidak lagi melihat di mana untuk dibangunkan, kecuali mungkin untuk mengajar Rangka Kerja Musim Bunga, yang saya rancang untuk lakukan pada bulan hadapan. Dan kemudian saya akan cuba "menulis semula" bot menggunakan rangka kerja ini. Sedia menjawab sebarang soalan. :) Semoga berjaya semua! KEMASKINI dari 07/07/2020 Repositori dengan bot dalam Java tulen telah hilang (saya memadamkannya, salinan kekal pada mesin tempatan lain), tetapi saya memuat turun bot yang ditulis semula untuk Spring Boot: https://github.com/miroha /GooglePlayGames-TelegramBot
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION