npm discord.js modülü için fs ile command handler yapmak
Sorunum
discord.js için yaptığım handlerdaki hatayı bulamadım, herşeyi eksiksiz yaptığımı biliyorum ama bir türlü cevap vermiyor bot
Modüller
Handler
const folders = fs.readdirSync("./commands/")
for (const files of folders) {
const folder = fs.readdirSync(`./commands/${files}/`).filter(file => file.endsWith(".js"))
for (const commands of folder) {
const command = require(`./commands/${files}/${commands}`)
console.log(`./commands/${files}/${commands}`)
bot.on('message',message => {
const args = message.content.slice(config.prefix.length).trim().split(/ +/);
if(message.content !== `${config.prefix}${command.name}` || `${config.prefix}${command.aliases.join(' || ')}`) return;
require(`./commands/${files}/${commands}`)(bot,message,args)
if(message.author.bot) return;
command.code
})
}
}
Örnek kullanım
Dosya yolu
./commands/user/ping.js
module.exports = {
name: "ping",
aliases: [],
code: async (bot, message, args) => {
message.channel.send('pong')
}
}
Önemli not
Cevap olarak hazır handler yazmayın , 'bot' tanımlanmıştır
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Şu kod parçacığı yanlış yerde bulunuyor:
bot.on('message',message => {
const args = message.content.slice(config.prefix.length).trim().split(/ +/);
if(message.content !== `${config.prefix}${command.name}` || `${config.prefix}${command.aliases.join(' || ')}`) return;
require(`./commands/${files}/${commands}`)(bot,message,args)
if(message.author.bot) return;
command.code
})
döngü içinde tekrar tekrar event handler yaratılmış oluyor.
https://discordjs.guide/command-handling/#reading-command-files
şu linkteki kısımda dikkat edersen client.command şeklinde bir collection yaratılıyor.
bu kısımda tabi direk commands folderını tarıyor ama anlatımın biraz ilerisinde commands altında klasörlere bölmeyide anlatıyor.
komutlar bunun içine ekleniyor ve ardından event handler kullanılarak komutlara erişiliyor.
Bu dökümantasyonun başından başlar gidersen rahatça düzenlersin.
const folders = fs.readdirSync("./commands/");
const commands = new Map();
for (const files of folders) {
const folder = fs.readdirSync(`./commands/${files}/`).filter(file => file.endsWith(".js");
for (const commands of folder) {
const command = require(`./commands/${files}/${commands}`);
commands.set(commands.name, commands)
};
};
bot.on("message", message => {
if (message.author.bot) return;
if (message.content.indexOf(prefix) !== 0) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const cmd = commands.get(command);
if (!cmd) return;
cmd.code(bot, message, args);
})
code property'sini function olarak çalıştırman gerekiyor.