首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >discord.js "TypeError:无法读取未定义的属性‘执行’“

discord.js "TypeError:无法读取未定义的属性‘执行’“
EN

Stack Overflow用户
提问于 2020-11-03 15:02:10
回答 1查看 812关注 0票数 0

我正试图用discord.js制作一个机器人,我不知道如何解决这个错误,我已经找了几个小时了,找不到答案,当我运行这个机器人时,它成功地登录了,但是当你运行一个命令时,powershell控制台会抛出一个错误

TypeError:无法读取未定义的属性“执行”

这是我的主要代码

代码语言:javascript
复制
const Discord = require('discord.js');
const config = require('./config.json');
const client = new Discord.Client();
const { prefix, token } = require('./config.json');
const ms = require('ms');
const fs = require('fs');

client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

client.once('ready', async () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const commandName = args.shift().toLowerCase();

    const command = client.commands.get(commandName) || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));

    try {
        command.execute(message, args);
    } catch (error) {
        console.error(error);
        message.reply('This command has an issue.')
    }
    // other commands...
});

client.login(token);

下面是一个命令.js文件,这个命令旨在清除500-2中的x个消息数

代码语言:javascript
复制
module.exports = {
    name: "purge",
    description: "Deletes input amout of messages.",
    async execute(message, args) {
        if (message.member.hasPermission(MANAGE_MESSAGES)) {
            const deleteCount = parseInt(args[0], 10);
            const deleteMessage = `Deleted ${deleteCount} messages.`;

            if (!deleteCount || deleteCount > 500 || deleteCount < 2) return message.reply(`${message.author} please input a number between 2 - 500.`);

            const fetched = await message.channel.fetchMessages({
                limit: deleteCount
            });
            
            message.channel.bulkDelete(fetched)
                .catch(err => console.log(`Cannot delete message because of ${err}`))
                .then(message.reply(deleteMessage))
                .catch(err => {
                    console.log(err);
                })
        } else {
            message.reply('You do not have permissions to purge.')
        }
    }

}

错误信息是:

代码语言:javascript
复制
TypeError: Cannot read property 'execute' of undefined
    at Client.<anonymous> (C:\Users\ryssu\source\repos\SCP\079\app.js:24:11)
    at Client.emit (events.js:315:20)
    at MessageCreateAction.handle (C:\Users\ryssu\source\repos\SCP\079\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\ryssu\source\repos\SCP\079\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.j
s:4:32)
    at WebSocketManager.handlePacket (C:\Users\ryssu\source\repos\SCP\079\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (C:\Users\ryssu\source\repos\SCP\079\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:\Users\ryssu\source\repos\SCP\079\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (C:\Users\ryssu\source\repos\SCP\079\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:315:20)
    at Receiver.receiverOnMessage (C:\Users\ryssu\source\repos\SCP\079\node_modules\ws\lib\websocket.js:797:20)

如果有人能帮我做这件事我会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 15:07:24

实际上,您并没有将任何命令设置到commands集合中,因此任何获取命令的尝试都会返回未定义的命令。

代码语言:javascript
复制
// create the collection
client.commands = new Discord.Collection();

// get an array of every file in the commands folder
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

// iterate a function through every file
for (file of commandFiles) {
 const command = require(`./commands/${file}`);
 
 // map the command to the collection with the key as the command name, 
 // and the value as the whole exported object
 client.commands.set(command.name, command);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64665351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档