Discord.js - Komutları modüllere ayırma.

  • Konuyu Başlatan Konuyu Başlatan EchTR
  • Başlangıç tarihi Başlangıç tarihi
  • Görüntüleme 3.433

EchTR

echtr of legend
Katılım
2 Aralık 2016
Mesajlar
864
Elmaslar
609
Puan
8.060
Konum
İzmir

Discord:

EchTR#1848

Merhabalar, sizden küçük bir yardım isteyeceğim discord.js modülüne başladım ancak yazdığım kodlar çok fazla yer kaplıyor ve görüntü kirliliğine yol açıyor bunu düzeltmem için komutları modüllere ayırmam gerekiyor. Nasıl modüllere ayıracağım ? Yardım ederseniz sevinirim :) .

İçerik:
JavaScript:
const Discord = require('discord.js');
const client = new Discord.Client();
const ayarlar = require('./ayarlar.json');
var prefix = ayarlar.prefix;
var token = ayarlar.token;
var yasakliKelimeler = ["burada küfürler var"];
client.on('ready', () => {
  console.log(`[bot] ${client.user.tag} aktifleştirildi!`);
});

client.on('message', msg => {
        for (var i = 0; i < yasakliKelimeler.length; i++) {
              if (msg.content.includes(yasakliKelimeler[i])) {
                  if(msg.content.includes("tamam")){

                  } else {
                        console.log("[yasaklı kelime logu ] " + "Şahıs: " + msg.author.username  + " İçerik: " + msg.content + "." );
                    msg.delete();
                  msg.reply("küfür etme!");
                }
              }
        }
  });

client.login(token);
 


Yeni başladıysan bu seriyi takip et istediğini elde edersin.
Bölümleri zaten kısa :)
 

Bugüne dek bu konu hakkında en ufak bilgim yoktu ki böyle bir konu hazırlamışsınız. Eh haliyle az çok bilgi sahibi oldum. Sağ olun :)
 
- komutlar diye bir klasör aç ya da her neyse...
- <komut>.js leri oraya at.
- bot.js, server.js ne kullanıyorsan oraya bu kodları ekle.
Kod:
client.commands = new Discord.Collection();
client.aliases = new Discord.Collection();
fs.readdir('./komutlar/', (err, files) => {
  if (err) console.error(err);
  log(`${files.length} komut yüklenecek.`);
  files.forEach(f => {
    let props = require(`./komutlar/${f}`);
    log(`Yüklenen komut: ${props.help.name}.`);
    client.commands.set(props.help.name, props);
    props.conf.aliases.forEach(alias => {
      client.aliases.set(alias, props.help.name);
    });
  });
});

client.reload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.load = command => {
  return new Promise((resolve, reject) => {
    try {
      let cmd = require(`./komutlar/${command}`);
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.unload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};
 
- komutlar diye bir klasör aç ya da her neyse...
- <komut>.js leri oraya at.
- bot.js, server.js ne kullanıyorsan oraya bu kodları ekle.
Kod:
client.commands = new Discord.Collection();
client.aliases = new Discord.Collection();
fs.readdir('./komutlar/', (err, files) => {
  if (err) console.error(err);
  log(`${files.length} komut yüklenecek.`);
  files.forEach(f => {
    let props = require(`./komutlar/${f}`);
    log(`Yüklenen komut: ${props.help.name}.`);
    client.commands.set(props.help.name, props);
    props.conf.aliases.forEach(alias => {
      client.aliases.set(alias, props.help.name);
    });
  });
});

client.reload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.load = command => {
  return new Promise((resolve, reject) => {
    try {
      let cmd = require(`./komutlar/${command}`);
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.unload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};
Aynı bu arkadaşın dediği gibi yaparsan olur.
 
- komutlar diye bir klasör aç ya da her neyse...
- <komut>.js leri oraya at.
- bot.js, server.js ne kullanıyorsan oraya bu kodları ekle.
Kod:
client.commands = new Discord.Collection();
client.aliases = new Discord.Collection();
fs.readdir('./komutlar/', (err, files) => {
  if (err) console.error(err);
  log(`${files.length} komut yüklenecek.`);
  files.forEach(f => {
    let props = require(`./komutlar/${f}`);
    log(`Yüklenen komut: ${props.help.name}.`);
    client.commands.set(props.help.name, props);
    props.conf.aliases.forEach(alias => {
      client.aliases.set(alias, props.help.name);
    });
  });
});

client.reload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.load = command => {
  return new Promise((resolve, reject) => {
    try {
      let cmd = require(`./komutlar/${command}`);
      client.commands.set(command, cmd);
      cmd.conf.aliases.forEach(alias => {
        client.aliases.set(alias, cmd.help.name);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};

client.unload = command => {
  return new Promise((resolve, reject) => {
    try {
      delete require.cache[require.resolve(`./komutlar/${command}`)];
      let cmd = require(`./komutlar/${command}`);
      client.commands.delete(command);
      client.aliases.forEach((cmd, alias) => {
        if (cmd === command) client.aliases.delete(alias);
      });
      resolve();
    } catch (e){
      reject(e);
    }
  });
};
fs modülünün yararlarından birini daha görmüş oldum. teşekkürler bu arada :)
peki nasıl kullanabilirim ? örneğin yenidenbaslat.js adında bir dosya oluşturdum komut yazınca bu dosyayı nasıl çağırabilirim ?
 
fs modülünün yararlarından birini daha görmüş oldum. teşekkürler bu arada :)
peki nasıl kullanabilirim ? örneğin yenidenbaslat.js adında bir dosya oluşturdum komut yazınca bu dosyayı nasıl çağırabilirim ?
Attığım video serisini izleseydiniz şimdiye öğrenmiştiniz :)
 
Konuyu yeni görüyorum, sana yardımcı olmak isterim.
Öncelikle tek sayfaya fazla kod yazmak, okumayı zorlaştırır, gözü yorar ve tek sayfaya 1000 satır kod yazmak hamallık olur. Bu yüzden bu kodları sayfalara bölerek parçalıyoruz. Her sayfaya bir ad ve görev veriyoruz. Bu sadece nodejs'de değil her yazılım dilinde bu şekilde ilerler zaten. NodeJS'de sayfaları nasıl parçalayacaksın örnek vererek anlatmak istiyorum bunun 2 yöntemi var:

1. Yöntem
JavaScript:
// Burası index.js dosyamız olsun:
const discord = require("discord");

// global. değişkeni her sayfada çalışan global bir değişkendir bunun içerisine discord değişkenini ekliyoruz:
global.discord = discord;

// kütüphanem.js dosyamızı çağırıyoruz:
require("./kütüphanem");

/***********/

// Burasıda kütüphanem.js dosyamız olsun:
console.log(global.discord);
// kütüphanem.js dosyamızdaki global.discord değişkeninden istediğimiz zaman discord kütüphanesine ulaşabilriz.

2. Yöntem
JavaScript:
// Burası index.js dosyamız olsun:
const discord = require("discord");

// kütüphanem.js dosyamızı çağırıyoruz:
require("./kütüphanem")(discord);
// kütüphanem.js dosyamızı bir fonksiyon olarak eklediğimiz için parantezle çağırıp içerisine discord parametresini gönderiyoruz...

/***********/

// Burasıda kütüphanem.js dosyamız olsun:
module.exports = function ( discord ) {
  console.log(discrod);
}
// kütüphanem.js dosyamızdaki module.exports ile çağrılan sayfaya geri dönüş yaptırabiliyoruz.
 
Tek tek dosya çağıramam ben 100 tane farklı dosya oluşturcam diyorsan: fs ile klasör dizini okuyup for döngüsüne sokup döngüyle birlikte ne kadar sayfan varsa require edebilrisin:
JavaScript:
const fs = require("fs");
fs.readdirSync("./komutlar").forEach(dosya_adi => {
    require("./komutlar/" + dosya_adi);
});
 
Son düzenleme:
Tek tek dosya çağıramam ben 100 tane farklı dosya oluşturcam diyorsan: fs ile klasör dizini okuyup for döngüsüne sokup döngüyle birlikte ne kadar sayfan varsa require edebilrisin:
JavaScript:
const fs = require("fs");
fs.readdirSync("./komutlar").forEach(dosya_adi => {
    require("./komutlar/" + dosya_adi);
});
teşekkürler .)
 

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst