如何在嵌入的discord.js中显示提及用户的头像

时间:2020-08-31 09:13:27

标签: javascript node.js discord.js

我正在尝试执行用户信息命令,但是在显示人的化身时遇到了问题。我的命令应该对此做出回应:&profile {user ping/user ID}

因此,如果您执行&profile @user#0001,它将显示user#0001的信息。如果您执行&profile 123456789123456789,它将显示ID为123456789132456的用户的信息。如果您不提&profile,便会显示有关您的信息。

每当我运行&profile时,它都会毫无问题地发布嵌入内容。但是,如果我提及某人或输入某人的ID,则会崩溃。这是我的代码:

const { DiscordAPIError } = require("discord.js");
const Discord = require("discord.js");

module.exports = {
  name: "profile",
  description: "The bot will return the info about the user",
  execute(message, args) {
    let userinfoget =
      message.guild.member(message.mentions.members.first()) ||
      message.guild.members.cache.get(args[0]);
    //var userinfoget = message.mentions.members.first();
    //var patter = message.author;
    //var randompatemote = Math.floor(Math.random() * 3) + 1;
    if (!userinfoget) {
      userinfoget = message.author;
    }

    console.log(`User = ${userinfoget}`);

    const embed = new Discord.MessageEmbed()
      .setTitle(`User info`)
      .setColor("#DAF7A6")
      .setAuthor(`${userinfoget.tag}`, userinfoget.displayAvatarURL())
      .addFields({ name: `${userinfoget.tag}`, value: `Here will be the ID` });
    message.channel.send(embed);
  },
};

当我提到某人时,它会引发错误:

userinfoget.displayAvatarURL is not a function

如果我输入ID,也会发生同样的事情。但是,如果我在命令后面没有放置任何内容(因此它显示了我的信息),那么它将起作用。附件中是我要获取的示例。

Example

它正确显示在嵌入中,但仅当它显示我的时,否则崩溃。有什么办法解决吗?

1 个答案:

答案 0 :(得分:1)

我假设错误来自此行:

let userinfoget = message.guild.member(message.mentions.members.first()) || message.guild.members.cache.get(args[0])

Guild.member()方法将User对象转换为GuildMember对象。 message.mentions.members.first()(如果已定义)已经是GuildMember对象。

您需要做的就是更改上述行:

let userinfoget = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.member(message.author)

您现在可以删除以下行:

if (!userinfoget) {
    userinfoget = message.author
};