Rehber Discord bot yapım dersleri #3 - Bir üyeyi sunucudan atma

Katılım
8 Nisan 2020
Mesajlar
6.568
Makaleler
7
Çözümler
64
Yer
Mile Marker LN 29.5, 51 Area.
Merhabalar. İşte başlıyoruz. İlk olarak bot yardımıyla birini atacağız.
Öncelikle Glitch'de yeni bir dosya açıyoruz. Ancak bu sefer farklı bir şekilde açacağız.
Dosya adını bu sefer kick.js değil, komutlar/kick.js diye yazacağız. Bu sayede, "komutlar" isimli bir klasör oluşturup bütün komutları oraya yazacağız.
Klasörü oluşturduktan sonra içerisine şu kodları yapıştırıyorsunuz.

JavaScript:
const Discord = require("discord.js");
const db = require("quick.db");
module.exports.run = async (bot, message, args) => {
  if (!message.member.hasPermission("KICK_MEMBERS")) {
    const embed = new Discord.MessageEmbed()
      .setDescription("```Ne yazık ki bu komutu kullanmak için 'Üyeleri At' yetkisine sahip olmalısın.```")
      .setColor("BLACK");

    message.channel.send(embed);
    return;
  }

  let u = message.mentions.users.first();
  if (!u) {
    return message.channel.send(
      new Discord.MessageEmbed()
        .setDescription("Hangi üyeyi atmak istediğini etiketlemek zorundasın!")
        .setColor("BLACK")
        .setFooter(bot.user.username, bot.user.avatarURL)
    );
  }

  const embed = new Discord.MessageEmbed()
    .setColor("BLACK")
    .setDescription(`${u} Adlı şahsın sunucudan atılmasını onaylıyor musunuz?`)
    .setFooter(bot.user.username, bot.user.avatarURL);
  message.channel.send(embed).then(async function(sentEmbed) {
    const emojiArray = ["✅"];
    const filter = (reaction, user) =>
      emojiArray.includes(reaction.emoji.name) && user.id === message.author.id;
    await sentEmbed.react(emojiArray[0]).catch(function() {});
    var reactions = sentEmbed.createReactionCollector(filter, {
      time: 30000
    });
    reactions.on("end", () => sentEmbed.edit("İşlem iptal edildi!"));
    reactions.on("collect", async function(reaction) {
      if (reaction.emoji.name === "✅") {
        message.channel.send(
          `İşlem başarılı! ${u} adlı kullanıcı sunucudan atıldı!`
        );

        message.guild.member(u).kick();
      }
    });
  });
};

module.exports.conf = {
  aliases: [],
  permLevel: 2,
  enabled: true,
  guildOnly: true,
  kategori: "moderasyon"
};

module.exports.help = {
  name: "kick",
  description: "kick",
  usage: "kick"
};

Kodları anlatayım.

JavaScript:
  if (!message.member.hasPermission("KICK_MEMBERS")) {

    const embed = new Discord.MessageEmbed()

      .setDescription("```Ne yazık ki bu komutu kullanmak için 'Üyeleri At' yetkisine sahip olmalısın.```")

      .setColor("BLACK");

Burada eğer bir kişinin "KICK_MEMBERS", yani "Üyeleri At!" yetkisi yoksa, bu komutu kullanamayacağı anlamına gelir.
.setColor, bot bu mesajı yazdığında sağ taraftaki çizginin hangi renk olacağını gösterir.
.setDescription, botun vereceği cevaptır.

JavaScript:
 message.channel.send(embed);

Bu kod mesajı "embed" yapar, yani güzelleştirir. Daha düzgün bir hale getirir.

JavaScript:
if (!u) {
    return message.channel.send(
      new Discord.MessageEmbed()
        .setDescription("Lütfen atılacak kişiyi etiketleyiniz!")
        .setColor("BLACK")
        .setFooter(bot.user.username, bot.user.avatarURL)
    );
  }

Burada, eğer bu kişinin yetkisi var ise, o kişiye kimi atmak istediğini soruyoruz.

JavaScript:
new Discord.MessageEmbed()

Bu kodu yukarda demiştim, mesajı güzelleştirmek için. Aksi takdirde bütün mesajları tek tek yazar ve görüntü kirliliğine sebebiyet verir.

JavaScript:
const embed = new Discord.MessageEmbed()
    .setColor("BLACK")
    .setDescription(`${u} Adlı şahsın sunucudan atılmasını onaylıyor musunuz?`)
    .setFooter(bot.user.username, bot.user.avatarURL);
  message.channel.send(embed).then(async function(sentEmbed) {
    const emojiArray = ["✅"];
    const filter = (reaction, user) =>
      emojiArray.includes(reaction.emoji.name) && user.id === message.author.id;
    await sentEmbed.react(emojiArray[0]).catch(function() {});
    var reactions = sentEmbed.createReactionCollector(filter, {
      time: 30000
    });
    reactions.on("end", () => sentEmbed.edit("İşlem iptal oldu!"));
    reactions.on("collect", async function(reaction) {
      if (reaction.emoji.name === "✅") {
        message.channel.send(
          `İşlem onaylandı! ${u} adlı şahıs sunucudan atıldı!`
        );

        message.guild.member(u).kick();
      }
    });
  });
};

Burası ise kullanıcıyı attığımız bölüm.

JavaScript:
.setColor("BLACK")

    .setDescription(`${u} Adlı kişinin sunucudan atılmasını onaylıyor musunuz?`)

    .setFooter(bot.user.username, bot.user.avatarURL);

Burada eğer yetkisi var ise, ve kişiyi de etiketlemiş ise kendisine soruyoruz. "Bu kişinin sunucudan atılmasını onaylıyor musunuz?" diye.

.setDescription kısmı, botun vereceği cevap.
.setFooter kısmı, botun en alttaki küçük yazılarla yazılan, botun adının yazdığı yer.

JavaScript:
const emojiArray = ["✅"];
    const filter = (reaction, user) =>
      emojiArray.includes(reaction.emoji.name) && user.id === message.author.id;
    await sentEmbed.react(emojiArray[0]).catch(function() {});
    var reactions = sentEmbed.createReactionCollector(filter, {
      time: 30000
    });
    reactions.on("end", () => sentEmbed.edit("İşlem iptal oldu!"));
    reactions.on("collect", async function(reaction) {
      if (reaction.emoji.name === "✅") {
        message.channel.send(
          `İşlem onaylandı! ${u} adlı kişi sunucudan atıldı!`
        );

        message.guild.member(u).kick();
      }
    });
  });
};

Asıl işlem burada gerçekleşiyor.

JavaScript:
const emojiArray = ["✅"];

    const filter = (reaction, user) =>

      emojiArray.includes(reaction.emoji.name) && user.id === message.author.id;

    await sentEmbed.react(emojiArray[0]).catch(function() {});

    var reactions = sentEmbed.createReactionCollector(filter, {

      time: 30000

    });

Eğer 30 saniye içerisinde, "Tik" emojisine basar ise işlemi onayladığını gösteriyor ve kişiyi sunucudan atıyor.
Eğer 30 saniye içerisinde basmaz ise, yukarda da görüldüğü gibi "İşlem iptal edildi" diye yazıyor.

JavaScript:
module.exports.conf = {
  aliases: [],
  permLevel: 2,
  enabled: true,
  guildOnly: true,
  kategori: "moderasyon"
};

module.exports.help = {
  name: "kick",
  description: "kick",
  usage: "kick"
};

Burada, permLevel kısmı, izin kısmıdır. Birazdan bu kısımı ayarlacağız.
Enabled komutun çalışıp çalışmayacağını ayarlar.
guildOnly o sunucuya özel olup olmayacağını belirler.
Kategori ise, o kodun hangi kategoride olduğudur.
aliases kısmı, onu başka şekilde yazmaya benzer.
Örneğin sizler oraya 'üye-at' yazarsınız. kick demek yerine, üye-at dersiniz.

En alttaki name kısmı komutun adı ve kullanımı, description kısmı komutun açıklaması, usage kısmı da komutun kullanım şeklidir.

Sıra geldik, botun prefixini ayarlamaya.

Yani mesela bota .at deyince atacak, ve ya -at deyince.
Bunu ayarlayacağız.

Bunun için "ayarlar.json" diye bir klasör açıyoruz.
İçerisine şu komutu yapıştırıyoruz;

JavaScript:
{
  "prefix": "Botun prefixi",
}

Botun prefixi yazan yere, sizler botun hangi komutla çalışması istediğinizi belirliyorsunuz. Mesela . koydunuz, .at diye kullanırsınız. - koydunuz, -at diye kullanırsınız.

Ardından bot.js ' ye geliyoruz.

Oraya en üstteki kodların altına şu kodu yapıştırıyoruz;

JavaScript:
const ayarlar = require('./ayarlar.json');

Buradan, bizler "ayarlar" dediğimizde, "ayarlar.json" dosyasını belirttiğimizi söyledik.

Ardından biraz boşluk bırakıp şu kodu yapıştırıyorsunuz.

JavaScript:
var prefix = ayarlar.prefix;

Burdan, prefiximizin "ayarlar" dosyasında olduğunu belirttik.

Ardından biraz daha boşluk bırakıp şu komudu giriyorsunuz;

JavaScript:
client.elevation = message => {
    if (!message.guild) {
        return;
    }
    let permlvl = 0;
    if (message.member.hasPermission("BAN_MEMBERS")) permlvl = 2;
    if (message.member.hasPermission("ADMINISTRATOR")) permlvl = 3;
    if (message.author.id === ayarlar.sahip) permlvl = 4;
    return permlvl;
};

Buradan, botun sahibinin perm levelinin 4, sunucu yöneticilerinin perm levelinin 3, birilerini banlama yetkisi olanların perm levelinin ise 2 olduğunu belirledik.

Fark ettiyseniz son satırdaki kodda, ayarlar.sahip diyor. O bizim botun sahibi olduğunu nerden bilecek? Güzel soru. ayarlar.json daki kodları şununla değiştiriyorsunuz;

JavaScript:
{
  "prefix": "Botun Prefixi",
  "sahip": ["ID'niz"],
}

ID'niz kısmına ID'nizi gireceksiniz. Ardından bot, sizin sahibiniz olduğunu bilecek. ID'nizi almak için, Discordda her hangi bir sunucuda adınıza sağ tıklayıp en alttan "ID Kopyala" ya basın. Eğer gözükmüyorsa şu adımları uygulayın ;

Kullanıcı Ayarları > Görünüm > En alta inin > Geliştirici modunu açın.

Ardından artık bir sunucuda adınıza sağ tıklayınca, en altta "ID Kopyala" yazacak. Oradan ID'nizi kopyalayıp yapıştırın.

Eğer beğendiyseniz, beğenmeyi unutmayın.

Umarım link atmak yasak değildir. Bazen anlamayan arkadaşlar oluyor, onlar için.

Not: Sorunuz olursa sormaktan çekinmeyin, iyi sosyaller.
 
Son düzenleyen: Moderatör:

Yeni konular

Geri
Yukarı