JavaRush /Java Blog /Random-ID /Bot Telegram sebagai proyek pertama dan signifikansinya b...
Pavel Mironov (Miroha)
Level 16
Москва

Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi

Dipublikasikan di grup Random-ID
Salam untuk semua! Ceritakan kepada kami tentang diri Anda. Saya berumur 24 tahun, lulus dari universitas teknik tahun lalu dan masih belum memiliki pengalaman kerja. Ke depan, saya ingin mengatakan bahwa pada awalnya, sesuai rencana yang telah ditetapkan (dibuat pada musim gugur 2019), saya berencana berangkat kerja pada Maret-April 2020, namun sayangnya karantina ikut campur, jadi saya menunda semuanya hingga pertengahan. -musim panas dan di masa depan saya berharap untuk menulis kisah sukses saya sendiri. Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 1Saya tidak pernah tertarik pada pemrograman. Di universitas mereka cukup banyak mengajarkan pemrograman, tetapi keahlian ini tidak menarik minat saya saat itu. Ada juga bahasa prosedural (C), kursus OOP (Java) selama setahun, database, bahkan assembler dan C++. Tapi sejujurnya, saya pada umumnya acuh tak acuh dalam belajar, karena sebagian besar disiplin ilmu yang diajarkan sepertinya tidak berguna bagi saya, hanya cocok untuk tujuan pelaporan (pada prinsipnya memang demikian). Setelah lulus dari universitas, saya harus mengambil keputusan: Saya tidak memperoleh beberapa keterampilan, tetapi saya perlu bekerja. Saya harus memikirkan tentang pendidikan mandiri (oh, saya sudah melewatkan setidaknya 2 tahun penuh dengan duduk diam) dan pilihan tentu saja jatuh pada Java, karena dalam kursus OOP di universitas salah satu dari mereka merekomendasikan kursus javarush , dan dia, seperti yang Anda tahu, didedikasikan khusus untuk bahasa Java. Saya tertarik dengan presentasi kursus tersebut. Ya, saat itu saya kurang suka pemrograman, karena saya langsung menyerah ketika menemui kesulitan, dan kesulitan dalam pemrograman sudah lebih dari cukup. Tapi di saat yang sama, saya merasa ingin menulis kode, jadi pada akhirnya saya memutuskan untuk terjun ke dunia pemrograman. Saya akan menceritakan secara singkat tentang pengalaman saya dengan javarush. Saya memulainya pada Agustus 2019, langsung membeli langganan selama sebulan, tetapi di level 7 saya menyadari bahwa tugasnya sulit. Saya mengesampingkan kursus dan mengambil Shildt. Jadi secara paralel saya menyelesaikan kursus selama 3 bulan. Saya mencapai level 20 (ini adalah akun kedua saya), membaca Schildt hampir seluruhnya, kemudian bosan dengan tugas-tugas di sini, di mana saya berhenti melihat manfaat praktisnya untuk diri saya sendiri. Saya mempelajari codewars, leetcode, dan mulai menonton kursus video. Ngomong-ngomong, dalam 3 bulan saya beralih dari "Oh tidak, apa itu array? Bagaimana cara menggunakannya dan mengapa begitu menakutkan"? untuk studi mendetail tentang kode sumber kelas koleksi (ArrayList, HashMap, dll.). Berdasarkan pengalaman pribadi, saya akan memberi tahu para pemula: hal utama di sini adalah mengatasi perasaan yang muncul jika Anda tidak memahami apa pun dan tidak dapat menyelesaikan apa pun. Ketika hal itu muncul, Anda hanya ingin merelakan segalanya dan sepertinya Anda terlalu bodoh dalam hal ini. Jika Anda mengatasi momen-momen seperti itu dalam diri Anda dan mengistirahatkan mental, maka kesuksesan akan datang. Saya pikir banyak orang tidak dapat mengatasi hal ini, sehingga mereka segera menyerah pada upaya tersebut. Hasilnya, pada bulan Desember 2019 saya mulai memikirkan proyek saya. Saya memutuskan untuk memilih bot Telegram, tetapi tidak ada ide. Pada saat yang sama, seorang teman memerlukan fungsionalitas untuk grupnya di telegram, yang ingin dia otomatisasi. Dia baru sadar bahwa saya sedang mempelajari pemrograman secara mendalam dan menawari saya sebuah proyek. Bagi saya, untuk pengalaman dan resume masa depan, untuk dia, untuk pengembangan grup. Saya bahkan membiarkan diri saya mengutip idenya: "Недавно софтину хотел у программиста заказать, которая загружала бы в выбранное Облако файлы по прямым linkм. Это интересно, так How аналогов нет. И просто очень удобно. Суть: копируешь ссылку, вставляешь в окно и выбираешь нужное Облако (GDrive, Mail, Яндекс Диск и т.п), в своё время софт всё делает на стороне serverа и юзеру ничего не нужно загружать на свою машину (особенно круто, когда у тебя сборка на SSD-накопителях). Думали сделать в web-интерфейсе, чтобы можно было запускать How с телефонов, так и с десктопа... Можно в принципе через приложение реализовать, а не через web-интерфейс. Тебе такое по силам?"Saya mulai bekerja, tetapi pada akhirnya, setelah beberapa hari, saya menyadari bahwa tidak ada yang berhasil bagi kami, sebagian besar karena kurangnya pengetahuan. Seorang teman memerlukan tautan yang sama ke Cloud.Mail, tetapi mereka tetap tidak melakukannya. tidak memiliki API. Ada upaya untuk menyatukan sesuatu melalui GDrive, tetapi penerapannya timpang, ditambah lagi layanan cloud ini tidak sesuai dengan "pelanggan". Meskipun awalnya dia menawarkan beberapa cloud untuk dipilih, dia akhirnya menolak semuanya kecuali email .ru, yang solusinya tidak ditemukan. entah bagaimana semuanya menjadi mahal, perlu menghubungkan database, menggunakan server untuk penyimpanan, dll. Ngomong-ngomong, masih memerlukan aplikasi web ini. Karena semuanya tidak' tidak berhasil bagi kami, saya memutuskan untuk membuat bot informasi. Seharusnya menerima tautan ke game dari Google Play store, menguraikan tautan dan menyimpan informasi yang diterima ke perpustakaan, lalu menulisnya ke file json. Jadi, dengan setiap permintaan, perpustakaan dapat berkembang berkat upaya pengguna. Di masa depan, Anda tidak bisa mendapatkan informasi tentang game dalam bentuk yang nyaman dengan membuka Google Play. Anda cukup menulis perintah /libraryHere_game_name dan mendapatkan semua yang Anda butuhkan. Namun ada beberapa kesulitan yang akan saya ceritakan nanti. Pada awalnya kemajuan saya lambat, karena saya mulai mengambil dua kursus SQL secara bersamaan. Saya sama sekali tidak mengerti cara kerja bot dan cara memproses permintaan. Saya bertemu dengan seorang teman yang juga tertarik untuk mengerjakan proyek tersebut. Versi pertama bot siap dalam waktu sekitar satu bulan, tetapi timbul perselisihan dengan seorang teman (di pihak saya). Saya mengambil bagian dari bot yang bertanggung jawab untuk penguraian, dan dia langsung mengerjakan permintaan ke bot dan pemrosesannya. Untuk beberapa alasan, dia mulai memperumit bot, memperkenalkan semacam otorisasi, menciptakan admin, menambahkan fungsionalitas yang tidak perlu, ditambah lagi saya tidak terlalu menyukai gaya pengkodeannya. Menurut pendapat saya, ini tidak diperlukan dalam bot informasi. Jadi saya memutuskan untuk menulis bot dari awal dengan fungsionalitas yang saya butuhkan. Sekarang saya akan memberi tahu Anda apa yang sebenarnya dilakukan bot (menggunakan contoh dari kode proyek). Saya akan melampirkan kode lengkap proyek di akhir artikel dan, sayangnya, saya tidak dapat mengomentarinya sepenuhnya. Setiap pesan pengguna yang dikirim ke bot adalah objek dari kelas Update. Ini berisi banyak informasi (id pesan, id obrolan, id pengguna unik, dll.). Ada beberapa jenis update: bisa berupa pesan teks, bisa berupa respon dari keyboard telegram (callback), foto, audio, dll. Untuk mencegah pengguna terlalu banyak main-main, saya hanya memproses permintaan teks dan panggilan balik dari keyboard. Jika pengguna mengirimkan foto, bot akan memberi tahu dia bahwa dia tidak bermaksud melakukan apa pun dengannya. Di kelas bot utama, dalam metode onUpdateReceived, bot menerima pembaruan.
@Override
    public void onUpdateReceived(Update update) {
        UpdatesReceiver.handleUpdates(update);
    }
yang saya berikan ke handler (kelas UpdatesReceiver 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 adalah penangan pusat yang, bergantung pada jenis pembaruan, mentransfer kontrol ke penangan khusus lainnya: TextMessageHandler atau CallbackQueryHandler, kepada konstruktornya saya meneruskan pembaruan lebih jauh ke bawah rantai. Pembaruan adalah hal terpenting ketika bekerja dengan bot dan tidak dapat hilang, karena dengan bantuan informasi yang disimpan dalam pembaruan, kami mengetahui pengguna mana dan ke obrolan mana respons harus dikirim. Untuk menghasilkan tanggapan kepada pengguna, saya menulis kelas terpisah. Dapat mengirim pesan teks biasa, pesan dengan keyboard inline, pesan dengan gambar dan pesan dengan keyboard balasan. Keyboard sebaris terlihat seperti ini: Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 1Ini mendefinisikan tombol yang, dengan mengkliknya, pengguna mengirimkan panggilan balik ke server, yang dapat diproses dengan cara yang hampir sama seperti pesan biasa. Untuk “mempertahankannya” Anda memerlukan pengendali Anda sendiri. Kami menetapkan tindakan untuk setiap tombol, yang kemudian ditulis ke objek Update. Itu. untuk tombol "Biaya" kita mengatur deskripsi "/harga" untuk panggilan balik, yang nantinya bisa kita dapatkan dari pembaruan. Selanjutnya, di kelas terpisah, saya sudah bisa 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 ketik Balasan terlihat seperti ini: Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 2Dan intinya, ini menggantikan pengetikan pengguna. Mengklik tombol "Perpustakaan" akan dengan cepat mengirimkan pesan "Perpustakaan" ke bot. Untuk setiap jenis keyboard, saya menulis kelas saya sendiri, menerapkan pola Builder: inline dan reply . Hasilnya, pada dasarnya Anda dapat “menggambar” keyboard yang diinginkan tergantung pada kebutuhan Anda. Ini sangat nyaman, karena keyboardnya mungkin berbeda, tetapi prinsipnya tetap sama. Berikut adalah metode intuitif untuk mengirim pesan dengan keyboard inline:
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 fungsionalitas yang ketat pada bot, perintah khusus menggunakan karakter garis miring diciptakan: /library, /help, /game, dll. Jika tidak, kami harus memproses sampah apa pun yang mungkin ditulis pengguna. Sebenarnya, untuk inilah MessageHandler ditulis:
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());
}
 ...
Jadi, bergantung pada perintah apa yang Anda kirimkan ke bot, penangan khusus akan disertakan dalam pekerjaan tersebut. Mari melangkah lebih jauh dan melihat pekerjaan parser dan perpustakaan. Jika Anda mengirimkan bot tautan ke game di Google Play Store, penangan khusus akan otomatis berfungsi . Sebagai tanggapan, pengguna akan menerima informasi tentang game dalam bentuk berikut: Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 3Pada saat yang sama, sebuah metode akan dipanggil yang akan mencoba menambahkan game ke perpustakaan bot (pertama ke peta lokal, lalu ke -> file json ). Jika game sudah ada di perpustakaan, maka akan dilakukan pengecekan (seperti pada hashmap biasa), dan jika data lapangan (misalnya nomor versi telah berubah), maka game di perpustakaan akan ditimpa. Jika tidak ada perubahan yang terdeteksi, maka tidak ada entri yang dibuat. Jika tidak ada permainan di perpustakaan sama sekali, maka pertama-tama ditulis ke peta lokal (objek seperti tyk ), dan kemudian ditulis ke file json, karena jika aplikasi di server ditutup secara tidak terduga, datanya akan menjadi hilang, tetapi selalu dapat dibaca menggunakan file tersebut. Sebenarnya, ketika program dimulai, perpustakaan selalu dimuat untuk pertama kalinya dari file dari blok statis:
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 harus membaca data dari file ke dalam peta sementara, yang kemudian "disalin" ke dalam peta lengkap untuk menjaga ketidakpekaan huruf besar-kecil saat mencari game di file tersebut (dengan menulis tITan QuEST, bot akan tetap menemukannya permainan Titan Quest di perpustakaan). Tidak mungkin menemukan solusi lain, ini adalah fitur deserialisasi menggunakan Jackson. Jadi, dengan setiap permintaan tautan, game tersebut ditambahkan ke perpustakaan, jika memungkinkan, dan perpustakaan tersebut diperluas. Informasi lebih lanjut tentang game tertentu dapat diperoleh dengan menggunakan perintah /libraryGame_Name. Anda dapat mengetahui parameter tertentu (misalnya, versi saat ini) dan semua parameter sekaligus. Ini diimplementasikan menggunakan keyboard inline, yang telah dibahas sebelumnya. Selama bekerja, saya juga menerapkan keterampilan yang diperoleh di sini saat memecahkan masalah. Misalnya, daftar nama permainan acak yang terletak di perpustakaan (opsi tersedia menggunakan perintah /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);
    }
Bagaimana cara bot memproses tautan? Ia memeriksanya untuk melihat apakah mereka milik Google Play (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;
            }
        }
Jika semuanya beres, maka bot terhubung melalui tautan menggunakan perpustakaan Jsoup, yang memungkinkan Anda mendapatkan kode HTML halaman tersebut, yang akan dianalisis dan diurai lebih lanjut. Anda tidak akan bisa menipu bot dengan tautan 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 harus menyelesaikan masalah dengan pengaturan regional. Bot terhubung ke Google Play Store dari server yang berlokasi di Eropa, sehingga halaman di Google Play Store terbuka dalam bahasa yang sesuai. Saya harus menulis sebuah penopang yang akan memaksa “pengalihan” ke halaman versi Rusia (bagaimanapun juga, proyek ini ditujukan untuk audiens kami). Untuk melakukan ini, di akhir tautan, Anda perlu menambahkan parameter hl: &hl=ru dengan hati-hati ke server Google Play dalam permintaan GET .
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;
    }
Setelah koneksi berhasil, kami menerima dokumen HTML yang siap untuk dianalisis dan diurai, tetapi ini di luar cakupan artikel ini. Kode parsernya ada di sini . Parser itu sendiri mengambil informasi yang diperlukan dan membuat objek dengan permainan, yang kemudian ditambahkan ke perpustakaan jika perlu. <h2>Ringkasannya</h2>Bot mendukung beberapa perintah yang berisi fungsi tertentu. Ia menerima pesan dari pengguna dan mencocokkannya dengan perintahnya. Jika berupa tautan atau perintah /game + link, ia akan memeriksa tautan tersebut untuk melihat apakah tautan tersebut milik Google Play. Jika tautannya benar, maka terhubung melalui Jsoup dan menerima dokumen HTML. Dokumen ini dianalisis berdasarkan parser tertulis. Informasi yang diperlukan tentang game tersebut diekstraksi dari dokumen, dan kemudian objek dengan game tersebut diisi dengan data ini. Selanjutnya objek yang berisi game tersebut ditempatkan di penyimpanan lokal (jika game tersebut belum ada) dan segera ditulis ke file untuk menghindari kehilangan data. Sebuah game yang direkam di perpustakaan (nama game adalah kunci peta, objek dengan game tersebut adalah nilai peta) dapat diperoleh dengan menggunakan perintah /library Game_name. Jika game yang ditentukan ditemukan di perpustakaan bot, pengguna akan dikembalikan keyboard inline, yang dengannya dia bisa mendapatkan informasi tentang game tersebut. Jika game tidak ditemukan, Anda harus memastikan namanya dieja dengan benar (harus benar-benar cocok dengan nama game di Google Play Store, kecuali untuk kasus ini), atau menambahkan game ke perpustakaan dengan mengirimkan bot tautan ke permainan. Saya menerapkan bot di heroku dan bagi mereka yang di masa depan berencana untuk menulis bot mereka sendiri dan menghostingnya secara gratis di heroku, saya akan memberikan beberapa rekomendasi untuk memecahkan kesulitan yang mungkin Anda temui (karena saya sendiri yang menemuinya). Sayangnya, karena sifat Heroku, perpustakaan bot terus-menerus “direset” setiap 24 jam sekali. Paket saya tidak mendukung penyimpanan file di server Heroku, jadi paket saya hanya mengambil file game saya dari Github. Ada beberapa solusi: gunakan database, atau cari server lain yang akan menyimpan file ini dengan game. Saya memutuskan untuk tidak melakukan apa pun untuk saat ini, karena pada dasarnya bot tersebut tidak begitu berguna. Saya membutuhkannya untuk mendapatkan pengalaman penuh, yang pada dasarnya adalah apa yang saya capai. Nah, rekomendasi Heroku:
  1. Kemungkinan besar Anda harus mendaftar di heroku menggunakan VPN jika Anda tinggal di Rusia.

  2. Di root proyek Anda perlu meletakkan file tanpa ekstensi bernama Procfile. Isinya harus seperti ini: https://github.com/miroha/Telegram-Bot/blob/master/Procfile

  3. Pada pom.xml, tambahkan baris berikut sesuai contoh , dimana pada tag mainClass menunjukkan path ke kelas yang berisi metode utama: bot.BotApplication (jika kelas BotApplication ada di folder bot).

  4. Jangan membangun proyek apa pun menggunakan perintah paket mvn, dll., Heroku akan merakit semuanya untuk Anda.

  5. Dianjurkan untuk menambahkan gitignore ke proyek, misalnya ini:

    # Log file
    *.log
    
    # Compiled resources
    target
    
    # Tests
    test
    
    # IDEA files
    .idea
    *.iml
  6. Sebenarnya upload projectnya ke github, lalu sambungkan repositori ke Heroku (atau gunakan cara lain, ada 3 kalau tidak salah).

  7. Jika pengunduhan berhasil ("Pembangunan berhasil"), pastikan untuk membuka Konfigurasi Dynos:

    Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 4

    dan alihkan penggesernya, lalu pastikan dalam posisi AKTIF (karena saya tidak melakukan ini, bot saya tidak berfungsi dan saya memutar otak selama beberapa hari dan melakukan banyak gerakan yang tidak perlu ).

  8. Sembunyikan token bot di Github. Untuk melakukan ini, Anda perlu mendapatkan token dari variabel lingkungan:

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

    Dan kemudian setelah menerapkan bot, atur variabel ini di dasbor Heroku di tab Pengaturan (di sebelah kanan TOKEN akan ada bidang VALUE, salin token bot Anda di sana):

    Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 5
Secara total, dalam 2 bulan mengerjakan proyek saya sendiri, saya:
  • menerima proyek yang berfungsi penuh yang ditulis dalam Java;
  • belajar bekerja dengan API pihak ketiga (Telegram Bot API);
  • dalam praktiknya, saya mempelajari serialisasi lebih dalam, banyak bekerja dengan JSON dan perpustakaan Jackson (awalnya saya menggunakan GSON, tetapi ada masalah dengannya);
  • memperkuat keterampilan saya saat bekerja dengan file, mengenal Java NIO;
  • belajar bekerja dengan file konfigurasi .xml dan membiasakan diri melakukan logging;
  • peningkatan kemahiran dalam lingkungan pembangunan (IDEA);
  • belajar bekerja dengan git dan mempelajari nilai gitignore;
  • memperoleh keterampilan dalam penguraian halaman web (perpustakaan Jsoup);
  • mempelajari dan menggunakan beberapa pola desain;
  • mengembangkan rasa dan keinginan untuk meningkatkan kode (refactoring);
  • Saya belajar mencari solusi secara online dan tidak malu mengajukan pertanyaan yang tidak dapat saya temukan jawabannya.
Bot Telegram sebagai proyek pertama dan signifikansinya bagi pertumbuhan profesional berdasarkan pengalaman pribadi - 7Saya tidak tahu seberapa berguna atau tidak bergunanya bot tersebut, atau seberapa cantik/jeleknya kode tersebut, namun pengalaman yang saya dapatkan sangat berharga. Saya merasakan rasa tanggung jawab terhadap proyek saya. Sesekali saya ingin memperbaikinya, menambahkan sesuatu yang baru. Ketika saya dapat menjalankannya dan melihat bahwa semuanya berjalan sesuai keinginan saya, itu sungguh mengasyikkan. Bukankah itu yang utama? Nikmati apa yang Anda lakukan dan nikmati setiap baris kode yang berfungsi seperti sebatang coklat terakhir. Oleh karena itu, jika Anda menguasai pemrograman, maka saran saya untuk Anda: jangan tinggal di sini sampai level 40, tetapi mulailah proyek Anda sendiri sedini mungkin. Jika ada yang tertarik, kode sumber proyeknya ada di sini (ditulis ulang untuk Musim Semi): https://github.com/miroha/GooglePlayGames-TelegramBot Selama dua bulan terakhir saya hampir tidak mempelajari materi baru, karena menurut saya bahwa aku telah menemui jalan buntu. Tanpa pekerjaan, saya tidak lagi melihat apa yang harus saya kembangkan, kecuali mungkin untuk mengajarkan Kerangka Musim Semi, yang merupakan rencana saya untuk dilakukan bulan depan. Dan kemudian saya akan mencoba "menulis ulang" bot menggunakan kerangka ini. Siap menjawab pertanyaan apa pun. :) Semoga beruntung semuanya! PEMBARUAN mulai 07/07/2020 Repositori dengan bot di Java murni hilang (saya menghapusnya, salinannya tetap ada di mesin lokal lain), tetapi saya mengunduh bot yang ditulis ulang untuk Spring Boot: https://github.com/miroha /GooglePlayGames-TelegramBot
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION