&引用;TypeError:无法读取属性';拆分';“未定义”的定义;discord.jsv12

&引用;TypeError:无法读取属性';拆分';“未定义”的定义;discord.jsv12,discord.js,Discord.js,我不断地得到一份工作 “TypeError:无法读取未定义的属性'split'” 为我的discord bot运行-mute命令时。我谨此陈辞: 导致错误的那条线看起来和他的一模一样。这是我的密码: const { GuildMember } = require("discord.js") const BotVersion = require('../package.json').version; const Discord = require("d

我不断地得到一份工作

“TypeError:无法读取未定义的属性'split'”

为我的discord bot运行
-mute
命令时。我谨此陈辞:

导致错误的那条线看起来和他的一模一样。这是我的密码:

    const {
    GuildMember
} = require("discord.js")
const BotVersion = require('../package.json').version;
const Discord = require("discord.js");
var botdev = require('../data.json').botdev;
const redis = require('../redis.js')
module.exports = {
    name: 'mute',
    description: "mute",
    execute(async, message, args) {

        const { content, channel, mentions } = message
        const split = content.trim().split(' ')
        const syntax = '-mute <@member> <duration as a number> <m, h, d, or life>';

        if (split.length !== 4) {
            channel.send('Insufficient parameters :no_entry_sign:\n**Syntax**: ' + syntax)
            return;
        }
        
        const duration = split[2]
        const durationType = split[3]

        if (isNaN(duration)) {
            channel.send('Please provide a number for the duration\n**Syntax**: ' + syntax)
            return;
        }

        const durations = {
            m: 60,
            h: 60 * 60,
            d: 60 * 60 * 24,
            life: -1
        }

        if (!durations[durationType]) {
            channel.send('Please provide a valid duration type\n**Syntax**: ' + syntax)
            return;
        }

        const seconds = duration * durations[durationType];

        console.log('MENTIONS:', mentions)
        const redisClient = await (redis)
        try {

        } finally {
            redisClient.quit()
        }
    }
}
const{
行会成员
}=require(“discord.js”)
const BotVersion=require('../package.json').version;
const Discord=require(“Discord.js”);
var botdev=require('../data.json').botdev;
const redis=require('../redis.js')
module.exports={
名称:“静音”,
说明:“静音”,
执行(异步、消息、参数){
const{content,channel,indications}=message
const split=content.trim().split(“”)
常量语法='-mute';
if(split.length!==4){
channel.send('参数不足:没有输入符号:\n**Syntax**:'+Syntax)
返回;
}
常量持续时间=拆分[2]
const durationType=split[3]
如果(isNaN(持续时间)){
channel.send('请提供持续时间的数字\n**Syntax**:'+Syntax)
返回;
}
常数持续时间={
m:60,
h:60*60,
d:60*60*24,
寿命:-1
}
如果(!durations[durationType]){
channel.send('请提供有效的持续时间类型\n**语法**:'+语法)
返回;
}
常数秒=持续时间*持续时间[持续时间类型];
log('提及:',提及)
const redisClient=await(redis)
试一试{
}最后{
redisClient.quit()
}
}
}

问题

您的
async
关键字位于错误位置。在代码中,将
async
放在函数的括号内(
execute(async,message,args)
),这使程序误以为
async
是函数的参数之一

基本上,当主js文件执行该命令的代码时,它会调用该命令的
execute
函数,这就是您在问题中提供的函数。因此,主js文件将执行以下操作:
mutecommand.execute(message,args)

执行此操作时,它已将函数的第一个参数的值设置为
message
,将第二个参数的值设置为
args
。因此,当我们在您的问题中输入代码时,
async
变量现在包含消息,
message
变量现在包含命令的参数,
args
变量未定义。由于命令的参数只是一个值数组,而不是带有
Message.content
属性或
.split()
方法的
Message
对象,因此您得到的错误是
TypeError:无法读取未定义的
的属性“split”

发现问题

现在,这个问题应该是相当简单的,可以自己调试和解决。让我们更仔细地看一下错误消息:

TypeError: Cannot read property 'split' of undefined
错误告诉了我们什么?它告诉我们,您的代码试图拆分未定义的内容。那你在哪里分东西?代码中只有一个地方会发生这种情况:
const split=content.trim().split(“”)
。因此,根据这些信息,错误告诉我们
content.trim()
未定义(这意味着
content
本身必须未定义,因为
.trim()
是如何工作的)

现在我们知道,
内容
是未定义的。为什么它没有定义,我们在哪里定义内容?好的,我们在这里做:
const{content,channel,indications}=message
。我们没有得到任何语法错误,而且语法确实是正确的,因此
content
的定义是正确的。这意味着
内容
可以取消定义的唯一方法是
消息
没有
message.content
属性

所以如果
message.content
未定义,并且我们知道所有消息都有内容,那么
message
是什么?这就是调试的作用。您可以使用一个简单的
console.log(message)
(注释中建议的)手动调试它。当您记录此信息时,您会得到以下结果:
['mute',''1','m']

嗯,那看起来不是很熟悉吗?这是一个数组,包含命令的名称、名称、持续时间和持续时间类型。从命令的语法可以看出,这是命令参数的数组。现在您知道
消息
变量包含参数。这可能是由以下两个原因之一造成的:要么是命令处理程序错误地调用
execute
方法,要么是函数的参数混乱/混淆。如果您的bot中有任何其他工作命令,您可以排除第一个原因,这清楚地确定了您出错的原因(第二个原因):“您的函数参数混乱/混淆”

如果您接着查看一个示例/模板bot(使用与bot相同的格式,与您正在使用的教程不同),并将其
execute
与您自己的进行比较,您将能够快速轻松地找出问题所在。你需要学会自己经历这类过程,并尝试自己解决这些简单的问题。如果您在尝试自己调试问题很长一段时间后仍然被卡住,那么您可以使用StackOverflow,但这不是您遇到问题时可以使用的地方;首先试着自己寻找解决方案,因为你会发现你遇到的大多数问题都有非常简单的解决方法

解决方案

这是c
module.exports = {
    name: 'mute',
    description: "mute",
    async execute(message, args) {