【问题标题】:How to display mentiones users avatar in an embed discord.js如何在嵌入的 discord.js 中显示提及用户头像
【发布时间】:2020-12-19 09:45:47
【问题描述】:

我正在尝试创建用户信息命令,但在显示人物头像时遇到了问题。我的命令应该对此作出回应:&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,也会发生同样的事情。但是,如果我在命令后面什么都不放(所以它会显示我的信息),它就可以工作。我试图获得的一个示例在附件中。

它在嵌入中正确显示,但前提是它显示我的,否则它会崩溃。有什么办法解决吗?

【问题讨论】:

  • 使用一些 try/catch 块和一些日志记录,然后回来告诉我们崩溃的原因。
  • 我唯一得到的是:userinfoget.displayAvatarURL is not a function
  • 那么members.cache.get() 和mentions.members.first() 没有返回任何东西,或者没有按时返回任何东西。缓存查询几乎肯定是异步的。
  • @Nathan Hawks 我在记录 userinfoget 值时犯了一个错误,我把它放在了导致机器人崩溃的代码之后。现在我已经移动了它,它在所有 3 种情况下都以完全相同的形式记录它(例如 )。

标签: javascript node.js discord.js


【解决方案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
};

【讨论】:

  • 没有任何改变,如果我提到某人/输入某人的 ID @Jakye,我仍然会收到“userinfoget.displayAvatarURL 不是函数”错误
  • 不,它以相同的方式记录所有 3 个场景,例如
  • @mkpanda userinfogetGuildMember,而不是 UserGuildMember 没有 displayAvatarURL 方法。相反,请尝试:userinfoget.user.displayAvatarURL()
  • 现在它只有在我 ping 某人或将他们的 ID 放在那里时才有效。现在我做到了,所以我的旧代码只有在它显示有关执行命令的用户的信息时才会执行,而新代码只有在它显示有关其他人的信息时才会执行。它有效,但它确实效率低下,所以如果有任何修复,我会很高兴:)
  • 我已经更新了代码。你能再试一次并告诉我你是否遇到同样的问题吗?您需要改变的只是定义userinfoget的方式。
猜你喜欢
  • 1970-01-01
  • 2020-12-21
  • 2020-05-20
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多