Mengungkap Rahasia Salah Satu Bot Shitposter di Twitter

Teknologi 7 Des 2018

Hai MedForians!

Pernah melihat bot ini berseliweran di Twitter anda?

Screenshot_59
DISENSOR DEMI KENYAMANAN BERSAMA!

Kita akan mencoba mengungkap bagaimana bot ini bekerja versi saya. Mohon maaf buat empunya bot, ini hanya untuk menjadi pembelajaran saja, peace hehehe.

Source Code

Anda bisa mengunjungi GitHub kami secara langsung, Untuk live codenya silahkan kunjungi link ini.

Metode

Peringatan: Tulisan ini sudah mulai menjurus ke bahasa pemograman sehingga penggunaan bahasa teknis lebih dominan.

Peringatan: Lebih enaknya baca post ini dengan dua tab, satu postingan ini, satu kodenya. Agar lebih mudah dicerna.

Metode dalam aplikasi ini terlihami oleh Fisher-Yates Shuffle di mana dianalogikan seperti kita sedang mengocok kartu poker kemudian membagikannya ke pemain secara acak.

Kartu itu diibaratkan sebuah array berisi value yang ingin diacak. Pasti kalian bertanya-tanya kenapa bukan pake metode Math.random() aja untuk mengacaknya. Karena dengan menggunakan metode random tadi tentu anda bisa mendapatkan kartu yang sama tiap pemainnya.

animation
Ya, kira-kira seperti ini contohnya.

Apabila kartu telah diacak dan dilempar ke pemain, dalam pemograman diibaratkan array tersebut apabila telah dipilih kemudian elemen array yang telah dipilih sengaja dihilangkan agar ketika diacak maka 100% kemungkinan anda tidak mendapakan value yang sama. Begitu pula dengan kartu, apabila telah terpilih maka otomatis di tangan bandarnya kartu tersebut sudah tidak ada.

Karena ini sifatnya sekali pakai saja, karena kita menghabisi array yang disimpan selama rentang waktu tertentu. Kita dapat mensiasatinya dengan menggunakan multiply array. Tapi nanti kita akan jelaskan.

Cara Mengacak Arraynya

Perhatikan fungsi notRepeat() sesudah IF ELSE Condition untuk pemeriksa isi array, kalian dapat melihat apa yang sebenarnya dikerjakan komputer untuk mengacaknya.

var index = Math.floor(Math.random() * kosakata.length);
var item = kosakata[index];
kosakata.splice(index, 1);
return item;

Pertama, memang kita harus mengacak urutan arraynya dulu. Dari pertama saja namanya Pseudo Random Number Generator ya wajib hukumnya kita harus mengacak urutannya dulu. Kita cuma ingin mengambil urutannya saja, belum dieksekusi.

Kedua, kita amankan dulu valuenya sebelum dieksekusi untuk dikeluarkan dari array.

Ketiga, dalam JS ada fungsi yang bernama Array.splice() yang berfungsi untuk menghilangkan, menambahkan, maupun menghapus isi array. Nah kita manfaatkan tadi untuk menghapus itemnya.

Dari mana hitungannya? Jadi kau lupakan peran index tadi? Kita gunakan variabel index sebagai penunjuk itemnya berada.

Kan ini cuma satu kali jalan doang. Kalau gua mau sampai halaman webnya gua tutup gimana?

Nah, pertama kita buat klon dari kosakatanya, anggaplah gua jadiin variabel copy aja.

var copy = kosakata.slice(0);

Di dalam function notRepeat() kita buat gebrakan yang agak sedikit mayan gede.

function notRepeat() {
   if (copy.length < 1) {
      copy = kosakata.slice(0);
   }
   var index = Math.floor(Math.random() * copy.length);
   var item = copy[index];
   copy.splice(index, 1);
   return item;
}

Di bagian IF ELSE Condition, kita menjadikan copy sebagai patokan. Apabila copy itu lebih kecil dari 1 maka langsung eksekusi klon ulang isi kosakatanya sehingga kalau kita pikir secara logika, ini bakal gaada akhirnya.

Agak beda kan di sini? Jadi yang kita gerakin bukan yang aslinya, melainkan kembarannya saja. Full livenya bisa dilihat di sini dan tenang, gua ga minify kodenya seperti yang tadi.

Eval Is Evil

Untuk yang Eval is Evil, gua skip. Soalnya ga terlalu penting, intinya sih document.write() itu sebenarnya berbahaya karena fungsinya sama ama Eval().

Yang Membuat Kode Ini Berputar

Ok, kita akan membahas sebenarnya siapa sih dalang mengapa kode ini berputar terus.

const ngulang = setInterval(() => {
   var acak = notRepeat();
   if (acak === undefined) {
      cetakAman("div", "kosakatanya dah abis (alat kelamin pria)");
   }
   else {
      cetakAman("div", `${acak} (alat kelamin pria)`);
   }
}, 500);

Biasa lah, kalau perputaran waktu hingga webnya ketutup ya ulah setInterval.

Kita bertemu lagi dengan IF ELSE Condition, tapi di sini kasusnya adalah mengecek bahwa output acak itu adalah undefined atau bukan. Alasannya adalah:

undefined (alat kelamin pria)

Makanya, kita perlu mengecek apabila output dari array yang telah diacak itu udah kosong atau tidak.

Dan untuk pesan bahwa udah kosong atau tidak, terserah kalian, berkreasilah.

Variabel Itu Gak Selamanya Bersemayam di Komputer!

Ada benarnya robot itu online terus, akan tetapi ada waktu di kemudian hari robot itu mati karena entah kenapa.

Cara mensiasati arraynya menurut saya cukup mudah, buatkan 2 file JSON untuk file asli dan yang ingin dipermainkan isinya. Dan, logikanya seperti tadi, cuma mungkin akan tambah rame karena kehadiran JSON.

Kesimpulan?

Teknologi masa kini memberikan kita banyak kejutan, contohnya seperti bot ini. Berbagai filusufi dan rumus aritmatik kita temukan yang membuat pemograman itu semakin indah dan menarik.

Dan untuk MedForians yang asal usulnya bukan programmer dan takjub dengan post ini, saya katakan.

Selamat bergabung di dunia Programmer yang fana ini!

Tag

Ikramullah

Tukang review game. Hobi saya sumpah-serapah dengan teknologi baru.