- 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.
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.)
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.
Bu konuluk benden bu kadar dostlar.
Konularımı takip etmeyi unutmayın.
İyi Forumlar!
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.
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.
}
Bu konuluk benden bu kadar dostlar.
Konularımı takip etmeyi unutmayın.
İyi Forumlar!
Son düzenleme: