【问题标题】:I am trying to make a discord.js avatar command, and the mentioning portion doesn't work correctly我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作
【发布时间】: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

标签: javascript node.js bots discord discord.js


【解决方案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您的回答添加解释并说明适用的限制和假设。
        猜你喜欢
        • 1970-01-01
        • 2020-11-15
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 2019-04-13
        • 2022-07-13
        • 2021-08-17
        相关资源
        最近更新 更多