Sudah lama Fortuna melempar dadu, mencatat koin, dan menjaga kampanye tetap hidup di server-server Discord. Namun di balik layar, bot ini telah tumbuh menjadi satu program raksasa yang mengurus segalanya sekaligus — dan jahitannya mulai terlihat. Maka kami melakukan hal yang cepat atau lambat dihadapi setiap proyek berumur panjang: kami membangunnya ulang dari nol.
Fortuna yang baru merespons lebih cepat, lebih stabil di bawah beban, lebih mudah kami kembangkan, dan siap tumbuh bersama meja Anda. Sebagian besar pekerjaan itu terjadi di tempat yang tidak akan pernah Anda lihat, dan justru itulah intinya. Tetapi hasilnya muncul di mana pun Anda benar-benar menggunakannya. Inilah kisah lengkap tentang apa yang berubah dan mengapa itu penting.
Fortuna versi awal dibangun di atas pola yang umum: sebuah bot yang menjaga koneksi permanen dan selalu terbuka ke Discord — yang oleh Discord disebut gateway — lalu mendengarkan segala hal yang terjadi di setiap server yang diikutinya, sepanjang waktu. Untuk menanggung beban seiring pertumbuhan bot, koneksi itu dipecah menjadi beberapa salinan paralel yang disebut shard, masing-masing merupakan proses tersendiri yang harus diawasi, dijalankan ulang, dan dijaga agar tetap sehat.
Cara ini berhasil, dan telah berhasil selama bertahun-tahun. Tetapi ada harga yang nyata. Bot yang selalu terkoneksi terus-menerus memakan memori dan menyimpan state, bahkan ketika tak seorang pun sedang mengetik perintah. Setiap server, kanal, dan anggota yang bisa dilihatnya menambah beban. Ketika satu shard tersendat, sekumpulan server bisa merasakannya. Dan setiap fitur baru harus dirangkai dengan hati-hati ke dalam program yang sudah mengerjakan selusin hal sekaligus.
Kami menginginkan sesuatu yang lebih ramping. Sesuatu yang bekerja saat ada pekerjaan, tetap tenang saat tidak ada, dan dibangun dari potongan-potongan kecil yang bisa kami perbaiki atau skalakan satu per satu.
Bot Discord modern punya pilihan yang lebih baik untuk perintah: alih-alih menjaga koneksi tetap terbuka dan menunggu, bot bisa membiarkan Discord memanggilnya hanya ketika seseorang benar-benar memakai sebuah slash command. Discord mengemas perintah itu, mengirimkannya sebagai satu permintaan web yang aman, lalu bot membalas. Tanpa koneksi yang berdiri terus, tanpa beban menganggur. Saat tidak ada yang terjadi, bot nyaris tidak memakai apa pun.
Itulah inti dari desain baru ini. Kami memecah monolit lama menjadi dua bagian yang terfokus:
Bayangkan seperti sebuah restoran. Fortuna yang lama adalah seorang koki kalang kabut yang berusaha mencatat pesanan, mengurus ruang makan, dan menjalankan dapur secara bersamaan. Fortuna yang baru punya dapur yang langsung menyala begitu pesanan datang (fortuna-http) dan seorang penyambut tamu di pintu yang penuh perhatian mengawasi tamu yang masuk (fortuna-gateway). Masing-masing menjalankan tugasnya dengan baik, dan tidak ada yang memperlambat yang lain.
Bicara soal arsitektur memang menarik, tetapi inilah yang benar-benar akan Anda rasakan di server Anda.
Respons lebih gesit. Karena inti perintah hanya melakukan satu hal dan tidak membawa beban menganggur, ia menjawab dengan cepat dan konsisten. Lebih sedikit antrean yang harus dilewati sebuah perintah.
Keandalan lebih baik. Kedua bagian itu independen. Jika pembantu lemparan-chat perlu dijalankan ulang, slash command Anda tetap bekerja tanpa kedip. Masalah tetap terkurung alih-alih merembet ke seluruh bot.
Lebih stabil saat tertekan. Inti perintah tanpa state tidak menumpuk beban seiring makin banyaknya server dan pemain yang bergabung. Malam yang sibuk berperilaku jauh lebih mirip malam yang sepi.
Peningkatan lebih cepat. Dengan inti yang bersih dan modular, kami bisa menambah dan memperbaiki fitur tanpa mengganggu segala hal di sekitarnya. Perintah baru terpasang dengan rapi, yang berarti pembaruan sampai ke Anda lebih cepat.
Pembangunan ulang juga merupakan kesempatan untuk merilis hal-hal yang sudah lama ingin kami tambahkan. Fortuna yang baru membawa sederet fitur yang berarti:
/lc untuk anggota dan /mod_lc bagi moderator untuk mengelola saldo. Hadiah dan peringkat tetap terbatas pada komunitas Anda./config yang sebenarnya menempatkan pengaturan per-server di satu tempat, sehingga setiap komunitas bisa menyetel Fortuna agar pas dengan cara bermainnya./handouts khusus, sebagaimana mestinya sebuah meja virtual yang baik./checkin memudahkan menandai kehadiran dan menjaga kelompok Anda tetap pada jalurnya.Semua itu berdampingan dengan hal-hal yang selalu dilakukan Fortuna dengan baik: pelemparan dadu yang kaya (baik lewat slash command maupun dengan mengetik lemparan langsung di chat), hadiah harian, peringkat, toko, dan yang lainnya.
Salah satu peningkatan kenyamanan terbesar tertanam langsung di inti yang baru: lokalisasi penuh. Kini Fortuna berbicara dalam semua bahasa Discord — lebih dari tiga puluh lokal — dan ia memilih yang tepat secara otomatis berdasarkan pengaturan Discord setiap pengguna. Nama perintah, deskripsi, dan respons hadir dalam bahasa pemain itu sendiri, dengan rantai cadangan yang masuk akal sehingga tak seorang pun terjebak menatap terjemahan yang hilang. Entah meja Anda bermain dalam bahasa Portugis, Inggris, Spanyol, Prancis, Jepang, atau apa pun di antaranya, Fortuna menjumpai tiap orang di tempat mereka berada.
Jika Anda menyukai detail teknis, inilah beberapa pilihan yang kami banggakan — dan Anda boleh saja melewati bagian ini jika tidak.
Setiap permintaan perintah dari Discord diverifikasi secara kriptografis menggunakan tanda tangan Ed25519 sebelum Fortuna menanggapinya, sehingga bot hanya pernah merespons permintaan yang asli dan tidak diutak-atik. Inti perintah berjalan di atas Bun dengan framework ringan Hono; pembantu lemparan-chat adalah program Go kecil yang dikompilasi secara statis dan menganggur dengan jejak yang amat tipis. Keduanya dirilis sebagai image terkontainerisasi yang bersih, yang membuat deployment cepat dan dapat diulang. Dan kami memasang pemantauan error yang layak sehingga ketika sesuatu memang berjalan salah, kami mendengarnya dan bisa segera memperbaikinya — sembari berhati-hati untuk tidak pernah mencatat apa pun yang bersifat sensitif.
Mesin dadu bersama adalah matematika tepercaya yang sama dengan yang menggerakkan peralatan kami yang lain, sehingga sebuah lemparan berarti persis sama entah Anda melakukannya di Discord atau di mana pun di seluruh ekosistem.
Tidak satu pun dari ini mengubah jiwa Fortuna. Ia tetaplah bot ramah yang melempar dadu Anda dan menjaga kampanye Anda tetap teratur. Yang berubah adalah fondasi di bawahnya: lebih ramping, lebih stabil, dan dibangun agar kami bisa terus membuatnya lebih baik tanpa menghalangi Anda.
Tambahkan Fortuna ke server Anda, cobalah perintah-perintah baru, dan beri tahu kami apa yang ingin Anda lihat berikutnya. Dadu sudah siap kapan pun Anda siap.