Javascript TypeError:无法读取属性';等待消息';与其他项相同时为空

Javascript TypeError:无法读取属性';等待消息';与其他项相同时为空,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,代码: if(msg.channel.type==“dm”)返回;//如果dm通道返回 让person=msg.author; if(msg.content.toLowerCase()=“!apply”){ 派遣(盟友); person.dmChannel .awaitMessages((m)=>m.author.id==person.id,{max:1,时间:300000}) 。然后((收集)=>{ if(collected.first().toLowerCase()=“是”){ //代码。。

代码:

if(msg.channel.type==“dm”)返回;//如果dm通道返回
让person=msg.author;
if(msg.content.toLowerCase()=“!apply”){
派遣(盟友);
person.dmChannel
.awaitMessages((m)=>m.author.id==person.id,{max:1,时间:300000})
。然后((收集)=>{
if(collected.first().toLowerCase()=“是”){
//代码。。。
}
})
.catch(person.send(other));//如果dm
}//如果!应用

我真的不知道这有什么问题,因为在我添加这一点之前,我一直都很好。不知道为什么。有人有什么想法吗?

您将
person
定义为
message.author.send
函数。然后调用
person
上的
send()
函数。这就像写作:

函数日志(str){
返回console.log(str);
};
常量记录器=日志;
logger.log();//logger是一个函数,没有任何属性
你应该做的是:

//使用这个,因为以后需要整个author对象
const person=message.author;
人。发送(…);
//虽然这在理论上适用于(仅适用于send()函数)
const person=message.author.send;
人(……);
回过头来看,出现错误的原因是,如上所述,正确的函数实际上没有触发。这意味着从未发送过DM,
dmChannel
从未打开,因此等于
null

另外,由于
person
被定义为一个函数,因此它首先没有
dmChannel
属性


如果您仍然收到相同的错误,则可能意味着在您请求
dmChannel
之前,消息尚未完成发送。有两种方法可以解决这个问题

首先,您可以使用
等待消息的发送,也可以使用承诺返回

//等待方法;确保运行此操作的消息事件是异步的
等待某人。派遣(盟友);
person.dmChannel
.awaitMessages((m)=>m.author.id==person.id,{max:1,时间:300000})
//承诺法
person.send(ally).然后((msg)=>{
味精频道
.awaitMessages((m)=>m.author.id==person.id,{max:1,时间:300000})
});

该错误表示
person.dmChannel
null
这是否回答了您的问题?不,因为我用的是过滤器。我假设这是完全相同的代码,它来自于我的另一个机器人,它工作得非常好。我的过滤器非常好,我把它改成了其他人的过滤器,它完全没有区别。请有人帮助我,我真的希望这是固定的。改变的人是让人=味精。作者;仍然收到相同的错误尝试
等待
等待
发送
人。发送()
功能我不知道如何等待机器人发送东西,请链接一个网站来帮助我,或详细说明?。我的意思是你把
person.send()
改为
等待person.send()