Merhaba, bu konuda sizlerle Discord.js v14 kullanılarak geliştirilmiş bir !sunucubilgi komutunu paylaşıyorum.
Bu komut sayesinde sunucunuzun neredeyse tüm detaylarını Embed içerisinde görüntüleyebilirsiniz.
---
---
Bu komut sayesinde sunucunuzun istatistiklerini detaylı bir şekilde öğrenebilir, kullanıcılarınıza profesyonel bir bilgi kartı sunabilirsiniz.
Bu komut sayesinde sunucunuzun neredeyse tüm detaylarını Embed içerisinde görüntüleyebilirsiniz.
Özellikler
- Sunucu ID, Kuruluş tarihi, sahibi ve varsayılan bildirim ayarları
- Kanal istatistikleri (Yazı, Ses, Kategori, diğer)
- Üye ve Bot sayıları
- Üye durumları (Online, Idle, DND, Offline)
- Emoji istatistikleri (animasyonlu / animasyonsuz)
- Boost bilgileri (basan kişi, seviye, toplam boost)
- Sunucu görselleri (icon, banner, splash, discovery splash)
- Roller (40 taneye kadar listelenir, fazlası için “+x rol” şeklinde gösterilir)
---
Komut Kodu
Kod:
"use strict";
const {
EmbedBuilder,
ChannelType,
GuildDefaultMessageNotifications
} = require("discord.js");
exports.run = async (client, message, args) => {
const { guildId, guild } = message;
// Sunucu resimleri
const guildIcon = guild.iconURL({ extension: "png", forceStatic: false, size: 1024 });
const guildBanner = guild.bannerURL({ extension: "png", forceStatic: false, size: 1024 });
const guildSplash = guild.splashURL({ extension: "png", forceStatic: false, size: 1024 });
const guildDiscoverySplash = guild.discoverySplashURL({ extension: "png", forceStatic: false, size: 1024 });
// Sayılabilen veriler
const allMembers = guild.members.cache;
const allEmojis = guild.emojis.cache;
const allBots = allMembers.filter(member => member.user.bot);
const allChannels = guild.channels.cache;
const allRoles = guild.roles.cache.clone();
const animatedEmojis = allEmojis.filter(emoji => emoji.animated);
const channelsCount = { text: 0, voice: 0, category: 0, others: 0 };
const statusCount = { total: 0, online: 0, idle: 0, dnd: 0, offline: 0 };
allMembers.forEach(member => {
if (!member.presence || member.presence.status === "offline") statusCount.offline += 1;
else {
statusCount[member.presence.status] += 1;
statusCount.total += 1;
}
});
allChannels.forEach(channel => {
switch (channel.type) {
case ChannelType.GuildText: channelsCount.text += 1; break;
case ChannelType.GuildVoice: channelsCount.voice += 1; break;
case ChannelType.GuildCategory: channelsCount.category += 1; break;
default: channelsCount.others += 1; break;
}
});
allRoles.delete(guildId);
const createdTimestampWithSeconds = Math.round(guild.createdTimestamp / 1000);
const basicInformation = [
`🆔 **Sunucu ID'si:** ${guildId}`,
`📅 **Kuruluş tarihi:** <t:${createdTimestampWithSeconds}:F> - <t:${createdTimestampWithSeconds}:R>`,
`🔔 **Varsayılan bildirimler:** ${guild.defaultMessageNotifications == GuildDefaultMessageNotifications.AllMessages ? "Tüm mesajlar 📬" : `Sadece etiketler 🎭`}`
];
const vanityData = await guild.fetchVanityData().catch(() => { });
if (vanityData) basicInformation.push(`✉️ **Özel davet:** https://discord.gg/${vanityData.code} - (${vanityData.uses})`);
if (guild.afkChannel) basicInformation.push(`🔇 **AFK kanalı:** <#${guild.afkChannelId}> (${guild.afkTimeout} sn)`);
if (guild.rulesChannel) basicInformation.push(`📕 **Kurallar kanalı:** <#${guild.rulesChannel}>`);
basicInformation.push(`👑 **Sunucu sahibi:** <@${guild.ownerId}> - (${guild.ownerId})`);
function toHumanize(number) { return number?.toLocaleString("tr-TR"); }
const MAX_SHOW_ROLE_IN_INFO = 40;
const embed = new EmbedBuilder()
.setAuthor({ name: guild.name, iconURL: guildIcon })
.addFields(
{ name: "TEMEL BİLGİLER", value: basicInformation.join("\n") },
{ name: `KANALLAR (${toHumanize(allChannels.size)})`, value: `📃 Yazı: ${channelsCount.text}\n🔊 Ses: ${channelsCount.voice}\n🖇️ Kategori: ${channelsCount.category}\n🎞️ Diğer: ${channelsCount.others}`, inline: true },
{ name: `ÜYELER (${toHumanize(allMembers.size)})`, value: `👥 Üye: ${allMembers.size - allBots.size}\n🤖 Bot: ${allBots.size}`, inline: true },
{ name: `DURUMLAR (${toHumanize(statusCount.total)})`, value: `🟢 Online: ${statusCount.online}\n🟡 Boşta: ${statusCount.idle}\n🔴 DND: ${statusCount.dnd}\n⚫ Offline: ${statusCount.offline}`, inline: true },
{ name: `EMOJİLER (${allEmojis.size})`, value: `🧱 Normal: ${allEmojis.size - animatedEmojis.size}\n💫 Animasyonlu: ${animatedEmojis.size}` },
{ name: "BOOST BİLGİLERİ", value: `💖 Boost basan: ${allMembers.filter(m => m.premiumSinceTimestamp).size}\n🚀 Boost sayısı: ${guild.premiumSubscriptionCount || "0"}\n📈 Seviye: ${guild.premiumTier}`, inline: true },
{ name: "FOTOĞRAFLAR", value: `🖥️ Icon: ${guildIcon ? `[URL](${guildIcon})` : "Yok"}\n🖼️ Banner: ${guildBanner ? `[URL](${guildBanner})` : "Yok"}\n💌 Splash: ${guildSplash ? `[URL](${guildSplash})` : "Yok"}\n📡 Discovery: ${guildDiscoverySplash ? `[URL](${guildDiscoverySplash})` : "Yok"}`, inline: true },
{ name: `🎭 ROLLER (${toHumanize(allRoles.size)})`, value: [...allRoles.values()].sort((a, b) => b.position - a.position).slice(0, MAX_SHOW_ROLE_IN_INFO).map(r => `<@&${r.id}>`).join(" | ") + (allRoles.size > MAX_SHOW_ROLE_IN_INFO ? ` +${allRoles.size - MAX_SHOW_ROLE_IN_INFO} rol daha...` : "") }
)
.setThumbnail(guildIcon)
.setColor("Blue")
.setTimestamp();
return message.reply({ embeds: [embed] });
};
exports.conf = {
enabled: true,
guildOnly: true,
aliases: ['sunucubilgi', 'sbilgi'],
permLevel: 0
};
exports.help = {
name: 'sunucubilgi',
};
---