首页 > 解决方案 > 无法读取未定义的属性“名称”,而“名称”甚至不在代码中

问题描述

这最近才开始发生,不确定是否是 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 是“公会”中的 l channel.guild.name。我不知道为什么当这段代码当时甚至没有运行时它会指向我这里。我将console.logs 放在正在运行的函数中,以尝试确切地查看导致错误的行,但是所有正确的事情都记录下来,然后引发错误。最重要的是,它只被.catch声明抓住了一半的时间,所以我真的不知道它是什么。

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

标签: node.jspropertiesundefineddiscord.js

解决方案


在这行代码中:

console.log("Channel created: " + channel.name + ", " + channel.id + " in " + channel.guild.name + " (" + channel.guild.systemChannelID + ")")

您对.name. 根据错误中的列号,channel.guildundefined您尝试 log 时channel.guild.name,您会收到错误消息。

在最新版本的 Javascript 中,这就是可选链接运算符 ?.的用途。在早期版本中,您只需channel.guild在访问channel.guild.name.


推荐阅读