请修复错误:"TypeError: Cannot read property 'id' of undefined."



我正试图为朋友的服务器编码一个不和谐机器人。它应该是一个有趣的机器人,所以我认为添加一个垃圾邮件命令会很有趣。但我做的时候总是出错。有人能帮我解决这个错误吗?代码和错误都给出如下:

当我执行命令-spam @[user]时,它工作正常。但如果有人输入错误,比如-spam [random characters],它会显示错误

代码:

client.on("message", msg => {
if(msg.content.startsWith(prefix+'spam ')){
let mentions = msg.mentions.members.first().id;
if(!mentions) return msg.reply("I'm sorry! That user does not exist.")
for(var i=1;i<=5;i++) {
msg.channel.send('<@'+mentions+'>')
}
}
})

错误是

TypeError: Cannot read property 'id' of undefined
at Client.<anonymous> (/home/runner/VADER-Bot/index.js:44:44)
at Client.emit (events.js:326:22)
at Client.EventEmitter.emit (domain.js:483:12)
at MessageCreateAction.handle (/home/runner/VADER-Bot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/runner/VADER-Bot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/runner/VADER-Bot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
at WebSocketShard.onPacket (/home/runner/VADER-Bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
at WebSocketShard.onMessage (/home/runner/VADER-Bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
at WebSocket.onMessage (/home/runner/VADER-Bot/node_modules/ws/lib/event-target.js:132:16)
at WebSocket.emit (events.js:314:20)
repl process died unexpectedly: exit status 1

您可以使用可选链接(?.)。如果之前的值为空,则返回undefined或null。如果不是,则转到下一个属性(本例中为id)

let mentions = msg.mentions.members.first()?.id //notice the '?.'
if(!mentions) return msg.reply("I'm sorry! That user does not exist.")

如果没有提到任何人,也不会抛出错误,并且会转到"I'm sorry…"消息。

编辑:由于您的评论,似乎您正在使用旧版本的node.js。这有点长,但应该能达到目的。

const check = msg.mentions.members.first()
if(check) let mentions = check.id

函数msg.mentions.members.first()返回未定义,尝试记录这个大对象的每个部分,看看您缺少变量的地方。

msg.mentions.members.first()是未定义的,这是预料之中的,因为他们输入了-spam[不包含用户的东西]

尝试检查msg.mentions.members.first()是否存在,如果存在则获取id。如果没有,那么不要这样做,因为你会得到一个错误。

client.on("message", msg => {
if(msg.content.startsWith(prefix+'spam ')){
let mentions = msg.mentions.members.first();
if(!mentions) return msg.reply("I'm sorry! That user does not exist.")
for(var i=1;i<=5;i++) {
msg.channel.send('<@'+mentions.id+'>')
//etc
}
}
}

分别在let mentions = msg.mentions.members.first().id;上调用first()函数,然后将id分配给提及。首先,确保msg.mentions.members中的每个对象都有定义。

const object1 = { a: 'cat', b: 123, c: true }。如果你想访问b的值,你可以输入const bValue = object1.b。同理,const object1 = { a: { b: 'Dog' } },要访问a的值,const aValue = object1.a.b就是答案。在你的例子中,你需要检查在msg中是否有一个对象叫做提及,在提及中是否有成员在对象成员中是否有一个函数这是非常不可能的。首先检查let members = msg.mentions.members是否存在。如果不是,你会再次得到TypeError: Cannot read property 'members' of undefined。希望这足够清楚。

其他人也这么说过。但你说你是新手,所以我会试着详细说明。你得到的是:

let mentions = msg.mentions.members.first().id;
if(!mentions) return msg.reply("I'm sorry! That user does not exist.")

它给你这个错误是因为你正在检查用户是否存在,在你得到用户的ID后,你应该先检查他们是否存在。它不能将提及设置为ID,因为msg.mentions.members.first()返回undefined。

let mentions = msg.mentions.members.first(); // set mentions variable to the member object
if(!mentions) return msg.reply("I'm sorry! That user does not exist."); // check if user exists
mentions = mentions.id; // set mentions to the id of the mentioned user

相关内容

最新更新