
Itu terjadi pada Anda bahwa Anda datang ke bioskop dan menonton trailer sebelum dimulainya film, sementara beberapa dari mereka berpegang teguh pada Anda dan Anda berjanji pada diri sendiri untuk menonton film ini jika tidak di bioskop, maka setidaknya nanti, ketika film itu tersedia untuk diunduh. ? Saya berani menyarankan itu ya. Tetapi sering kali berakhir dengan fakta bahwa Anda berhasil melupakannya dan, dalam kasus terbaik, secara tidak sengaja menemukan film ini dengan menggulir daftar film yang sudah dirilis.
Saya sering menghadapi masalah seperti itu dan memutuskan untuk membuatnya dengan Eve - Telegram-bot, yang membantu saya untuk tidak melupakan rilis film favorit saya. Apa itu, bagaimana cara kerjanya dan bagaimana itu dikembangkan, Anda dapat membaca di bawah potongan!
Kata Pengantar
Artikel ini bukan panduan terperinci tentang cara membuat bot Telegram. Dan meskipun selama artikel saya akan sering merujuk ke proyek saya, tujuan dari materi ini adalah cerita tentang pengembangan secara umum, yaitu pilihan teknologi, poin-poin penting dan jebakan yang saya temui.
Mengapa
Jadi, seperti yang saya tulis di atas, saya sering lupa menonton film-film yang trailernya saya sukai. Saya telah memikirkan solusi untuk masalah ini sejak lama. Hal pertama yang terpikir oleh saya adalah pembuatan aplikasi asli untuk smartphone, tetapi sejak itu Saya belum pernah melakukan ini sebelumnya, akan memakan banyak waktu dan bukan fakta bahwa hasil akhirnya akan memuaskan kebutuhan saya, serta kebutuhan pengguna potensial.
Ide selanjutnya adalah membuat PWA. Ini opsi yang cukup menarik untuk berkenalan dengan teknologi, tetapi saya memutuskan untuk meninggalkannya di masa depan. Pada saat yang sama, saya telah menggunakan Telegram untuk waktu yang lama dan selama ini saya telah mengumpulkan cukup banyak bot yang secara berkala membuat hidup saya sedikit lebih mudah. Pada akhirnya, setelah mempertimbangkan semua pro dan kontra, saya memutuskan bahwa platform ini sangat cocok untuk ide ini.
Pemilihan teknologi
Jika Anda menggunakan Github untuk bot Telegram, Anda dapat melihat bahwa kebanyakan dari mereka ditulis dalam Python. Python benar-benar bahasa yang hebat dan bagus untuk ide ini, tetapi saya ingin mengimplementasikan proyek ini secara khusus pada NodeJS + TypeScript. Menerapkan filter yang sesuai, saya menemukan 2 alat yang cukup populer:
node-telegram-bot-api dan
Telegraf.js .
Sebelum pengalaman dalam mengembangkan bot saya tidak punya, jadi ketika memilih dari dua bot ini tidak jelas parameter apa yang harus dilihat. Akibatnya, setelah melihat dokumentasi dan mencari masalah untuk masing-masing perpustakaan, saya memutuskan Telegraf.js. Faktor yang menentukan adalah ketersediaan middlewares, yang dirancang dengan cara yang sama seperti dalam kerangka Express.js yang populer. Telegraf.js juga memiliki riwayat pembaruan yang lebih sering dan dokumentasi yang terstruktur dengan baik, yang menunjukkan bahwa para pengembang melakukan upaya yang cukup untuk meningkatkan alat ini. Selain itu, ini berisi tip untuk TypeScript, yang pasti merupakan nilai tambah untuk tumpukan yang dipilih.
Telegraf.js
Telegraf.js adalah perpustakaan utama tempat proyek ini ditulis. Ini menggunakan beberapa pendekatan menarik yang memungkinkan Anda untuk membuat bot kompleks sambil mempertahankan kesederhanaan kode. Di bawah ini adalah mekanisme yang paling menarik:
Struktur proyek
Ada kecurigaan bahwa artikel itu akan berubah menjadi sangat banyak, dan karena itu, agar tidak merentangkannya lebih jauh, saya akan menghilangkan beberapa poin. Misalnya, agar bot mulai bekerja, Anda harus mulai dengan mendapatkan token API API Telegram. Anda dapat membaca tentang bagaimana melakukan ini di
dokumentasi Telegram resmi atau dalam
dokumentasi untuk Telegraf.js.
Struktur file proyek adalah sebagai berikut:
Ia bekerja sebagai berikut:
- src / controllers - ini adalah adegan yang ditulis di atas. Dalam proyek ini, setiap adegan adalah pengontrol terpisah yang memproses permintaan yang sesuai.
- src / locales - terjemahan untuk berbagai bahasa. Telegraf.js membuatnya relatif mudah untuk menambahkan pelokalan ke bot menggunakan middlewares.
- src / models - model untuk MongoDB.
- src / types - tippings untuk TypeScript. Sayangnya, tidak semua perpustakaan yang digunakan dalam proyek memiliki timing default.
- src / util - berbagai fungsi pembantu yang digunakan di berbagai bagian proyek. Di sini Anda dapat melihat bagaimana ketersediaan film untuk diunduh, manajemen sesi, membuat keyboard, penangan kesalahan, dan banyak lagi yang berfungsi.
- src / bot.ts - file utama tempat semua persiapan dan peluncuran bot dilakukan.
- src / telegram.ts - dalam hal ini, kami membuat objek kelas Telegram dari perpustakaan Telegraf.js. Menggunakan objek ini, kita dapat mengirim pesan ke pengguna terlebih dahulu, menggunakan ID mereka, dan tidak menunggu sampai mereka menulis sesuatu. Misalnya, dalam proyek ini, kami mengirim pesan kepada pengguna yang menyatakan bahwa film yang ia ikuti sudah dapat diunduh. Tentu saja, objek ini menyediakan lebih banyak fitur.
- Yang lainnya adalah konfigurasi untuk berbagai bagian proyek yang tidak akan dibahas dalam artikel ini.
Inisialisasi dan Peluncuran
Ketika kami mengetahui struktur proyek, mari kita lihat bagaimana bot sebenarnya dimulai. Sekali lagi, untuk mempersingkat artikel, saya tidak akan memasukkan seluruh kode di sini, tetapi hanya akan berbicara tentang utama, menurut pendapat saya, momen. Anda dapat melihat kode lengkap di repositori, tautan yang tersedia di akhir artikel.
Semuanya dimulai dengan menghubungkan ke basis data, yang menyimpan informasi tentang pengguna dan film yang mereka lacak. Setelah koneksi berhasil, kami mendaftarkan semua adegan yang digunakan dalam proyek, menetapkan parameter untuk pelokalan dan menambahkan beberapa middlewares - sesi pemrosesan, pelokalan, pengaturan adegan, serta beberapa adegan kami sendiri. Salah satunya, misalnya, menerima semua informasi tentang pengguna sesuai dengan ID-nya dan menambahkannya ke konteks yang digunakan dalam pengontrol. Akhirnya, setelah semua persiapan dasar, kami meluncurkan bot dalam mode pengembangan (polling panjang) atau produksi (Webhooks).
Penting: jika Anda menggunakan metode berbeda untuk menerima pembaruan (polling panjang dan Webhooks), maka ketika memulai bot dalam mode polling panjang, pertama-tama hapus Webhook mendengarkan menggunakan permintaan GET di
api.telegram.org/botYOUR_TOKEN/deleteWebhook . Kalau tidak, bot mungkin tidak berfungsi dengan baik.
Tangani input pengguna
Hore! Bot berfungsi, terhubung ke database dan siap menerima pesan dari pengguna. Tetapi bagaimana cara melakukannya dengan benar?
Pertama-tama, akan lebih mudah bagi pengguna untuk menggunakan Telegram-keyboard bawaan. Bahkan, ketika Anda mengklik tombol-tombol pada keyboard ini, pesan dikirim dengan isi tombol-tombol ini. Selanjutnya, kami cukup menambahkan penangan untuk teks ini dan melakukan tindakan tertentu.
File
bot.ts berisi penangan tersebut. Karena bot mendukung dua bahasa, tombol-tombol itu mungkin juga mengandung teks yang berbeda - dalam bahasa Rusia dan Inggris. Telegraf-i18n memiliki fungsi kecocokan yang dapat menangani mengklik tombol yang sama dengan berbagai bahasa.
Sebagian besar penangan di bot.ts melakukan fungsi tunggal - mereka meluncurkan pengguna ke adegan yang sesuai. Jadi, kami memiliki beberapa bagian - mencari film, koleksi saya, pengaturan dan kontak. Setiap bagian memiliki adegan sendiri dan tombolnya sendiri, ketika diklik, pengguna pindah ke adegan yang sesuai.
Penting: pastikan untuk menambahkan pawang yang akan melepaskan pengguna dari tempat kejadian, jika tidak mereka berisiko tinggal di sana selamanya! Ini juga akan berguna untuk membuat satu perintah umum (/ saveme digunakan di bot), yang akan ditambahkan ke setiap adegan dan ke file utama. Perintah ini akan berfungsi sebagai jalan keluar dari adegan apa pun, serta mengatur ulang pengaturan pengguna.
Dan sekarang, pengguna ingin pergi mencari film. Dengan mengklik tombol yang sesuai, kami memindahkannya ke adegan pencarian. Untuk kenyamanan, setiap adegan memiliki folder sendiri dengan file, yang masing-masing melakukan fungsi tertentu.
Di dalam adegan, Anda dapat menggunakan middlewares Anda, yang ada di file middlewares.ts. Misalnya, dengan menggunakan middleware di adegan pencarian, kami dapat dengan mudah meneruskan semua informasi tentang film ke metode yang sesuai, daripada melakukan fungsi yang sama setiap kali di dalamnya.
Telegram juga memiliki keyboard inline. Mungkin Anda telah menemukan pesan dengan suara, di mana ada beberapa tombol transparan, dan ketika Anda mengklik salah satu dari mereka, jumlah suara berubah. Tombol-tombol ini adalah keyboard inline
Begitulah yang terlihat pada Hawa Setiap tombol berisi informasi, ketika Anda mengklik tombol, itu akan dikirim ke penangan yang sesuai.
Ukuran informasi yang dikirimkan tidak boleh melebihi 64 byte! Untuk mengajarkan bot mendengarkan klik tombol, kita perlu mendaftarkannya menggunakan bot.action (/ trigger /, callback). Parameter pertama berisi semua data yang terikat ke tombol. Saya memutuskan untuk menggunakan sesuatu seperti Actions from Redux, di mana objek bentuk {a: actionName, p: payload} dilampirkan ke setiap tombol. Saat mendaftarkan pendengar, kita dapat menggunakan RegExp sederhana, misalnya: bot.action (/ actionName /, callBack). Semua penangan untuk keyboard inline ada di file actions.ts.
Selain itu, di beberapa adegan ada file helpers.ts, yang berisi fungsi kecil yang diambil di sana untuk membongkar file yang tersisa. Sebagian besar, ada generator keyboard untuk berbagai tindakan oleh pengguna.
Lokalisasi
Karena ini adalah topik penting, saya pikir perlu disebutkan secara terpisah. Seperti yang saya katakan sebelumnya, Telegraf.js berisi sejumlah besar middlewares, salah satunya adalah
telegraf-i18n . Repositori berisi instruksi terperinci dan saya tidak memiliki masalah khusus dengan ini, tetapi bagaimanapun saya akan menambahkan beberapa kata tentang bagaimana ini bekerja dalam proyek ini.
Ada folder locales di mana file untuk pelokalan berada, yang merupakan objek JSON dari form {"key": "translation"}. Lebih lanjut, di mana pun kita perlu menggunakan bahasa yang berbeda, kita menggunakan metode dari perpustakaan ini, di mana kita mentransfer terjemahan yang kita butuhkan dengan kunci, dan pada output kita mendapatkan terjemahan yang sesuai. Sesi dapat digunakan untuk menyimpan informasi tentang bahasa yang dipilih oleh pengguna. Juga layak disebutkan tentang tombol lagi. Ada fungsi kecocokan di perpustakaan yang sama, jadi jika teks pada tombol berubah tergantung pada bahasa, fungsi ini akan membantu Anda menggantung pendengar yang benar.
Penting: jika Anda akan menggunakan pelokalan dan menulis bot dalam TypeScript, jangan lupa untuk menambahkan folder terjemahan ke tsconfig.json, jika tidak maka kode tidak akan dikompilasi. Sebagai contoh:
"include": ["src/locales/*.json"]
Kesimpulan
Terima kasih sudah membaca sampai akhir! Pada artikel ini, saya mencoba menggambarkan proses membuat bot Telegram secara keseluruhan serinci mungkin, tanpa keterikatan yang kuat dengan proyek saya. Saya harap setelah membaca artikel ini, serta mempelajari kode sumber untuk Hawa, Anda dapat dengan mudah membuat bot yang dapat membantu Anda.
Seperti yang dijanjikan, Anda dapat melihat kode sumber di
GitHub , dan coba Hawa dalam tindakan di
sini . Saya akan sangat berterima kasih atas kritik dan saran untuk perbaikan.
Saya juga ingin mencatat
bagian dalam dokumentasi Telegraf.js dengan proyek sumber terbuka yang menarik yang dapat Anda lihat dan terinspirasi oleh arsitektur dan solusi. Saya, pada gilirannya, ingin menyebutkan salah satu dari mereka -
The Guard Bot . Bot yang benar-benar besar dan dibuat dengan baik, dari mana saya meminjam beberapa solusi untuk pengembangan saya.
Dan pada saat saya mengatakan semua yang saya inginkan, saya akan dengan senang hati menjawab pertanyaan, saran, dan komentar Anda!