javascript - “TypeError:无法读取未定义的属性 'id'” Discord.js 错误
问题描述
我正在用 Discord.js 编写一个 Discord 机器人。我有下面的代码,但是当我运行命令时出现错误:"person.roles.remove(mainrole.id); TypeError: Cannot read property 'id' of undefined"
我不知道如何或确切地定义什么。任何帮助将不胜感激,在此先感谢。
bot.on('message', msg => {
let args = msg.content.substring(PREFIX.length).split(" ");
switch (args[0]) {
case 'mute':
let person = msg.guild.member(msg.mentions.users.first() || msg.guild.member.cache.find(args[1]))
if (!person) {
return msg.reply("Couldn't find that user");
}
let mainrole = msg.guild.roles.cache.find(role => role.name == "Member");
let muterole = msg.guild.roles.cache.find(role => role.name === "muted");
if (!muterole) {
return msg.reply("Couldn't find mute role");
}
let time = args[2];
if (!time){
return msg.reply("Please specify a time")
}
person.roles.remove(mainrole.id);
person.roles.add(muterole.id);
msg.channel.send(`@${person.user.tag} has been muted for @${ms(ms(time))}`);
setTimeout(function (){
person.roles.add(mainrole.id);
person.roles.remove(muterole.id);
msg.channel.send(`@${person.user.tag} has been unmuted`)
}, ms(time));
break;
}
})
解决方案
似乎您没有满足此条件,role => role.name == "Member"
这mainrole
就是undefined的原因。
您可以避免错误是:
if(mainrole && mainrole.id) {
person.roles.remove(mainrole.id);
person.roles.add(muterole.id);
msg.channel.send(`@${person.user.tag} has been muted for @${ms(ms(time))}`);
setTimeout(function(){
person.roles.add(mainrole.id);
person.roles.remove(muterole.id);
msg.channel.send(`@${person.user.tag} has been unmuted`)
}, ms(time));
}
推荐阅读
- python-3.x - 抓取优惠券代码网站时出现空响应 (slickdeals)
- scipy - 均值的置信区间 - scipy 实现与数学公式不符
- teradata - 查找最大值(日期)而不考虑其他列
- excel - 如何修复转置公式,这样我就不必一次又一次地输入
- r - 如何更改数据标签的颜色
- c# - 在以下上下文中我应该使用什么 - 方法重载或使用泛型?
- html - React.js 中的图像和文本滑块响应问题
- machine-learning - 为什么具有低维潜在空间的变分自动编码器是更好的生成模型?
- google-bigquery - bigquery 中设置 search_path 的等效语句是什么?
- powershell - 运行命令时自定义powershell背景颜色会恢复吗?