开发者问题收集

类型错误:无法读取未定义的属性“first”

2020-08-28
1280
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.`
   );
  }
 }
});

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

2个回答

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

mentions.users.first();

MessageMentions docs


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

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

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

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

然后,您使用 Guild.member() 函数 将该 User 对象转换为 GuildMember 对象:

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

但是 message.members 返回提及的每个 GuildMember 的集合,从而无需转换 User 对象稍后会在代码中更改为 GuildMember ,因为它已经是 GuildMember

Lioness100
2020-08-28

它实际上是 mentions.user s .first() 。 请参阅 文档

2020-08-28