【问题标题】:TypeError: Cannot read the property 'add' of undefinedTypeError:无法读取未定义的属性“添加”
【发布时间】:2021-10-05 00:33:00
【问题描述】:

我一直在尝试让我的不和谐机器人为我的服务器上的成员添加角色,但是每当我运行我的命令时,它都不起作用并且总是说:

TypeError: 无法读取未定义的“添加”属性

我什至尝试用.addRole() 替换.add(),但没有任何效果。

这是我的代码:

command(client, 'add', (message) => {
  const target = message.mentions.members.first
  const role = message.mentions.roles.first

  const embed = new Discord.MessageEmbed()
  .setColor('RANDOM')
  .setDescription(`Added the role ${role}`)

  .then(target.roles.addRole(role));
  })
console.log('Commands are set')

【问题讨论】:

  • 你的discord.js 版本是什么?

标签: javascript node.js discord.js typeerror


【解决方案1】:

有几个错误:

  • mentions.membersmentions.roles 返回具有 first() 方法(不是属性,因此您需要添加括号)的集合
  • 你不处理错误
  • 你不检查是否有提到的角色和成员
  • .setDescription() 不返回承诺,而是返回 MessageEmbed
  • .then() 内部,您应该传递一个函数,但您调用 .addRole() 并传递一个值
  • 如果您使用的是 discord.js v12,addRole() 现在只是 add()

查看下面的代码:

command(client, 'add', async (message) => {
  // first is a method not a property
  const target = message.mentions.members.first();
  const role = message.mentions.roles.first();

  // if something is missing, send an error message
  if (!role) return message.channel.send('You need to mention a role');
  if (!target) return message.channel.send('You need to mention a member');

  try {
    // add the role
    await target.roles.add(role);

    const embed = new Discord.MessageEmbed()
      .setColor('RANDOM')
      .setDescription(`Added the role ${role}`);
    message.channel.send(embed);
  } catch (err) {
    console.err(err);
    message.channel.send('Oops, there was an error. Maybe try again?!');
  }
});

【讨论】:

    【解决方案2】:
    .then(target.roles.addRole(role));
    

    应该是

    .then(() => target.roles.addRole(role));
    

    除此之外,您还需要弄清楚为什么 target.roles 未定义。您可以先登录target

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 2020-12-04
      • 2019-04-21
      • 2020-10-20
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多