- !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.
ardından bir ranking.js dosyası oluşturun ve alttaki kodları olduğu gibi yapıştırın.
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
boşta
rahatsız etmeyin
görünmez
lider tablosu:
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
boşta
rahatsız etmeyin
görünmez
lider tablosu: