Discord.js | Basit Seviye Sistemi (Global)

Katılım
1 Mar 2020
Konular
8
Mesajlar
34
Tepki puanı
54
Puanları
2,560
Selam dostlar.
Bu konumda sizlere Discord.js ile
yapılabilecek en basit seviye sistemini
göstereceğim.

Global dememin sebebi, sunucuya özel değildir.
Şöyle örnek vereyim;
Botumuzun ismi OyuncularSehri.com olsun.
Bu bot A ve B sunucusunda bulunsun.
Eğer A sunucusunda 30 seviye olursanız
aynı şekilde B sunucusunda da 30 seviye olmuş oluyorsunuz.
Bu sistemin gelişmiş versiyonu en yakın zamanda
paylaşılacaktır.

cizgi2.png


Ana Kod

Botun ana .js dosyasına atılacak
kodumuzu yorum satırları ile
inceleyelim.
(bot.js || server.js || main.js
siz nasıl yazdıysanız artık.)

JavaScript:
bot.on("message", async message => { // Her mesaj atıldığında tetiklenen message eventi.

  if(message.author.bot) return; // Mesaj sahibi bir BOT ise çalışmayacaktır.
  if(message.channel.type === "dm") return; // Mesaj DM'dan geliyorsa çalışmayacaktır.

  let xpekle = Math.floor(Math.random() * 7) + 8; // Math.random() fonksiyonundan `Discord.js | Ready Eventi & Değişen Aktivite` adlı konumda bahsetmiştim. :)

  if(!xp[message.author.id]){ // Hiç XP'si yoksa levelinin 1 olacağını söyledik.
    xp[message.author.id] = {
      xp: 0,
      level: 1
    };
  }

  let suankixp = xp[message.author.id].xp; // Kullanıcının güncel xp'sini tanımladık.
  let suankiseviye = xp[message.author.id].level; // Kullanıcının güncel seviyesini tanımladık.
  let sonrakiseviye = xp[message.author.id].level * 300;
  xp[message.author.id].xp =  suankixp + xpekle; // Yukarıda tanımladığımız xpekle fonksiyonu ile kullanıcının güncel xp'sine xp ekledik.
  if(sonrakiseviye <= xp[message.author.id].xp){
    xp[message.author.id].level = suankiseviye + 1; // Yukarıda belirttiğimiz gibi 300 xpye ulaşınca seviye atlayacağını belirttik.
    let seviyeatladi = new Discord.RichEmbed()  // Seviye atladığı zaman gönderilecek mesaj için Embed mesaj kullanıyoruz.
    .setTitle("Seviye Atladı!" + ` ${message.member.user.username}`)
    .setColor("RANDOM")
    .addField("Yeni seviyen:", suankiseviye + 1);

    var seviyekanali = "689217482744922128" // Seviye mesajlarının gönderileceği kanalın ID'si. (Bir sonraki seviye sisteminin konusunda bu kanalı veritabanı kullanarak atayacağız.)
    if(!seviyekanali) return;
 
    bot.channels.get(seviyekanali).send(seviyeatladi);
  }

  fs.writeFile("./xp.json", JSON.stringify(xp), (err) => { // FS ile xp.json dosyasına kullanıcılarımızın verilerini kaydediyoruz.
    if(err) console.log(err)
  });
})

Seviyeyi Öğrenme Komutu

Kullanıcılar en doğal haklarını kullanarak
anlık olarak seviyelerini öğrenmek isteyeceklerdir.
Hemen komutumuzu yorum satırları ile inceleyelim.

JavaScript:
const Discord = require("discord.js"); // Discord.js'yi tanımladık.
let xp = require("../xp.json"); // xp.json dosyasına ihtiyacımız olduğu için tanımladık.

module.exports.run = async (bot, message, args) => {

  if(!xp[message.author.id]){
   xp[message.author.id] = {
     xp: 0,
     level: 1
  };
}
  let suankixp = xp[message.author.id].xp;
  let suankiseviye = xp[message.author.id].level;
  let birsonrakiSeviyeXp = suankiseviye * 300; // Bir sonraki seviyenin xp'sini hesaplamamız için gereken tanımlmama.
  let fark = birsonrakiSeviyeXp - suankixp; // Seviye atlamak için kaç xp kaldığını hesapladık.

  let seviyemesaji = new Discord.RichEmbed() // Güzel gözükmesi için embed mesaj kullandık.
  .setAuthor(message.author.username)
  .setColor("RANDOM")
  .addField("Seviye", suankiseviye, true)
  .addField("XP", suankixp, true)
  .setFooter(`${fark} XP sonra seviye atlayacaksın.`, message.author.displayAvatarURL);

  message.channel.send(seviyemesaji); // Komutu kullanılan kanala gönderdik.

}

module.exports.help = {
  name: "seviye" // Prefiximiz ile birlikte kullanılacak komutumuz. (örn: os!seviye) Tercihe göre değiştirebilir.
}

QiNYax.png


cizgi1.png


Bu konuluk benden bu kadar dostlar.
Konularımı takip etmeyi unutmayın.

İyi Forumlar!​
 
Son düzenleme:
Katılım
15 Nis 2020
Konular
0
Mesajlar
1
Tepki puanı
1
Puanları
0
güzel bir paylaşım forumda efsane başarılarının devamını dilerim
 
  • Beğen
Tepkiler: Taurus
Katılım
23 Mar 2020
Konular
0
Mesajlar
6
Tepki puanı
4
Puanları
0
Bilgilerin için teşekkürler.Çok yardımcı oldu.
 
  • Beğen
Tepkiler: Taurus
Katılım
17 Tem 2020
Konular
1
Mesajlar
2
Tepki puanı
1
Puanları
0
xp.json a hangi kodu atacağız? çünkü xp.json'u halen tanımlayamadım, iyi forumlar.
 
Katılım
1 Eki 2020
Konular
0
Mesajlar
1
Tepki puanı
1
Puanları
0
Kodu bot.js'ye attığım anda error verdi lütfen yardımcı olun!
 
  • Beğen
Tepkiler: Atlantis
Katılım
16 Mar 2021
Konular
0
Mesajlar
5
Tepki puanı
0
Puanları
355
Merhaba Böyle Bir Hata Verdi

Hata:

C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:46
props.conf.aliases.forEach(alias => {
^

TypeError: Cannot read property 'aliases' of undefined
at C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:46:20
at Array.forEach (<anonymous>)
at C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:42:11
at FSReqCallback.oncomplete (fs.js:171:23)
 
Katılım
10 Kas 2019
Konular
225
Mesajlar
1,057
Çözümler
19
Tepki puanı
1,048
Puanları
8,710
Merhaba Böyle Bir Hata Verdi

Hata:

C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:46
props.conf.aliases.forEach(alias => {
^

TypeError: Cannot read property 'aliases' of undefined
at C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:46:20
at Array.forEach (<anonymous>)
at C:\Users\Muhammet Dark\Desktop\Botlar\Ana\index.js:42:11
at FSReqCallback.oncomplete (fs.js:171:23)
Bu kodlamanın sürümü v11 ve sizin botunuz da v12 olduğu için hata alıyorsunuz.