TypeError:无法读取未定义的属性“第一个" [英] TypeError: Cannot read property 'first' of undefined

查看:36
本文介绍了TypeError:无法读取未定义的属性“第一个"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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.`
   );
  }
 }
});

我不确定代码中的错误是什么,我们将不胜感激!我还将就如何总体上改进此代码提出任何建议.

I'm not sure what the error in my code is, any help is appreciated! I would also take any suggestions on how to improve this code in general.

推荐答案

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

user is not a property of mentions. Instead use users:

mentions.users.first();

MessageMentions docs

还有一点建议,不是将提及作为 User 对象,而是将其转换为 GuildMember 对象,您可以直接跳到 GuildMember 对象.

Also, as a bit of a suggestion, instead of getting the mention as a User object, then turning it into a GuildMember object, you could just skip straight to the GuildMember object.

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

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

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

mentions.users returns a collection of every user that was mentioned in that message. You are taking the first User object (first mention).

您正在然后使用User 对象变成一个 GuildMember 对象.org/#/docs/main/stable/class/Guild?scrollTo = member"rel =" nofollow noreferrer> Guild.member()函数:

You are then turning that User object into a GuildMember object using the Guild.member() function:

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

但是 message.members 返回所提到的每个 GuildMember 的集合,而无需转换 User 对象在以后的代码中指向 GuildMember ,因为它已经是 GuildMember .

However, message.members returns a collection of every GuildMember that was mentioned, eliminating the need to convert a User object to a GuildMember later in your code, as it would already be a GuildMember.

这篇关于TypeError:无法读取未定义的属性“第一个"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆