Discord机器人spam命令触发TypeError错误的排查求助
修复Discord机器人Spam命令的TypeError问题
嘿,这个问题很常见!咱们来一步步解决它:
错误原因分析
你遇到的TypeError: Cannot read property 'id' of undefined,本质是因为当用户输入错误格式(没有正确@某个存在的服务器成员)时,msg.mentions.members.first()会返回undefined——这时候你直接去访问它的.id属性,自然就会报错啦。你的代码里先尝试取.id,再检查是否存在,顺序搞反了!
修复后的代码
把代码调整成先检查提到的成员是否存在,再获取它的ID:
client.on("message", msg => { if(msg.content.startsWith(prefix+'spam ')){ // 先获取提到的成员对象,不要直接取id let mentionedMember = msg.mentions.members.first(); // 先判断是否有有效提及,没有就直接返回提示 if(!mentionedMember) { return msg.reply("I'm sorry! That user does not exist."); } // 确认成员存在后,再获取ID let mentions = mentionedMember.id; for(var i=1;i<=5;i++) { msg.channel.send('<@'+mentions+'>') } } })
额外优化小技巧
其实你还可以更简洁一点,直接用获取到的mentionedMember对象发送消息,不用拼接ID:
// 把循环里的发送语句改成这个 msg.channel.send(mentionedMember);
这样既避免了错误,代码也更易读~
内容的提问来源于stack exchange,提问作者Omega
相关产品推荐
相关产品推荐

