【问题标题】:TypeError: Cannot read property 'first' of undefinedTypeError:无法读取未定义的属性“第一个”
【发布时间】:2020-12-17 08:25:03
【问题描述】:
client.on('message', (message) => {
 const { member, mentions } = message;

 const tag = `<@${member.id}>`;

 if (message.content.startsWith(`${prefix}ban`)) {
  if (
   member.hasPermission('ADMINISTRATOR') ||
   member.hasPermission('BAN_MEMBERS')
  ) {
   const target = mentions.user.first();
   if (target) {
    const targetMember = message.guild.members.cache.get(target.id);
    targetMember.ban();
    message.channel.send(
     `${tag} Cet.te ancien.ne membre a été bannii avec succès !`
    );
   } else {
    message.channel.send(`${tag} Merci de spécifier le membre à bannir.`);
   }
  } else {
   message.channel.send(
    `${tag} Tu n'as pas la permission d'effectuer cette commande.`
   );
  }
 }
});

我不确定我的代码中的错误是什么,感谢任何帮助!我也会接受有关如何改进此代码的任何建议。

【问题讨论】:

  • 这不是java,这是javascript。您尝试调用第一个元素的元素未定义,在 Java 中它将为 null。
  • @Stultuske 我总是把标签弄错了,谢谢你纠正我!祝你有美好的一天:)
  • 我认为您只是颠倒了顺序:mentions.first().user 是正确的。

标签: javascript node.js discord.js


【解决方案1】:

user 不是mentions 的属性。而是使用users:

mentions.users.first();

MessageMentions docs


另外,作为一个建议,您可以直接跳到GuildMember 对象,而不是将提及作为User 对象,然后将其转换为GuildMember 对象。

// instead of:
const target = mentions.users.first();

// use:
const target = mentions.members.first();

mentions.users 返回该消息中提到的每个用户的集合。您正在获取第一个 User 对象(首次提及)。

然后使用Guild.member() functionUser 对象转换为GuildMember 对象:

message.guild.members.cache.get(target.id);

然而message.members 会返回每个提到的GuildMember 的集合,无需稍后将User 对象转换为GuildMember在您的代码中,因为它已经是 GuildMember

【讨论】:

  • 我看不出有什么区别,你能给我解释一下吗?
  • 绝对!我用更深入的解释编辑了我的答案,希望有所帮助。
【解决方案2】:

实际上是 mentions.users.first()。 见docs

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2019-08-19
    相关资源
    最近更新 更多