Membangun Bot Perselisihan Menggunakan Discord.js
Diterbitkan: 2022-03-10Platform komunikasi tim semakin populer dari hari ke hari, karena semakin banyak orang yang bekerja dari rumah. Slack and Discord adalah dua platform komunikasi tim paling populer. Sementara Discord difokuskan pada gamer, beberapa fungsi, seperti kemampuan untuk menambahkan hingga 50 anggota di ruang panggilan suara, menjadikannya alternatif yang sangat baik untuk Slack. Salah satu keuntungan paling signifikan menggunakan platform semacam itu adalah banyak tugas dapat diotomatisasi menggunakan bot.
Pada artikel ini, kami akan membuat bot dari awal menggunakan JavaScript dan dengan bantuan dari Discord.js. Kami akan membahas proses mulai dari membangun bot hingga menyebarkannya ke cloud. Sebelum membangun bot kita, mari tuliskan fungsionalitas yang akan dimiliki bot kita:
- Bagikan lelucon acak dari berbagai lelucon.
- Tambahkan dan hapus peran pengguna dengan memilih emoji.
- Bagikan tweet dari akun tertentu ke saluran tertentu.
Karena modul Discord.js didasarkan pada Node.js, saya akan berasumsi bahwa Anda agak akrab dengan Node.js dan npm. Keakraban dengan JavaScript adalah suatu keharusan untuk artikel ini.
Sekarang kita tahu prasyarat dan tujuan kita, mari kita mulai. Dan jika Anda ingin mengkloning dan menjelajahi kode segera, Anda dapat melakukannya dengan repositori GitHub.
Langkah-Langkah yang Harus Diikuti
Kami akan membangun bot dengan mengikuti beberapa langkah.
Pertama, kita akan membangun server Discord . Server Discord seperti grup tempat Anda dapat menetapkan berbagai topik ke berbagai saluran, sangat mirip dengan server Slack. Perbedaan utama antara Slack dan Discord adalah bahwa Slack memerlukan kredensial login yang berbeda untuk mengakses server yang berbeda, sedangkan di Discord Anda dapat mengakses semua server tempat Anda menjadi bagian dengan satu otentikasi.
Alasan kami perlu membuat server adalah, tanpa hak admin untuk server, kami tidak akan dapat menambahkan bot ke server. Setelah server kami dibuat, kami akan menambahkan bot ke server dan mendapatkan token akses dari portal pengembang Discord. Token ini memungkinkan kita untuk berkomunikasi dengan Discord API. Discord menyediakan API terbuka resmi untuk kita berinteraksi. API dapat digunakan untuk apa saja, mulai dari melayani permintaan bot hingga mengintegrasikan OAuth. API mendukung semuanya, mulai dari bot server tunggal hingga bot yang dapat diintegrasikan di ratusan server. Ini sangat kuat dan dapat diimplementasikan dalam banyak cara.
Pustaka Discord.js akan membantu kami berkomunikasi dengan Discord API menggunakan token akses . Semua fungsi akan didasarkan pada Discord API. Kemudian, kita dapat mulai mengkodekan bot kita. Kita akan mulai dengan menulis sedikit kode yang akan memperkenalkan kita ke Discord API dan library Discord.js. Kami kemudian akan memahami konsep parsial di Discord.js. Setelah kami memahami parsial, kami akan menambahkan apa yang dikenal sebagai sistem "peran reaksi" ke bot. Setelah itu selesai, kita juga akan tahu bagaimana berkomunikasi dengan Twitter menggunakan paket npm yang disebut twit
. Paket npm ini akan membantu kami mengintegrasikan fungsi penerusan tweet Twitter. Terakhir, kami akan menyebarkannya ke cloud menggunakan Heroku.
Sekarang kita tahu bagaimana kita akan membangun bot kita, mari kita mulai mengerjakannya.
Membangun Server Perselisihan
Hal pertama yang harus kita lakukan adalah membuat server Discord . Tanpa server dengan hak istimewa admin, kami tidak akan dapat mengintegrasikan bot.
Membangun server Discord itu mudah, dan Discord sekarang menyediakan template, yang membuatnya lebih mudah. Ikuti langkah-langkah di bawah ini, dan server Discord Anda akan siap. Pertama, kita akan memilih bagaimana kita akan mengakses portal Discord. Kita dapat menggunakan versi web atau aplikasi. Keduanya bekerja dengan cara yang sama. Kami akan menggunakan versi web untuk tutorial ini.
Jika Anda membaca artikel ini, saya akan berasumsi bahwa Anda sudah memiliki akun Discord. Jika tidak, buat saja akun seperti yang Anda lakukan di situs web lain mana pun. Klik tombol "Masuk" di kanan atas, dan masuk jika Anda memiliki akun, atau klik tombol "Daftar". Isi formulir sederhana, lengkapi Captcha, dan Anda akan berhasil membuat akun. Setelah membuka aplikasi atau situs web Discord, klik ikon plus di sisi kiri, tempat daftar server berada. Saat Anda mengkliknya, Anda akan diminta untuk memilih template atau membuatnya sendiri.
Kami akan memilih opsi "Buat Milik Saya". Mari kita lewati pertanyaan berikutnya. Kami akan memanggil server Discord kami "Contoh Penghancur". Anda juga dapat memberikan foto untuk server Anda. Mengklik tombol "Buat" akan membuat server Anda.
Mendaftarkan Bot Dengan Perselisihan
Sebelum mengkodekan bot, kita perlu mendapatkan token yang disediakan oleh Discord . Token ini akan membuat koneksi dari kode kami ke Discord. Untuk mendapatkan token, kita harus mendaftarkan bot kita ke server kita. Untuk mendaftarkan bot, kita harus mengunjungi portal pengembang Discord. Jika Anda membuat aplikasi Discord untuk pertama kalinya, Anda akan menemukan daftar kosong di sana. Untuk mendaftarkan aplikasi kami, klik tautan "Aplikasi Baru" di sudut kanan atas. Beri nama aplikasi Anda, dan klik tombol "Buat". Kami akan menamai aplikasi kami "Smashing App".
Menu baru memberi kita beberapa pilihan. Di sisi kanan adalah opsi berlabel "Bot". Klik, dan pilih "Tambah Bot". Klik konfirmasi, ubah nama bot jika diinginkan, simpan perubahan, dan salin token yang diterima dari halaman ini. Bot kami sekarang terdaftar di Discord. Kita dapat mulai menambahkan fungsionalitas dan mengkodekan bot.
Membangun Bot
Apa itu Discord.js?
Discord.js mendefinisikan dirinya seperti ini:
Discord.js adalah modul node.js yang kuat yang memungkinkan Anda berinteraksi dengan Discord API dengan sangat mudah. Dibutuhkan pendekatan yang jauh lebih berorientasi objek daripada kebanyakan pustaka JS Discord lainnya, membuat kode bot Anda jauh lebih rapi dan lebih mudah dipahami.
Jadi, Discord.js membuat interaksi dengan Discord API menjadi lebih mudah. Ini memiliki cakupan 100% dengan Discord API resmi.
Menginisialisasi Bot
Buka editor teks favorit Anda, dan buat folder tempat semua file Anda akan disimpan. Buka antarmuka baris perintah (CLI), cd
ke dalam folder, dan inisialisasi folder dengan npm: npm init -y
.
Kami akan membutuhkan dua paket untuk mulai membangun bot. Yang pertama adalah dotenv, dan yang kedua, jelas, adalah modul Discord.js Node.js. Jika Anda familiar dengan Node.js, maka Anda akan familiar dengan paket dotenv. Itu memuat variabel lingkungan dari file bernama .env
ke process.env
.
Instal keduanya menggunakan npm i dotenv discord.js
.
Setelah instalasi selesai, buat dua file di folder root Anda. Beri nama salah satu file .env
. Beri nama file utama lainnya apa pun yang Anda inginkan. Saya akan menamakannya app.js
. Struktur folder akan terlihat seperti ini:
│ .env │ app.js │ package-lock.json │ package.json └─── node_modules
Kami akan menyimpan token dan informasi sensitif lainnya di file .env
, dan menyimpan kode yang menghasilkan hasilnya di file app.js
Buka file .env
, dan buat variabel baru. Beri nama variabel BOT_TOKEN
untuk contoh ini. Tempelkan token Anda di file ini. File .env
akan terlihat seperti ini sekarang:
BOT_TOKEN=ODAxNzE1NTA2Njc1NDQ5ODY3.YAktvw.xxxxxxxxxxxxxxxxxxxxxxxx
Kita bisa mulai mengerjakan file app.js
Hal pertama yang harus dilakukan adalah meminta modul yang kita instal.
const Discord = require('discord.js'); require('dotenv').config();
Modul dotenv
diinisialisasi menggunakan metode config()
. Kita dapat meneruskan parameter ke metode config()
. Tetapi karena ini adalah penggunaan modul dotenv yang sangat sederhana, kita tidak memerlukan fungsi khusus apa pun darinya.
Untuk mulai menggunakan modul Discord.js, kita harus menginisialisasi konstruktor. Ini ditunjukkan dalam dokumentasi:
const client = new Discord.Client();
Modul Discord.js menyediakan metode bernama client.on
. Metode client.on
mendengarkan berbagai acara. Pustaka Discord.js berbasis peristiwa , artinya setiap kali peristiwa dipancarkan dari Discord, fungsionalitas yang dilampirkan ke peristiwa itu akan dipanggil.
Event pertama yang akan kita dengarkan adalah ready
event. Metode ini akan dijalankan ketika koneksi dengan Discord API sudah siap. Dalam metode ini, kita dapat meneruskan fungsi yang akan dieksekusi ketika koneksi dibuat antara Discord API dan aplikasi kita. Mari kita berikan pernyataan console.log
dalam metode ini, sehingga kita dapat mengetahui apakah koneksi telah dibuat. Metode client.on
dengan acara ready
akan terlihat seperti ini:
client.on('ready', () => { console.log('Bot is ready'); });
Tapi, ini tidak akan membuat koneksi dengan API karena kami belum masuk ke bot dengan server Discord. Untuk mengaktifkan ini, modul Discord.js menyediakan metode login
. Dengan menggunakan metode login
yang tersedia di klien dan meneruskan token dalam metode ini, kita dapat masuk ke aplikasi dengan server Discord.
client.login(process.env.BOT_TOKEN)
Jika Anda memulai aplikasi sekarang — dengan node app.js
atau, jika Anda menggunakan nodemon, maka dengan nodemon app.js
— Anda akan dapat melihat pesan konsol yang Anda tetapkan. Bot kami telah berhasil masuk dengan server Discord sekarang. Kita dapat mulai bereksperimen dengan beberapa fungsi.
Mari kita mulai dengan mendapatkan beberapa konten pesan tergantung pada kodenya.
Acara message
Acara message
mendengarkan beberapa pesan. Dengan menggunakan metode reply
, kita dapat memprogram bot untuk membalas sesuai dengan pesan pengguna.
client.on('message', (msg) => { if (msg.content === 'Hello') msg.reply('Hi'); });
Kode contoh ini akan membalas dengan "Hai" setiap kali pesan "Halo" diterima. Tetapi untuk membuatnya berfungsi, kita harus menghubungkan bot dengan server.
Menghubungkan Bot Dengan Server Perselisihan
Hingga saat ini, bot tidak terhubung dengan server mana pun. Untuk terhubung dengan server kami ( Contoh Smashing ), kunjungi portal pengembang Discord. Klik pada nama aplikasi yang kita buat sebelumnya dalam tutorial ini (dalam kasus kita, "Aplikasi Penghancur"). Pilih aplikasi, dan klik opsi "OAuth2" di menu. Anda akan menemukan grup bernama "Cakupan". Centang kotak "bot", dan salin URL yang dihasilkan.
Kunjungi URL ini di tab baru, pilih server Anda, dan klik "Otorisasi". Lengkapi Captcha, dan bot kita sekarang akan terhubung dengan server yang kita pilih.
Jika Anda mengunjungi server Discord sekarang, Anda akan melihat bahwa pemberitahuan telah dikirim oleh Discord, dan bot sekarang juga muncul di daftar anggota di sisi kanan.
Menambahkan Fungsionalitas ke Bot
Sekarang bot kami terhubung dengan server, jika Anda mengirim "Halo" ke server, bot akan membalas dengan "Hai". Ini hanyalah pengantar untuk Discord API. Kesenangan yang sebenarnya akan segera dimulai.
Untuk lebih mengenal modul Discord.js, mari tambahkan fungsionalitas yang mengirimkan lelucon setiap kali perintah tertentu diterima. Ini mirip dengan apa yang baru saja kita lakukan.
Menambahkan Fungsi Lelucon Acak Ke Bot
Untuk membuat bagian ini lebih jelas dan lebih mudah dipahami, kami tidak akan menggunakan API apa pun. Lelucon bahwa bot kami akan kembali akan menjadi array sederhana. Nomor acak akan dihasilkan setiap kali dalam rentang larik, dan lokasi spesifik larik itu akan diakses untuk mengembalikan lelucon.
Jika Anda pernah menggunakan fungsionalitas yang disediakan oleh bot di Discord, Anda mungkin telah memperhatikan bahwa beberapa karakter khusus membedakan pesan normal dari perintah khusus. Saya akan menggunakan ?
di depan perintah kami untuk membuatnya terlihat berbeda dari pesan biasa. Jadi, perintah lelucon kita adalah ?joke
.
Kami akan membuat array bernama jokes
di file app.js
kami. Cara kita mendapatkan lelucon acak dari array adalah dengan menggunakan rumus ini:
jokes[Math.floor(Math.random() * jokes.length)]
Rumus Math.random() * jokes.length
akan menghasilkan angka acak dalam rentang array. Metode Math.floor
akan menurunkan angka yang dihasilkan.
Jika Anda console.log()
this, Math.floor(Math.random() * jokes.length)
, Anda akan mendapatkan pemahaman yang lebih baik. Akhirnya, jokes[]
akan memberi kita lelucon acak dari rangkaian jokes
.
Anda mungkin telah memperhatikan bahwa kode pertama kami digunakan untuk membalas pesan kami. Tapi kami tidak ingin mendapat balasan di sini. Sebaliknya, kami ingin mendapatkan lelucon sebagai pesan, tanpa menandai siapa pun. Untuk ini, modul Discord.js memiliki metode bernama channel.send()
. Dengan menggunakan metode ini, kita dapat mengirim pesan ke saluran tempat perintah dipanggil. Jadi, kode lengkap hingga saat ini terlihat seperti ini:
const Discord = require('discord.js'); require('dotenv').config(); const client = new Discord.Client(); client.login(process.env.BOT_TOKEN); client.on('ready', () => console.log('The Bot is ready!')); // Adding jokes function // Jokes from dcslsoftware.com/20-one-liners-only-software-developers-understand/ // www.journaldev.com/240/my-25-favorite-programming-quotes-that-are-funny-too const jokes = [ 'I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane.', '“Debugging” is like being the detective in a crime drama where you are also the murderer.', 'The best thing about a Boolean is that even if you are wrong, you are only off by a bit.', 'A programmer puts two glasses on his bedside table before going to sleep. A full one, in case he gets thirsty, and an empty one, in case he doesn't.', 'If you listen to a UNIX shell, can you hear the C?', 'Why do Java programmers have to wear glasses? Because they don't C#.', 'What sits on your shoulder and says “Pieces of 7! Pieces of 7!”? A Parroty Error.', 'When Apple employees die, does their life HTML5 in front of their eyes?', 'Without requirements or design, programming is the art of adding bugs to an empty text file.', 'Before software can be reusable it first has to be usable.', 'The best method for accelerating a computer is the one that boosts it by 9.8 m/s2.', 'I think Microsoft named .Net so it wouldn't show up in a Unix directory listing.', 'There are two ways to write error-free programs; only the third one works.', ]; client.on('message', (msg) => { if (msg.content === '?joke') { msg.channel.send(jokes[Math.floor(Math.random() * jokes.length)]); } });
Saya telah menghapus bagian "Halo"/"Hai" dari kode karena itu tidak berguna lagi bagi kami.
Sekarang setelah Anda memiliki pemahaman dasar tentang modul Discord.js, mari kita masuk lebih dalam. Tetapi modul dapat melakukan lebih banyak lagi — misalnya, menambahkan peran ke seseorang atau melarangnya atau mengeluarkannya. Untuk saat ini, kita akan membangun sistem peran reaksi sederhana.
Membangun Sistem Peran-Reaksi
Setiap kali pengguna merespons dengan emoji khusus dalam pesan atau saluran tertentu, peran yang terkait dengan emoji itu akan diberikan kepada pengguna. Implementasinya akan sangat sederhana. Tetapi sebelum membangun sistem peran-reaksi ini, kita harus memahami parsial.
Sebagian
Parsial adalah konsep Discord.js. Discord.js biasanya menyimpan semua pesan dalam cache, yang berarti menyimpan pesan dalam koleksi. Saat pesan yang di-cache menerima beberapa peristiwa, seperti menerima pesan atau balasan, sebuah peristiwa dipancarkan. Tetapi pesan yang dikirim sebelum bot dimulai tidak di-cache. Jadi, bereaksi terhadap instance seperti itu tidak akan memancarkan peristiwa apa pun, kecuali jika kita mengambilnya sebelum kita menggunakannya. Versi 12 dari perpustakaan Discord.js memperkenalkan konsep parsial. Jika kita ingin menangkap kejadian yang tidak di-cache seperti itu, kita harus memilih untuk memilih sebagian. Perpustakaan memiliki lima jenis parsial:
-
USER
-
CHANNEL
-
GUILD_MEMBER
-
MESSAGE
-
REACTION
Dalam kasus kami, kami hanya membutuhkan tiga jenis parsial:
-
USER
, orang yang bereaksi; -
MESSAGE
, pesan yang sedang ditanggapi; -
REACTION
, reaksi yang diberikan oleh pengguna terhadap pesan tersebut.
Dokumentasi memiliki lebih banyak tentang parsial.
Pustaka Discord.js menyediakan cara yang sangat mudah untuk menggunakan parsial. Kita hanya perlu menambahkan satu baris kode, melewati objek di konstruktor Discord.Client()
. Konstruktor baru terlihat seperti ini:
const client = new Discord.Client({ partials: ['MESSAGE', 'REACTION', 'CHANNEL'], });
Membuat Peran Di Server Discord
Untuk mengaktifkan sistem peran reaksi, kita harus membuat beberapa peran. Role pertama yang akan kita buat adalah role bot . Untuk membuat peran, buka "Pengaturan Server":
Di pengaturan server, buka opsi "Peran", dan klik ikon plus kecil ( +
) di samping tempat tertulis "Peran".
Pertama, mari kita buat peran bot
, dan pastikan untuk mencentang opsi "Kelola Peran" di menu opsi peran. Setelah peran bot
dibuat, Anda dapat menambahkan beberapa peran lagi. Saya telah menambahkan peran js
, c++
, dan python
. Anda tidak harus memberi mereka kemampuan khusus, tetapi itu adalah pilihan.
Di sini, ingat satu hal: Peran Discord bekerja berdasarkan prioritas . Peran apa pun yang memiliki peran di bawahnya dapat mengelola peran di bawahnya, tetapi tidak dapat mengelola peran di atasnya. Kami ingin peran bot kami mengelola peran js
, c++
, dan python
. Jadi, pastikan role bot
berada di atas role lainnya. Cukup seret dan lepas untuk mengubah urutan peran di menu "Peran" di pengaturan server Anda.
Setelah Anda selesai membuat peran, tetapkan peran bot
ke bot . Untuk memberikan peran, klik nama bot di daftar anggota di sisi kanan server, lalu klik ikon plus kecil ( +
). Ini akan menunjukkan kepada Anda semua peran yang tersedia. Pilih peran "bot" di sini, dan Anda akan selesai.
Mengaktifkan Mode Pengembang di Discord
Peran yang kami buat tidak dapat digunakan dengan namanya dalam kode kami. Di Discord, mulai dari pesan hingga peran memiliki ID sendiri. Jika Anda mengklik indikator "lainnya" dalam pesan apa pun, Anda akan melihat opsi bernama "Salin ID". Opsi ini tersedia untuk semua yang ada di Discord, termasuk peran.
Kemungkinan besar, Anda tidak akan menemukan opsi ini secara default. Anda harus mengaktifkan opsi yang disebut "Mode Pengembang". Untuk mengaktifkannya, buka pengaturan Discord (bukan pengaturan server Anda), tepat di sebelah nama Anda di kiri bawah. Lalu buka opsi "Tampilan" di bawah "Pengaturan Aplikasi", dan aktifkan "Mode Pengembang" dari sini. Sekarang Anda dapat menyalin ID.
messageReactionAdd
dan messageReactionRemove
Peristiwa yang perlu dipancarkan ketika sebuah pesan direaksikan adalah messageReactionAdd
. Dan setiap kali reaksi dihapus, acara messageReactionRemove
harus dipancarkan.
Mari kita lanjutkan membangun sistem. Seperti yang saya katakan, pertama-tama kita perlu mendengarkan event messageReactionAdd
. Baik event messageReactionAdd
dan messageReactionRemove
mengambil dua parameter dalam fungsi panggilan baliknya. Parameter pertama adalah reaction
, dan yang kedua adalah user
. Ini cukup jelas.
Mengkode Fungsionalitas Peran-Reaksi
Pertama, kita akan membuat pesan yang menjelaskan emoji mana yang akan memberikan peran yang mana, seperti yang telah saya lakukan di sini:
Anda mungkin berpikir, bagaimana kita akan menggunakan emoji itu dalam kode kita? Emoji default adalah Unicode, dan kita harus menyalin versi Unicode. Jika Anda mengikuti sintaks \:emojiName:
dan tekan "Enter", Anda akan mendapatkan emoji dengan nama tersebut. Misalnya, emoji saya untuk peran JavaScript adalah rubah; jadi, jika saya mengetik \:fox:
dan tekan "Enter" di Discord, saya akan menerima emoji rubah. Demikian pula, saya akan menggunakan \:tiger:
dan \:snake:
untuk mendapatkan emoji itu. Simpan ini di pengaturan Discord Anda; kita akan membutuhkannya nanti.
Berikut adalah kode awal. Bagian kode ini hanya memeriksa beberapa kasus tepi. Setelah kita memahami kasus-kasus ini, kita akan menerapkan logika sistem peran-reaksi.
// Adding reaction-role function client.on('messageReactionAdd', async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot) return; if (!reaction.message.guild) return; });
Kami melewati fungsi asinkron. Dalam panggilan balik, hal pertama yang kita lakukan adalah memeriksa apakah pesan tersebut sebagian . Jika ya, maka kami mengambilnya, artinya menyimpan atau menyimpannya dalam metode peta JavaScript. Demikian pula, kami memeriksa apakah reaksi itu sendiri parsial dan kemudian melakukan hal yang sama. Kemudian, kami memeriksa apakah pengguna yang bereaksi adalah bot, karena kami tidak ingin menetapkan peran ke bot yang bereaksi terhadap pesan kami. Terakhir, kami memeriksa apakah pesan ada di server. Discord.js menggunakan guild
sebagai nama alternatif server. Jika pesan tidak ada di server, maka kami akan menghentikan fungsi tersebut.
Bot kami hanya akan menetapkan peran jika pesan ada di saluran roles
. Jika Anda mengklik kanan pada saluran roles
, Anda akan melihat opsi "Salin ID". Salin ID dan ikuti.
if (reaction.message.channel.id == '802209416685944862') { if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208163776167977'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208242696192040'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208314766524526'); } } else return;
Di atas adalah sisa kode dalam panggilan balik. Kami menggunakan properti reaction.message.channel.id
untuk mendapatkan ID saluran. Kemudian, kami membandingkannya dengan ID saluran peran yang baru saja kami salin. Jika itu benar, maka kami memeriksa emoji dan membandingkannya dengan reaksi. Reaction.emoji.name mengembalikan emoji yang digunakan untuk reaction.emoji.name
. Kami membandingkannya dengan emoji versi Unicode kami. Jika cocok, maka kami menunggu properti reaction.message.guild.members.cache
.
Cache adalah kumpulan yang menyimpan data . Koleksi ini adalah Map
JavaScript dengan utilitas tambahan. Salah satu utilitas yang disediakannya adalah metode get
. Untuk mendapatkan apa pun dengan ID, kita cukup memasukkan ID dalam metode ini. Jadi, kami melewati user.id
dalam metode get
untuk mendapatkan pengguna. Terakhir, metode roles.add
menambahkan peran ke pengguna. Dalam metode roles.add
, kami meneruskan ID peran. Anda dapat menemukan ID peran di opsi "Peran" pengaturan server Anda. Mengklik kanan pada peran akan memberi Anda opsi untuk menyalin ID peran. Dan kami selesai menambahkan sistem peran reaksi ke bot kami!
Kami dapat menambahkan fungsionalitas untuk peran yang akan dihapus saat pengguna menghapus reaksi mereka dari pesan. Ini persis sama dengan kode kita di atas, satu-satunya perbedaan adalah kita mendengarkan event messageReactionRemove
dan menggunakan metode roles.remove
. Jadi, kode lengkap untuk menambahkan dan menghapus peran akan seperti ini:
// Adding reaction-role function client.on('messageReactionAdd', async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot) return; if (!reaction.message.guild) return; if (reaction.message.channel.id == '802209416685944862') { if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208163776167977'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208242696192040'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.add('802208314766524526'); } } else return; }); // Removing reaction roles client.on('messageReactionRemove', async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot) return; if (!reaction.message.guild) return; if (reaction.message.channel.id == '802209416685944862') { if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.remove('802208163776167977'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.remove('802208242696192040'); } if (reaction.emoji.name === '') { await reaction.message.guild.members.cache .get(user.id) .roles.remove('802208314766524526'); } } else return; });
Menambahkan Fungsi Penerusan Twitter
Fungsi selanjutnya yang akan kita tambahkan ke bot kita akan sedikit lebih menantang. Kami ingin fokus pada akun Twitter tertentu, sehingga setiap kali akun Twitter memposting tweet, itu akan diteruskan ke saluran Discord kami .
Sebelum mulai membuat kode, kita harus mendapatkan token yang diperlukan dari portal pengembang Twitter. Kunjungi portal dan buat aplikasi baru dengan mengklik tombol "Buat Aplikasi" di opsi "Ikhtisar". Beri nama aplikasi Anda, salin semua token, dan tempel di file .env
kode Anda, dengan nama yang sesuai. Kemudian klik "Pengaturan Aplikasi", dan aktifkan fitur OAuth berkaki tiga. Tambahkan URL di bawah ini sebagai URL panggilan balik untuk tujuan pengujian:
https://127.0.0.1/ https://localhost/
Jika Anda memiliki situs web, tambahkan alamat ke URL situs web dan klik "Simpan". Buka tab "Kunci dan Token", dan buat kunci akses dan token. Salin dan simpan di file .env
Anda. Pekerjaan kami dengan portal pengembang Twitter selesai. Kita dapat kembali ke editor teks untuk melanjutkan pengkodean bot. Untuk mencapai fungsionalitas yang kita inginkan, kita harus menambahkan paket npm lain bernama twit
. Ini adalah klien API Twitter untuk Node.js. Ini mendukung REST dan streaming API.
Pertama, instal paket twit menggunakan npm install twit
, dan minta di file utama Anda:
const Twit = require('twit');
Kita harus membuat instance twit menggunakan konstruktor Twit
. Masukkan objek di konstruktor Twit
dengan semua token yang kami dapatkan dari Twitter:
const T = new Twit({ consumer_key: process.env.API_TOKEN, consumer_secret: process.env.API_SECRET, access_token: process.env.ACCESS_KEY, access_token_secret: process.env.ACCESS_SECRET, bearer_token: process.env.BEARER_TOKEN, timeout_ms: 60 * 1000, });
Batas waktu juga ditentukan di sini. Kami ingin semua penyerang berada di saluran tertentu. Saya telah membuat saluran terpisah yang disebut "Twitter forwards", di mana semua tweet akan diteruskan. Saya sudah menjelaskan bagaimana Anda dapat membuat saluran. Buat saluran Anda sendiri dan salin ID.
// Destination Channel Twitter Forwards const dest = '803285069715865601';
Sekarang kita harus membuat aliran. API aliran memungkinkan akses ke aliran data melalui jaringan. Data dipecah menjadi potongan-potongan yang lebih kecil, dan kemudian ditransmisikan. Berikut adalah kode kami untuk mengalirkan data:
// Create a stream to follow tweets const stream = T.stream('statuses/filter', { follow: '32771325', // @Stupidcounter });
Di kunci follow
, saya menentukan @Stupidcounter
karena tweet setiap menit, yang bagus untuk tujuan pengujian kami. Anda dapat memberikan ID pegangan Twitter apa pun untuk mendapatkan tweetnya. TweeterID akan memberi Anda ID pegangan apa pun. Terakhir, gunakan metode stream.on
untuk mendapatkan data dan mengalirkannya ke saluran yang diinginkan.
stream.on('tweet', (tweet) => { const twitterMessage = `Read the latest tweet by ${tweet.user.name} (@${tweet.user.screen_name}) here: https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`; client.channels.cache.get(dest).send(twitterMessage); return; });
Kami mendengarkan acara tweet
dan, kapan pun itu terjadi, meneruskan tweet ke fungsi panggilan balik. Kami akan membuat pesan khusus; dalam kasus kami, pesannya adalah:
Read the latest tweet by The Count (@Stupidcounter) here: https://twitter.com/Stupidcounter/status/1353949542346084353
Sekali lagi, kami menggunakan metode client.channels.cache.get
untuk mendapatkan saluran yang diinginkan dan metode .send
untuk mengirim pesan kami. Sekarang, jalankan bot Anda dan tunggu sebentar. Pesan Twitter akan dikirim ke server.
Nah, berikut kode penerusan Twitter lengkapnya:
// Adding Twitter forward function const Twit = require('twit'); const T = new Twit({ consumer_key: process.env.API_TOKEN, consumer_secret: process.env.API_SECRET, access_token: process.env.ACCESS_KEY, access_token_secret: process.env.ACCESS_SECRET, bearer_token: process.env.BEARER_TOKEN, timeout_ms: 60 * 1000, }); // Destination channel Twitter forwards const dest = '803285069715865601'; // Create a stream to follow tweets const stream = T.stream('statuses/filter', { follow: '32771325', // @Stupidcounter }); stream.on('tweet', (tweet) => { const twitterMessage = `Read the latest tweet by ${tweet.user.name} (@${tweet.user.screen_name}) here: https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`; client.channels.cache.get(dest).send(twitterMessage); return; });
Semua fungsi yang ingin kita tambahkan sudah selesai. Satu-satunya yang tersisa sekarang adalah menyebarkannya ke cloud. Kami akan menggunakan Heroku untuk itu.
Menyebarkan Bot Ke Heroku
Pertama, buat file baru di direktori root folder kode bot Anda. Beri nama Procfile
. Procfile
ini akan berisi perintah-perintah yang akan dijalankan saat program dijalankan. Di dalam file, kami akan menambahkan worker: node app.js
, yang akan memberi tahu Heroku tentang file mana yang akan dijalankan saat startup.
Setelah menambahkan file, mari kita mulai repositori git
, dan masukkan kode kita ke GitHub (cara melakukannya berada di luar cakupan artikel ini). Satu hal yang saya sarankan adalah menambahkan folder node_modules
dan file .env
ke file .gitignore
, sehingga ukuran paket Anda tetap kecil dan informasi sensitif tidak dibagikan ke luar.
Setelah Anda berhasil memasukkan semua kode Anda ke GitHub, kunjungi situs web Heroku. Masuk, atau buat akun jika Anda belum memilikinya. Klik tombol "Baru" untuk membuat aplikasi baru, dan beri nama sesuai keinginan. Pilih "Metode Penerapan" sebagai GitHub.
Cari aplikasi Anda, dan klik sambungkan setelah Anda menemukannya. Aktifkan penerapan otomatis dari menu “Deploy”, sehingga setiap kali Anda mendorong perubahan pada kode, kode tersebut akan di-deploy secara otomatis ke Heroku.
Sekarang, kita harus menambahkan variabel konfigurasi ke Heroku, yang sangat mudah. Buka opsi "Pengaturan", di bawah nama aplikasi Anda, dan klik "Reveal Config Vars".
Di sini, kami telah menambahkan variabel konfigurasi sebagai pasangan nilai kunci. Setelah selesai, buka tab "Deploy" lagi, dan klik "Deploy Branch" di bawah "Manual Deploy".
Hal terakhir yang perlu dipertimbangkan adalah Anda mungkin mengalami crash kesalahan 60 detik yang menghentikan eksekusi bot. Untuk mencegah hal ini terjadi, kita harus mengubah jenis pekerja aplikasi. Di Heroku, jika Anda membuka tab “Resources” pada aplikasi Anda, Anda akan melihat bahwa, di bawah “Free Dynos”, web npm start
diaktifkan. Kita harus mematikannya dan mengaktifkan worker node app.js
. Jadi, klik tombol edit di sebelah tombol web npm start
, matikan, dan aktifkan opsi worker node app.js
. Konfirmasikan perubahan. Mulai ulang semua dyno Anda, dan selesai!
Kesimpulan
Saya harap Anda menikmati membaca artikel ini. Saya mencoba untuk mencakup semua dasar-dasar yang perlu Anda pahami dalam mengembangkan bot yang rumit. Dokumentasi Discord.js adalah tempat yang tepat untuk mempelajari lebih lanjut. Ini memiliki penjelasan yang bagus. Juga, Anda akan menemukan semua kode di repositori GitHub. Dan berikut adalah beberapa sumber yang akan membantu dalam pengembangan Anda lebih lanjut:
- Dokumentasi, Portal Pengembang Perselisihan
- Discord API (Server Perselisihan)
- Parsial, Discord.js, GitHub
- Portal Pengembang, Twitter
- Twit, paket, dan dokumentasi