Discord.js命令处理程序问题

时间:2020-02-25 21:45:41

标签: discord.js

我已经尝试修复命令处理程序3个小时了,但是每当我尝试添加自定义命令时,都不会发生任何事情。它会加载命令,但是在运行命令时它什么也没做。这是一些代码:

index.js:

const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    console.log(`[LOG] Loaded command ${file}`);
    client.commands.set(command.name, command);
}

commands / kick.js:

const fs = require('fs');
var moment = require('moment');
var logger = fs.createWriteStream(`./logs/${moment().format('MM-DD-YYYY')}.log`, {
    flags: 'a'
  });

module.exports = {
    name: "kick",
    category: "moderation",
    description: "Kicks the mentioned user.",
    usage: "<imputs>",
    run: (client, message, args) => {
    let reason = args.slice(1).join(' ');
    let user = message.mentions.users.first();
    if (message.mentions.users.size < 1) return message.reply('You must mention someone to kick them.').then(msg => { msg.delete(10000) }).catch(console.error);
    if (user.id === message.author.id) return message.reply("You cannot kick yourself.").then(msg => { msg.delete(10000) });
    if (user.id === client.user.id) return message.reply("You cannot kick me.").then(msg => { msg.delete(10000) });

    if (!message.member.hasPermission("KICK_MEMBERS")) return message.reply("You don't have the **Kick Members** permission!").then(msg => { msg.delete(10000) });

    if (reason.length < 1) reason = 'No reason supplied';

    if (!message.guild.member(user).kickable) return message.reply('I could not kick that member').then(msg => { msg.delete(10000) });

    message.delete();
    message.guild.member(user).kick();

    const embed = new Discord.RichEmbed()
      .setColor(0x0000FF)
      .setTimestamp()
      .addField('Action:', 'Kick')
      .addField('User:', `${user.username}#${user.discriminator} (${user.id})`)
      .addField('Moderator:', `${message.author.username}#${message.author.discriminator}`)
      .addField('Reason', reason)
      .setFooter(`© NetSync by Towncraft Developers`);
    let logchannel = message.guild.channels.find('name', 'logs');
    if  (!logchannel){
      message.channel.send(`Successfully kicked ${user.username}#${user.discriminator}.`).then(msg => { msg.delete(10000) });
      logger.log(`[LOG] [KICK] ${user.username}#${user.discriminator} (${user.id}) was kicked by ${message.author.username}#${message.author.discriminator}.`);
    }else{
      message.channel.send(`Successfully kicked ${user.username}#${user.discriminator}. I\'ve also logged the kick in <#${logchannel.id}>.`).then(msg => { msg.delete(10000) });
      client.channels.get(logchannel.id).send({embed});
    }
    if(user.bot) return;
    return message.mentions.users.first().send({embed}).catch(e =>{
      if(e) return
    });
  }
}

就像我说的那样,现在已经尝试进行3个小时了,我很沮丧。如果有人可以告诉我我做错了那太好了,谢谢。

1 个答案:

答案 0 :(得分:2)

您需要在bot.on('message'块的main.js文件中执行命令。

赞:

client.on('message', message => {
    if (message.channel.type === "dm") return;

    let prefix = '!'
    let messageArray = message.content.split(" ");
    let cmd = messageArray[0];
    let args = messageArray.slice(1);
    if (!message.content.startsWith(prefix)) return;

    let commandfile = client.commands.get(cmd.slice(prefix.length));
    if (commandfile) commandfile.run(client, message, args, botconfig);
})