Rehber Discord.js V12 için kelime oyunu

Akif9748

Kilopat
Katılım
19 Ocak 2020
Mesajlar
4.227
Makaleler
14
Çözümler
55
Yardımlarından ötürü @EKAloji hocama çok fazla teşekkürler.
@krejwd sıkılmıştı, word diye bir bot vardı çalışmıyor şuan, dedi. Ondan yapmamı istedi. Ben de geveze olduğum için yazmaya başladım.

Nasıl bir şey?
Kelime oyunu. Öncekinin son harfi ile sizin ilk harfiniz aynı olacak. Tabii kolaya kaçıp rastgele kelime yazma hakkınız yok.
Bir ekran görüntüsü:
1624479818149.png

Gördüğünüz üzere yazılan doğru kelimeleri de yazıyor. Oyun yanlış harf ile başlanıldığı için bitti.
Ama söylenen kelime bir daha söylenmeyecek diye bir şey yok çünkü sevmiyorum onu. Eklemek zor değil.
Kodu sadece vereceğim, bu kez açıklamalarını kodun üstüne yorum olarak yazdım:
JavaScript:
const Discord = require('discord.js'); //Biliyorsunuz anlatmaya gerek yok.
var db = require('quick.db') //Dosyaya yazma için quick.db
var kelime = require('rastgelekelime'); //İlk kelime için EKA hocamın modülü
const fetch = require('node-fetch'); //TDKdan veri çekmek için fetch.
const prefix = "!" //Normal prefixiniz işte, kod hata vermesin diye var. Eğer zaten tanımlıysa yazmaya gerek yok.
const prefic = "!!" //Botun kelime oyunu prefixi, diğer mesajlara bakmaması için


client.on("message", async message => {
  if (message.author.bot) return;  //Bot ise dur
      if(message.channel.type === 'dm') return; //DM ise dur

    if (message.content.startsWith(prefix + "kelime")) { //yeni oyun
    const word = kelime() //EKAlojinin modülünden bir kelime.
    message.channel.send("Oyun başladı\n\n" + word) //kelimeyi yazar
    const ilkharf = word.split("")[word.split("").length - 1] //son harfi alır
    db.set(`sonharf_${message.guild.id}`, ilkharf) //son harfi not alır.
  }


  if (message.content.startsWith(prefic)) { //eğer belirlenen prefixle ile başlarsa (her mesajı almasın diye)
    if (!db.fetch(`sonharf_${message.guild.id}`)) return message.react("⛔")   //Eğer oyun başlamamışsa başlamaz.

    var nkelime = message.content.replace(prefic, "").toLowerCase() //Mesajdaki kelimeyi çok gerekeceği için tanımladık. Tanımlarken

    if (nkelime.split("")[0] === db.fetch(`sonharf_${message.guild.id}`)) { //aldığımız notla yazdığınız kelimenin son harfi uyuyorsa
      const arama = await fetch("https://sozluk.gov.tr/gts?ara=" + encodeURI(nkelime)) //EncodeURI kelimeyi uygun hale getiriyor
      const veri = await arama.json(); //tdk sitesinden veri alır.
      if (veri.error) {
        message.react("⛔")
        message.reply("Kelime yok. Son harf şuydu, hatırlatayım : " + db.fetch(`sonharf_${message.guild.id}`))
        return
      } //eğer öyle bir kelime yoksa sitede durur. Ama oyun bitmez, yanlış yazmış olabilirsin.
 
      message.react("🆗") //Doğru ise emoji atar
      const conten = nkelime.split("")[nkelime.split("").length - 1] //son harfi tekrar aldı
     db.set(`sonharf_${message.guild.id}`, conten) //son harfi tekrar not aldı
     db.add(`kelimesayac_${message.guild.id}`, 1) //kelime sayacına bir tane ekledi
    } else {
      message.react("⛔")   //yanlışsa yazıyor
      message.reply("Yanlış! Oyun bitti. Şu ana kadar yazılan doğru kelime : " +   db.fetch(`kelimesayac_${message.guild.id}`))  //Oyun bitince bildirir ve, doğru kelimeleri yazar. Yanlışlar da yazdırılabilir ama gereksiz :evilol:
      db.delete(`sonharf_${message.guild.id}`) //Yukarıda oyun başlamamışsa koşulunu sağlamak için DB'den siliyoruz.
      db.delete(`kelimesayac_${message.guild.id}`) //Sayacı da sıfırlar. Ve oyunu bitiriyor, !!kelimeadı yazınca çalışmayacak.
      return;
    }
  }
 
});
Konuyu açarken ufak hataları da buldum. (encodeURİ gibi) Varsa siz de açıklayın.
 
Son düzenleyen: Moderatör:
Eskiden bu işler için çok uğraşırdım, ah ne eski günlerdi be! Mongoose, MongoDB veri tabanı ile kod yazardık!

Her neyse ellerinize sağlık!
 
DB olarak bir işiniz yok aslında sadece cache olarak kullanmışsınız redis kullanırsanız hem daha mantıklı olur hem hız konusunda da yarar sağlar.
 

Yeni konular

Geri
Yukarı