Node.js 无法读取属性";名称“;指未定义的while“;名称“;isn';甚至在代码中都没有

Node.js 无法读取属性";名称“;指未定义的while“;名称“;isn';甚至在代码中都没有,node.js,properties,undefined,discord.js,Node.js,Properties,Undefined,Discord.js,这是最近才开始发生的,不确定这是否是node或discord.js或其他方面的错误,但我在代码中找不到任何可能导致问题的东西 有问题的程序是我制作的一个不和谐机器人程序。该错误只发生在一个命令期间,该命令将向所述用户发送消息,并将一些信息存储在日志中以备以后使用。有关守则: if (!rating) { let index = Math.floor(Math.random() * PARANOIAQUESTIONS["pg13"].length) message.mentions

这是最近才开始发生的,不确定这是否是node或discord.js或其他方面的错误,但我在代码中找不到任何可能导致问题的东西

有问题的程序是我制作的一个不和谐机器人程序。该错误只发生在一个命令期间,该命令将向所述用户发送消息,并将一些信息存储在日志中以备以后使用。有关守则:

if (!rating) {
    let index = Math.floor(Math.random() * PARANOIAQUESTIONS["pg13"].length)
    message.mentions.users.first().send("Question from " + message.author.username + ": \n" + PARANOIAQUESTIONS["pg13"][index] + "\nReply with '+ans [answer]'.").catch((err) => {message.channel.send("That user has their DMs set to closed."); console.log(err)})
    paranoiaLog[message.mentions.users.first()] = message.channel
    askedQuestions[message.mentions.users.first()] = PARANOIAQUESTIONS["pg13"][index]
} else {
    let index = Math.floor(Math.random() * PARANOIAQUESTIONS["r"].length)
    message.mentions.users.first().send("Question from " + message.author.username + ": \n" + PARANOIAQUESTIONS["r"][index] + "\nReply with '+ans [answer]'.").catch((err) => {message.channel.send("That user has their DMs set to closed."); console.log(err)})
    paranoiaLog[message.mentions.users.first()] = message.channel
    askedQuestions[message.mentions.users.first()] = PARANOIAQUESTIONS["r"][index]
}
此代码段(略有不同)在整个函数中重复多次,根据发送命令的服务器和通道的特定权限而有所不同。错误可能发生在这些重复中的任何一次,所以我不认为这是一个奇怪的打字错误(加上它刚刚开始发生)。奇怪的是:错误消息指向49:94,而代码在1100行左右。第48-52行:

client.on('channelCreate', (channel) => {
    console.log("Channel created: " + channel.name + ", " + channel.id + " in " + channel.guild.name + " (" + channel.guild.systemChannelID + ")")
    serverSettingsList[channel.guild.systemChannelID][channel.id] = {"muted?": 0, "truth pg": 1, "truth pg13": 1, "truth r": 0, "dare pg": 1, "dare pg13": 1, "dare r": 0, "dare d": 1, "dare irl": 1, "wyr pg": 1, "wyr pg13": 1, "wyr r": 0, "nhie pg": 1, "nhie pg13": 1, "nhie r": 0, "paranoia pg":1, "paranoia pg13": 1, "paranoia r": 0}
    fs.writeFileSync('serversettingslist.json', JSON.stringify(serverSettingsList, null, '\t'))
})
字符94是
channel.guild.name
中“guild”中的l。我不知道为什么它会指向我这里,而这段代码当时甚至没有运行。我将
console.log
s放在正在运行的函数上,以尝试查看到底是哪一行导致了错误,但是所有正确的内容都会记录下来,然后错误就会抛出。最重要的是,它只被
.catch
语句捕获了一半的时间,所以我真的不知道它是什么

编辑:正如其他人所注意到的,问题是channel.guild没有为DM频道定义。我假设
channelCreate
代码在给我发消息时不会运行,因为自从我开始制作以来,我就已经用bot打开了一个DM,并且忘记了
channel
对象不仅限于服务器,也适用于DMs和组DMs。谢谢你帮我认识到我的错误

在这一行代码中:

console.log("Channel created: " + channel.name + ", " + channel.id + " in " + channel.guild.name + " (" + channel.guild.systemChannelID + ")")
您有多个对
.name
的引用。根据错误中的列号,似乎
channel.guild
未定义的
,因此当您尝试登录
channel.guild.name
时,您会收到错误


在最新版本的Javascript中,
?。
可以用于此。在早期版本中,在访问
channel.guild.name

之前,您只需检查
channel.guild
是否有效,您是在DMs中还是在服务器中发送消息<代码>频道.公会可以是未定义的,如果消息是DM@jfriend00哇,我觉得自己是个十足的白痴。我已经检查过了,但是我用我无限的智慧检查了两次
channel
,而不是
channel
,然后是
channel.guild
。我将用实际发生的事情更新帖子。