我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作

Posted

技术标签:

【中文标题】我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作【英文标题】:I am trying to make a discord.js avatar command, and the mentioning portion doesn't work correctly 【发布时间】:2019-08-31 12:02:12 【问题描述】:

我的 discord 机器人中有一个头像命令。当用户使用h.avatar时,它会输出他们的头像,效果很好。每当他们尝试使用h.avatar @user 时,什么都没有发生。 这是我的代码:

  if (message.content.startsWith(config.prefix + "avatar")) 
      if (!message.mentions.users.size) 
        const avatarAuthor = new Discord.RichEmbed()
      .setColor(0x333333)
      .setAuthor(message.author.username)
      .setImage(message.author.avatarURL)
        message.channel.send(avatarAuthor);
        let mention = message.mentions.members.first();
        const avatarMention = new Discord.RichEmbed()
        .setColor(0x333333)
        .setAuthor(mention.user.username)
        .setImage(mention.user.avatarURL)
        message.channel.send(avatarMention);

【问题讨论】:

此问题似乎仍未解决,能否将答案标记为已接受,或者如果您找到了解决方案,请自行回答? @cyliim 【参考方案1】:

你有一个检查if (!message.mentions.users.size) ,它只会在你没有提到某人的情况下运行命令。您要么需要在代码中使用else ,要么这样做:

 if (message.content.startsWith(config.prefix + 'avatar')) 
    const user = message.mentions.users.first() || message.author;
    const avatarEmbed = new Discord.RichEmbed()
        .setColor(0x333333)
        .setAuthor(user.username)
        .setImage(user.avatarURL);
    message.channel.send(avatarEmbed);

const user = message.mentions.users.first() || message.author; 尝试获取提到的用户,但如果找不到任何人,它将使用作者使用的。

也可以这样使用:

if (!message.mentions.users.size) 
    message.channel.send('Nobody was mentioned');
    return;

// continue command here, after guard clause

【讨论】:

【参考方案2】:

没有像 avatarUrl 这样的东西,除非你已经定义了它。 使用此代码获取用户的 url:

message.channel.send("https://cdn.discordapp.com/avatars/"+message.author.id+"/"+message.author.avatar+".jpeg");

只需将message.author 替换为提到的用户

【讨论】:

有。它曾经是一个名为 avatarUrl 的属性,但现在它是一个名为 displayAvatarURL() discord.js.org/#/docs/main/stable/class/… 的方法这个问题来自 2019 年,当时 avatarUrl 是正确的。从那以后情况发生了变化。您不需要自己构建 URL。【参考方案3】:
if(message.content.startsWith(prefix+'av'))
    
        
        if(message.mentions.users.size)
            let member=message.mentions.users.first()
        if(member)
            const emb=new Discord.MessageEmbed().setImage(member.displayAvatarURL()).setTitle(member.username)
            message.channel.send(emb)
            
        
        else
            message.channel.send("Sorry none found with that name")

        
        else
            const emb=new Discord.MessageEmbed().setImage(message.author.displayAvatarURL()).setTitle(message.author.username)
            message.channel.send(emb)
        

【讨论】:

【参考方案4】:

这些是有效答案的更新版本

if (message.content.startsWith(config.prefix + 'avatar')) 
const user = msg.mentions.users.first() || msg.author;
const avatarEmbed = new MessageEmbed()
  .setColor(0x333333)
  .setAuthor(`$user.username's Avatar`)
  .setImage(
    `https://cdn.discordapp.com/avatars/$user.id/$user.avatar.png?size=256`
  );
msg.lineReply(avatarEmbed);

这使用了 discord 的头像 url,和 msg.lineReply(avatarEmbed);是一个将嵌入作为消息回复发送的函数

【讨论】:

【参考方案5】:

我的

if (msg.content.startsWith(prefix + 'avatar')) 
    const user = msg.mentions.users.first() || msg.author;
    const avatarEmbed = new MessageEmbed()
      .setColor('')
      .setAuthor(`$user.username's Avatar`)
      .setImage(
        `https://cdn.discordapp.com/avatars/$user.id/$user.avatar.png?size=256`
      );
    msg.reply(avatarEmbed);
    

)

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review【参考方案6】:
 if (message.content.startsWith(prefix + 'avatar')) 
   let user = message.mentions.users.first();
   if(!user) user = message.author;
   let color = message.member.displayHexColor;
   if (color == '#000000') color = message.member.hoistRole.hexColor;
   const embed = new Discord.RichEmbed()
                   .setImage(user.avatarURL)
                   .setColor(color)
    message.channel.send(embed);
 

【讨论】:

欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。

以上是关于我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

我正在 discord.js 中制作自定义动态嵌入帮助命令,如何嵌入命令信息?

Discord.JS 嵌入:页脚中的用户头像

无法让 Discord.js 在命令中提及用户

我正在尝试制作一个简单的 discord.js 机器人

赠品命令不保存(Heroku)discord.js

discord.js 中的“MessageEmbed 字段值可能不为空”问题