【问题标题】:discord.js V12 userinfo command with id带有 id 的 discord.js V12 userinfo 命令
【发布时间】:2021-02-17 02:05:37
【问题描述】:

嘿,我目前正在做一些你可以做的事情,用户,它将显示有关该用户的用户信息。

if(args.length < 1) {
        var user = message.author;
    } else {
        var user = client.users.cache.get(args[0]);
    }

    if(!user || user == undefined) return message.channel.send("**Error:** An error occurred!");

但“用户”总是未定义,我不知道为什么

【问题讨论】:

  • args[0] 是什么意思。是 ping 的对象还是用户的 id?
  • 我认为在其他部分你想找到一个提到的用户。为此,您必须使用message.mentions.user.first

标签: discord.js


【解决方案1】:

我假设您会在该命令中提及某人。这不起作用的原因是因为 client.users.cache.get 不接受提及,它只接受 memberID。

您应该做的是从消息中获取提及。您可以通过访问 MessageMentions 类来做到这一点。

message.mentions.members.first();

如果您想要/需要使用 ID,那么您的代码就可以使用。如果你想使用名字,你需要使用find() 方法。

client.users.cache.find(u => u.username === args.join(' '));

注意:我们 join(' ') 此处的 args 将其与多字名称一起使用。另请注意,名称只有在拼写正确时才有效,这意味着大写很重要。

【讨论】:

  • 虽然这肯定是有用的信息,但我真的不认为它回答了为什么用户提出undefined的问题。当然,由于他指定他提供用户 ID,我并不认为他在提及任何人。问题与变量范围有关。
【解决方案2】:

我相信您应该使用message.guild.members.cache 而不是client.users.cache。我在这里使用了问号运算符,这就是你的使用方式:

condition ? value_if_condition_is_true : value_if_condition_is_false

我还删除了user == undefined,因为它与!user 完全相同

const memberMention = message.mentions.members.first();

var user = args[0] ? message.guild.members.cache.get(args[0]) : memberMention ? memberMention : message.author;

if (!user) return message.channel.send("**Error:** An error occurred!");

【讨论】:

  • 为什么这是必要的?如果args[0] 返回一个虚假值,您可以假设他们没有提供任何内容,因此message.mentions.members.first() 将无效。
【解决方案3】:

user 的原因始终未定义,因为您将其调用超出范围。

if(args.length < 1) {
        var user = message.author; // the user variable is only valid in this "if" block
    } else {
        var user = client.users.cache.get(args[0]); // the user variable is only valid in this "else" block
    }

    if(!user || user == undefined) return message.channel.send("**Error:** An error occurred!");

相反,您应该将您的代码包含在主 if-else 块中,或者通过不使用变量声明关键字来声明 user 全局变量。

if(args.length < 1) {
        user = message.author; // the user variable is only valid in this "if" block
    } else {
        user = client.users.cache.get(args[0]); // the user variable is only valid in this "else" block
    }

    if(!user) return message.channel.send("**Error:** An error occurred!");
    console.log(user.tag)
    //further code here...

我还为您清理了一些冗余:if(!user) 也将覆盖 undefined,因此无需包括 || user == undefined

【讨论】:

  • 澄清一下:我想让玩家输入一个玩家ID
猜你喜欢
  • 2021-01-09
  • 2021-01-01
  • 2021-02-18
  • 1970-01-01
  • 2021-01-18
  • 2021-04-14
  • 2021-04-19
  • 2021-04-18
  • 2021-04-23
相关资源
最近更新 更多