Mucahid Yazar
mucahid.dev

Follow

mucahid.dev

Follow
Building A Discord Bot with Node.js by Using discord.js

Building A Discord Bot with Node.js by Using discord.js

Mucahid Yazar's photo
Mucahid Yazar
·Mar 26, 2021·

5 min read

Bu yazımızda Node.js ile Discord.js kütüphanesini kullanarak, Disrcord kanallarımız için bir bot yazacağız.

How to Create a Discord Bot Account

  • İlk önce Discord.js kütüphanesinin kullanacağı bir Discord uygulaması oluşturmamız gerekiyor. Bunun için aşağıda ki adımları izleyeceğiz.

1. Discord.com’dan üyelik oluşturup giriş yapıyoruz.

2. Application page sayfasına gidiyoruz.

3. “New Application” buttonuna tıklıyoruz.

4. Oluşturacağımzı uygulamanın adını belirliyoruz.

5. “Bot” tabına gidiyoruz ve “Add Bot” yapıyoruz. “Yes, do it!” yaparak, oluşturma isteğimizi onaylıyoruz.

6. Uygulama ayarlarını ki Public Bot (checked) and Require OAuth2 Code Grant (unchecked) şeklinde ayarlıyoruz.

7. Botumuz artık oluşturuldu. Şimdi tokenımızı kopyalıyoruz.

Bu token bizim botumuzun şifresi gibi düşünebilirsiniz. Githubda veya herhangi bir public ortamda paylaşmayın. Yanlışlıkla paylaştıysanız da “Regenerate” yaparak tokenınızı yeniden oluşturun.

How to Invite Your Bot to Join a Server

  • Botumuzu şimdi bir kanala katmamız gerekiyor. Bunun için invite linki oluşturmamız gerekiyor.
  • OAuth2 sekmesine giderek bot’u işaretliyoruz.

  • Ve sahip olmasını istediğimiz izinleri burada ayarlıyoruz.

  • Ve daha sonra url’i kopyalayarak browserımıza yapıştırıyoruz ve gelen sayfada botumuzu eklemek istediğimiz kanalı, serverı seçerek “Authorize” yap diyoruz.
  • Ve botumuzu serverımıza eklediğimize göre artık Node.js kodlarımızı yazabiliriz.

How to Code a Basic Discord Bot with the Node.js

Bunun için discord.js librarysini kullanacağız. Bilgisayarımızda Node.js kurulu olmalı bunun için. discord.js API wrapper Discord için ve bir Discord botu oluşturmayı çok basit bir hale getiriyor Node.js için.

  • discord-bot adında bir klasör oluşturup daha sonra aşağıda ki komut için projemini initialize ediyoruz.

npm init -y

  • Daha sonra kullanacağımız libraryleri yüklüyoruz.

npm install discord.js dotenv nodemon

  • Daha sonra index.js adında bir dosya oluşturuyoruz root dizinimizde. Kodlarımız bu dosya içinde yazılacak. Ve package.json içinde scripts oluşturup index.js dosyamızı nodemon ile çalıştırıyoruz.

  • Ana dizinde .env adında bir dosya oluşturup, içine TOKEN=xxx diyerek tokenımızı tanımlıyoruz. xxx yerinde aşağıda ki ekrandan copy yaparak alacağınız tokenı yazıyorsunuz. Bunu yukarıda zaten göstermiştim.

  • Ve index.js içine gelip aşağıda ki kodları ekliyerek Discord botumuzu en basit şekilde proğramlamış oluyoruz.

  • discord.js’i ilk önce import ederek projeye dahil ediyoruz.

  • daha sonra Discord ile yeni bir Discort Client oluşturuyoruz.
  • client.on bir soket gibi çalışıyor aslında.
  • daha sonra client.on diyerek “ready”’i dinliyoruz. Bu botumuzun hazır olduğu anlamına gelir. Botumuz hazır olduysa node.js terminalde bir mesaj yazdırsın istiyoruz. Aşağıda ki gibi.

  • client.on diyerek “message” eventini dinliyoruz. Bu event discordda, botu eklediğimiz server yani kanalda mesaj atıldığında tetiklenir. Ve ikinci argument bir callback dönüyor bize ve içerisinde de bir obje dönderiyor. Bu objenin content’ine bakarak mesajda yazan yazıyı elde ediyoruz. Yukarıda ki örnekte de bu yazıya bakarak “ping” yazıldığında msg.reply yaparak botun discord kanalında mesajın yazıldığı yere mesaj “pong” mesajı göndermesini sağlar.

How to Improve the Bot

Botumuzu daha fazla geliştirmek istiyoruz. Gelin aşağıda ki özellikleri ekleyelim.

  1. Teşvik edici mesajlar
  2. İlham cümleleri
  3. Küfür edenlere karşı uyarı mesajları veya Küfüre küfür
  4. Emojiye göre rol seçimi yaptırmak (En zevklisi bu bence)

Teşvik edici mesajlar

Depresif mesajlar atan kişilere botumuz, teşvik edici, gaza getiren mesajlar atsın. Mesela birisi sad derse, botumuz ona “Hang in there.”, “Cheer up!” gibi teşvik edici güzel mesajlar gönderecek.

İlham cümleleri

  • Şimdi ise “$inspire” yazıldığın da botumuz bize bir API’dan aldığı ilham verici sözler paylaşacak.
  • getQuote adında bir fonsiyon tanımlıyorum ve buradan API’dan aldığım sözü return ile dönüyorum. Daha sonra msg.content’i, $inspire olan mesajı check ediyorum. Eğer öyleyse API’dan aldığım sözü kanala gönderiyorum.

Küfür edenlere karşı uyarı mesajları veya Küfüre küfür :)

  • Bunun içni bir başka node.js package’i olan bad-words adlı modulü, aşağıda ki kodla yüklememiz gerekiyor.

npm install bad-words

  • Daha sonra projeye dahil edip aşağıdaki örnekteki gibi new Filter oluşturuyoruz.
  • sonra oluşturduğumuz new Filterı atadığımız değişkenin .isProfane methodu ile mesaj içeriğinde kötü bir söz var mı yok mu denetliyoruz. Ve varsa .isProfane bize true döneceği için uyarıcı mesajlarımızdan birisini gönderiyoruz. Veya küfüre küfürle karşılık verecek mesajlarda gönderebilirsiniz. :)

Building A Reaction-Role System

Evet bu benim en sevdiğim özellik eklemelerinden birisi. Kanalda olan bir mesaja verdiğin emojilere göre, emoji gönderen kişiye rol ataması yapacağız. Mesela 🧝‍♂️ bu emojiyi bir mesaja beğeni gibi gönderen bir kişinin rolünü ELF, 🔥 bunu atanı ORK ve 👨 bunu atanıda HUMAN rolünü ekleyeceğiz.

PARTIALS

Partial bir Discord konseptidir. Discord.js genellikle mesajları catchde tutar yani bir nevi kısa süreli hafızada saklar. Bir event emit olduğunda yani tetiklendiğinde, cache mesajı bazı eventler alabilir, bir mesaj almak veya bir cevap almak eventi gibi. Fakat servera eklediğimiz bot çalışmadan önce ki mesajlar cachelenmez. Bu yüzden bunları önce yakalamazsak eğer herhangi bir event, emited olmayacak yani tetiklenmeyecekdir. Bu yüzden Discord.js Version 12 de bize Partialsları tanıttı. Eğer cachlenmemiş mesajlarda event emit etmek istiyorsak bu partialsları projemize dahil etmeliyiz. Bu librarymizin 5 type Partialı vardır. Bunlar:

USER - CHANNEL - GUILD_MEMBER - MESSAGE - REACTION

Fakat bizim burada yapacağımız iş için 3 tanesine ihtiyacımız vardır.

USER, reactionda bulunan kişi;
MESSAGE, reaction gönderilen mesaj;
REACTION, kullanıcının mesaja verdiği reaction.

The documentation has more about partials.

Partialsları discord.js librarysi sağolsun çok basit bir şekilde aşağıda ki gibi projemize dahil edebiliriz.

Ve şimdide Discord serverımızda rollerimizi oluşturmak için, serverımızın ayarlarına gidiyoruz.

Daha sonra aşağıda ki butona basarak 3 tane Rol oluşturuyoruz. Ben ELF, HUMAN ve ORK olarak 3 tane rol oluşturdum.

Burada dikkat! Server yani kanal ayarına değil, Discord ayarlarına giderek “Appearance” > “App Settings” > “Developer Mode” kısmından Developer Mode’u aktif ediyoruz. Ve artık mesajların veya kanalların ID’lerini aşağıda ki gibi, sağ tıklayarak veya yanında ki (…) işaretine basarak kopyalayabileceğiz.

  • Kodlar çok uzadığı için yukarıda ki diğer kısımları çıkarttım fakat en sonunda tüm kodların olduğu final sürümü de sizlerle paylaşacağım.
  • Burada async fonksıyonlar kullanacağız çünkü önce yukarıdaki parçaların çalışıp kontrolleri yapmasını istiyoruz. Mesela partials olup olmadıklarını kontrol edip ondan sonra ona göre hareket etmelerini sağlamak gibi.
  • Mesajlara gönderilen emojileri dinlemek için messageReactionAdd ve messageReactionRemove eventlerini dinlememiz gerekiyor.
  • reaction.message.partial ile reaction bırakılmış mesajın partial olup olmadığı kontrol edilir. Eğer partial ise yani bot çalışmadan önce atılmış bir reaction ise reaction.message’yi fetch yapar.
  • Aynı şekilde reaction.partial ilede gönderilmiş reactionun partial olup olmadığı denetlenir.
  • Daha sonra “messageReactionAdd” eventini tetikleyen bot ise çalışma return yap deriz.
  • Ve daha sonra channel’a sağ tıklayarak aldığımız id’yi burada kullanırız ve burada bir Channela göre kontrol sağlarız. Mesela “Rol Seçimi” diye bir kanal oluşturup bu olayın sadece orada çalışmasını bu şekilde sağlayabiliriz.
  • Daha sonra “reaction.emoji.name” ile gönderilen reactionu sorgulayıp ona göre role ekleriz.

Sizlerle paylaşacaklarım bu kadar. Bu yazım da resimleri ve bazı bilgileri aşağı da ki 2 makaleden aldım. Bunlarada ayrıca bakabilirsiniz. Bundan sonrası sizlerin Javascript ve Documentation inceleme yeteneğinize kalmış. Umarım faydalı olmuştur.

https://www.smashingmagazine.com/2021/02/building-discord-bot-discordjs/

https://www.freecodecamp.org/news/create-a-discord-bot-with-javascript-nodejs/

Ve son olarak final code.

 
Share this