Altyapı Rank Botu

!Edip#0170
Katılım
1 Eyl 2021
Mesajlar
170
Tepkime puanı
106
Şehir
İzmir
Selam. 2 Dosyadan oluşan bir rank botudur. Açıklamalar mevcut (neyin ne olduğunu bilmek lazım)

ilk olarak man dosyası oluşturun.
main dosyasına sadece alttaki kodları yapıştırın.
JavaScript:
const Discord = require("discord.js");
const client = new Discord.Client();
const config = require("./config.json");
const Enmap = require("enmap")
const canvacord = require("canvacord")
client.points = new Enmap({ name: "points" });
client.on("ready", ()=>console.log("Bot Aktif"));
const leveling = require("./ranking");
leveling(client);
client.login(config.TOKEN);

ardından bir ranking.js dosyası oluşturun ve alttaki kodları olduğu gibi yapıştırın.
JavaScript:
const config = require("./config.json");
const canvacord = require("canvacord");
const Discord = require("discord.js");

module.exports = function (client) {

  //katılma/ayrılma kanallarını kontrol etmek için ses durumu güncelleme olayı
  client.on("message", async (message) => {

    if (message.author.bot) return;
    if (!message.guild) return;
    if (message.channel.type === `dm`) return;
    //////////////////////////////////////////
    /////////////SIRALAMA SİSTEMİ///////////////
    //////////////////////////////////////////
    //sunucu için kullanıcının anahtarını al
    const key = `${message.guild.id}-${message.author.id}`;
    // veri tabanını oluşturma
    client.points.ensure(`${message.guild.id}-${message.author.id}`, {
      user: message.author.id,
      guild: message.guild.id,
      points: 0,
      level: 1
    });
    //mesaj uzunluğu oluşturun, çok uzun mesajlar için çok fazla xp olmaması için filtrele
    var msgl = message.content.length / (Math.floor(Math.random() * (message.content.length - message.content.length / 100 + 1) + 10));
    //mesaj çok kısaysa
    if (msgl < 10) {
      //0 ile 2 arasında rastgele bir sayı alın
      var randomnum = Math.floor((Math.random() * 2) * 100) / 100
      //temelde tekrar veri tabanı oluşturma
      client.points.math(key, `+`, randomnum, `points`)
      client.points.inc(key, `points`);
    }
    //çok kısa değilse yap
    else {
      // rastgele bir sayı olsun, ancak mesaj uzunluğuna bağlı olacak
      var randomnum = 1 + Math.floor(msgl * 100) / 100
      //temelde tekrar veri tabanı oluşturma
      client.points.math(key, `+`, randomnum, `points`)
      client.points.inc(key, `points`);
    }
    //mevcut seviyeyi al
    const curLevel = Math.floor(0.1 * Math.sqrt(client.points.get(key, `points`)));
    //eğer yeni bir seviyeyse bunu yap
    if (client.points.get(key, `level`) < curLevel) {
      //sıralı yerleştirmeyi tanımla
      const embed = new Discord.MessageEmbed()
        .setTitle(`${message.author.username} Sıralamması`)
        .setTimestamp()
        .setDescription(`Yeni seviyeniz: **\`${curLevel}\`**! (Puan: \`${Math.floor(client.points.get(key, `points`) * 100) / 100}\`) `)
        .setColor("GREEN");
      //etiket gönder ve mesaj ekle
      message.channel.send(`<@` + message.author.id + `>`);
      message.channel.send(embed);
      //yeni seviyeyi ayarla
      client.points.set(key, curLevel, `level`);
    }
    //yoksa devam et veya komutlar...
    //
    if (message.content.toLowerCase().startsWith(`${config.PREFIX}rank`)) { //komut adı "rank" olan kısmı değiştirebilirsiniz
      //rütbe kullanıcısını al
      let rankuser = message.mentions.users.first() || message.author;
      client.points.ensure(`${message.guild.id}-${rankuser.id}`, {
        user: message.author.id,
        guild: message.guild.id,
        points: 0,
        level: 1
      });
      //veri tabanını oluşturma
      const filtered = client.points.filter(p => p.guild === message.guild.id).array();
      const sorted = filtered.sort((a, b) => b.points - a.points);
      const top10 = sorted.splice(0, message.guild.memberCount);
      let i = 0;
      //sunucu sıralamasını sayın, bazen bir hata gelir
      for (const data of top10) {
        await delay(15);
        try {
          i++;
          if (client.users.cache.get(data.user).tag === rankuser.tag) break;
        } catch {
          i = `Sıra sayma hatası`;
          break;
        }
      }
      const key = `${message.guild.id}-${rankuser.id}`;
      //biraz matematik kanka
      let curpoints = Number(client.points.get(key, `points`).toFixed(2));
      let curnextlevel = Number(((Number(1) + Number(client.points.get(key, `level`).toFixed(2))) * Number(10)) * ((Number(1) + Number(client.points.get(key, `level`).toFixed(2))) * Number(10)));
      //seviye değilse == rütbe yok
      if (client.points.get(key, `level`) === undefined) i = `Sıralama`;
      //Gecikmemesi için geçici bir yerleştirme tanımlayın
      let tempmsg = await message.channel.send(new Discord.MessageEmbed().setColor("RED").setAuthor("Veriler alınıyor...", "https://cdn.discordapp.com/emojis/769935094285860894.gif"))
      //küresel yerel renk var.
      let color;
      //rankuser durumunu tanımla
      let status = rankuser.presence.status;
      //kullanıcı durumu için biraz renklendirme yapın, (biraz şov yapmamız yok mu be)
      if (status === "dnd") { color = "#ff0048"; }
      else if (status === "online") { color = "#00fa81"; }
      else if (status === "idle") { color = "#ffbe00"; }
      else { status = "streaming"; color = "#a85fc5"; }
      //sıralamayı tanımla
      const rank = new canvacord.Rank()
        .setAvatar(rankuser.displayAvatarURL({ dynamic: false, format: 'png' }))
        .setCurrentXP(Number(curpoints.toFixed(2)), color)
        .setRequiredXP(Number(curnextlevel.toFixed(2)), color)
        .setStatus(status, false, 7)
        .renderEmojis(true)
        .setProgressBar(color, "COLOR")
        .setRankColor(color, "COLOR")
        .setLevelColor(color, "COLOR")
        .setUsername(rankuser.username, color)
        .setRank(Number(i), "Sıralama", true)
        .setLevel(Number(client.points.get(key, `level`)), "Seviye", true)
        .setDiscriminator(rankuser.discriminator, color);
      rank.build()
        .then(async data => {
          //eke rütbe kartı ekle
          const attachment = new Discord.MessageAttachment(data, "RankCard.png");
          //gömmeyi tanımla
          const embed = new Discord.MessageEmbed()
            .setTitle(`${rankuser.username} Sıralamması`)
            .setColor(color)
            .setImage("attachment://RankCard.png")
            .attachFiles(attachment)
          //lanet yerleştirmeyi gönder
          await message.channel.send(embed);
          //lanet geçici mesajı sil
          await tempmsg.delete();
          return;
        });
    }
    //geldik en zevksiz kısma, lider tablosu yapma
    if (message.content.toLowerCase() === `${config.PREFIX}lidertablosu`) { //komut adı "lidertablosu" olan kısmı değiştirebilirsiniz
      //biraz veri tabanı oluşturalım ve matematik dersimizi verelim
      const filtered = client.points.filter(p => p.guild === message.guild.id).array();
      const sorted = filtered.sort((a, b) => b.points - a.points);
      const top10 = sorted.splice(0, 10);
      const embed = new Discord.MessageEmbed()
        .setTitle(`${message.guild.name}: Lider Tablosu`)
        .setTimestamp()
        .setDescription(`İlk 10 Sıralama:`)
        .setColor("ORANGE");
      //sayacı 0'a ayarla
      let i = 0;
      //rütbeleri al
      for (const data of top10) {
        await delay(15); try {
          i++;
          embed.addField(`**${i}**. ${client.users.cache.get(data.user).tag}`, `Puan: \`${Math.floor(data.points * 100) / 100}\` | Seviye: \`${data.level}\``);
        } catch {
          i++; //kullanıcı bulunamadıysa sadece bunu yap
          embed.addField(`**${i}**. ${client.users.cache.get(data.user)}`, `Puan: \`${Math.floor(data.points * 100) / 100}\` | Seviye: \`${data.level}\``);
        }
      }
      //lanet mesajı gönder
      return message.channel.send(embed);
    }

  })
  function delay(delayInms) {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve(2);
      }, delayInms);
    });
  }
}

/*
if (message.content.toLowerCase() === `${config.PREFIX}kodlayan`) {
  message.channel.send("!Edip#0170");
}
*/

ve bot hazır.
ilk olarak modülleri kurmak için: npm install
ikinci olarak botu çalıştırmak için: npm main dosya adı. (ör: npm index.js)


göreseller:

Durumunuza göre renkler
çevrimiçi
Ekran Resmi 2022-06-24 18.48.37.png

boşta
Ekran Resmi 2022-06-24 18.49.43.png

rahatsız etmeyin
Ekran Resmi 2022-06-24 18.49.48.png

görünmez
Ekran Resmi 2022-06-24 18.49.53.png



lider tablosu:
Ekran Resmi 2022-06-24 18.52.00.png
 
onwr#1000
Katılım
6 May 2022
Mesajlar
523
Tepkime puanı
105
Şehir
Antalya
Selam. 2 Dosyadan oluşan bir rank botudur. Açıklamalar mevcut (neyin ne olduğunu bilmek lazım)

ilk olarak man dosyası oluşturun.
main dosyasına sadece alttaki kodları yapıştırın.
JavaScript:
const Discord = require("discord.js");
const client = new Discord.Client();
const config = require("./config.json");
const Enmap = require("enmap")
const canvacord = require("canvacord")
client.points = new Enmap({ name: "points" });
client.on("ready", ()=>console.log("Bot Aktif"));
const leveling = require("./ranking");
leveling(client);
client.login(config.TOKEN);

ardından bir ranking.js dosyası oluşturun ve alttaki kodları olduğu gibi yapıştırın.
JavaScript:
const config = require("./config.json");
const canvacord = require("canvacord");
const Discord = require("discord.js");

module.exports = function (client) {

  //katılma/ayrılma kanallarını kontrol etmek için ses durumu güncelleme olayı
  client.on("message", async (message) => {

    if (message.author.bot) return;
    if (!message.guild) return;
    if (message.channel.type === `dm`) return;
    //////////////////////////////////////////
    /////////////SIRALAMA SİSTEMİ///////////////
    //////////////////////////////////////////
    //sunucu için kullanıcının anahtarını al
    const key = `${message.guild.id}-${message.author.id}`;
    // veri tabanını oluşturma
    client.points.ensure(`${message.guild.id}-${message.author.id}`, {
      user: message.author.id,
      guild: message.guild.id,
      points: 0,
      level: 1
    });
    //mesaj uzunluğu oluşturun, çok uzun mesajlar için çok fazla xp olmaması için filtrele
    var msgl = message.content.length / (Math.floor(Math.random() * (message.content.length - message.content.length / 100 + 1) + 10));
    //mesaj çok kısaysa
    if (msgl < 10) {
      //0 ile 2 arasında rastgele bir sayı alın
      var randomnum = Math.floor((Math.random() * 2) * 100) / 100
      //temelde tekrar veri tabanı oluşturma
      client.points.math(key, `+`, randomnum, `points`)
      client.points.inc(key, `points`);
    }
    //çok kısa değilse yap
    else {
      // rastgele bir sayı olsun, ancak mesaj uzunluğuna bağlı olacak
      var randomnum = 1 + Math.floor(msgl * 100) / 100
      //temelde tekrar veri tabanı oluşturma
      client.points.math(key, `+`, randomnum, `points`)
      client.points.inc(key, `points`);
    }
    //mevcut seviyeyi al
    const curLevel = Math.floor(0.1 * Math.sqrt(client.points.get(key, `points`)));
    //eğer yeni bir seviyeyse bunu yap
    if (client.points.get(key, `level`) < curLevel) {
      //sıralı yerleştirmeyi tanımla
      const embed = new Discord.MessageEmbed()
        .setTitle(`${message.author.username} Sıralamması`)
        .setTimestamp()
        .setDescription(`Yeni seviyeniz: **\`${curLevel}\`**! (Puan: \`${Math.floor(client.points.get(key, `points`) * 100) / 100}\`) `)
        .setColor("GREEN");
      //etiket gönder ve mesaj ekle
      message.channel.send(`<@` + message.author.id + `>`);
      message.channel.send(embed);
      //yeni seviyeyi ayarla
      client.points.set(key, curLevel, `level`);
    }
    //yoksa devam et veya komutlar...
    //
    if (message.content.toLowerCase().startsWith(`${config.PREFIX}rank`)) { //komut adı "rank" olan kısmı değiştirebilirsiniz
      //rütbe kullanıcısını al
      let rankuser = message.mentions.users.first() || message.author;
      client.points.ensure(`${message.guild.id}-${rankuser.id}`, {
        user: message.author.id,
        guild: message.guild.id,
        points: 0,
        level: 1
      });
      //veri tabanını oluşturma
      const filtered = client.points.filter(p => p.guild === message.guild.id).array();
      const sorted = filtered.sort((a, b) => b.points - a.points);
      const top10 = sorted.splice(0, message.guild.memberCount);
      let i = 0;
      //sunucu sıralamasını sayın, bazen bir hata gelir
      for (const data of top10) {
        await delay(15);
        try {
          i++;
          if (client.users.cache.get(data.user).tag === rankuser.tag) break;
        } catch {
          i = `Sıra sayma hatası`;
          break;
        }
      }
      const key = `${message.guild.id}-${rankuser.id}`;
      //biraz matematik kanka
      let curpoints = Number(client.points.get(key, `points`).toFixed(2));
      let curnextlevel = Number(((Number(1) + Number(client.points.get(key, `level`).toFixed(2))) * Number(10)) * ((Number(1) + Number(client.points.get(key, `level`).toFixed(2))) * Number(10)));
      //seviye değilse == rütbe yok
      if (client.points.get(key, `level`) === undefined) i = `Sıralama`;
      //Gecikmemesi için geçici bir yerleştirme tanımlayın
      let tempmsg = await message.channel.send(new Discord.MessageEmbed().setColor("RED").setAuthor("Veriler alınıyor...", "https://cdn.discordapp.com/emojis/769935094285860894.gif"))
      //küresel yerel renk var.
      let color;
      //rankuser durumunu tanımla
      let status = rankuser.presence.status;
      //kullanıcı durumu için biraz renklendirme yapın, (biraz şov yapmamız yok mu be)
      if (status === "dnd") { color = "#ff0048"; }
      else if (status === "online") { color = "#00fa81"; }
      else if (status === "idle") { color = "#ffbe00"; }
      else { status = "streaming"; color = "#a85fc5"; }
      //sıralamayı tanımla
      const rank = new canvacord.Rank()
        .setAvatar(rankuser.displayAvatarURL({ dynamic: false, format: 'png' }))
        .setCurrentXP(Number(curpoints.toFixed(2)), color)
        .setRequiredXP(Number(curnextlevel.toFixed(2)), color)
        .setStatus(status, false, 7)
        .renderEmojis(true)
        .setProgressBar(color, "COLOR")
        .setRankColor(color, "COLOR")
        .setLevelColor(color, "COLOR")
        .setUsername(rankuser.username, color)
        .setRank(Number(i), "Sıralama", true)
        .setLevel(Number(client.points.get(key, `level`)), "Seviye", true)
        .setDiscriminator(rankuser.discriminator, color);
      rank.build()
        .then(async data => {
          //eke rütbe kartı ekle
          const attachment = new Discord.MessageAttachment(data, "RankCard.png");
          //gömmeyi tanımla
          const embed = new Discord.MessageEmbed()
            .setTitle(`${rankuser.username} Sıralamması`)
            .setColor(color)
            .setImage("attachment://RankCard.png")
            .attachFiles(attachment)
          //lanet yerleştirmeyi gönder
          await message.channel.send(embed);
          //lanet geçici mesajı sil
          await tempmsg.delete();
          return;
        });
    }
    //geldik en zevksiz kısma, lider tablosu yapma
    if (message.content.toLowerCase() === `${config.PREFIX}lidertablosu`) { //komut adı "lidertablosu" olan kısmı değiştirebilirsiniz
      //biraz veri tabanı oluşturalım ve matematik dersimizi verelim
      const filtered = client.points.filter(p => p.guild === message.guild.id).array();
      const sorted = filtered.sort((a, b) => b.points - a.points);
      const top10 = sorted.splice(0, 10);
      const embed = new Discord.MessageEmbed()
        .setTitle(`${message.guild.name}: Lider Tablosu`)
        .setTimestamp()
        .setDescription(`İlk 10 Sıralama:`)
        .setColor("ORANGE");
      //sayacı 0'a ayarla
      let i = 0;
      //rütbeleri al
      for (const data of top10) {
        await delay(15); try {
          i++;
          embed.addField(`**${i}**. ${client.users.cache.get(data.user).tag}`, `Puan: \`${Math.floor(data.points * 100) / 100}\` | Seviye: \`${data.level}\``);
        } catch {
          i++; //kullanıcı bulunamadıysa sadece bunu yap
          embed.addField(`**${i}**. ${client.users.cache.get(data.user)}`, `Puan: \`${Math.floor(data.points * 100) / 100}\` | Seviye: \`${data.level}\``);
        }
      }
      //lanet mesajı gönder
      return message.channel.send(embed);
    }

  })
  function delay(delayInms) {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve(2);
      }, delayInms);
    });
  }
}

/*
if (message.content.toLowerCase() === `${config.PREFIX}kodlayan`) {
  message.channel.send("!Edip#0170");
}
*/

ve bot hazır.
ilk olarak modülleri kurmak için: npm install
ikinci olarak botu çalıştırmak için: npm main dosya adı. (ör: npm index.js)


göreseller:

Durumunuza göre renkler
çevrimiçi
Ekli dosyayı görüntüle 4538
boşta
Ekli dosyayı görüntüle 4539
rahatsız etmeyin
Ekli dosyayı görüntüle 4540
görünmez
Ekli dosyayı görüntüle 4541


lider tablosu:
Ekli dosyayı görüntüle 4542
Eline saglık
 
  • Beğen
Tepkiler: Edip

Konuyu 0 kişi okuyor. (0 kayıtlı üye ve 0 ziyaretçi)

  • Bilgi