discord.js嵌入带有提及的个人资料图片命令

时间:2020-10-30 23:54:06

标签: javascript node.js discord.js

我正在使用Visual Studio Code应用程序在discord.js中创建一个机器人。我正在尝试为个人资料图片创建命令,因此,当您键入-pfp时,它将显示您的个人资料图片,而当您键入-pfp @user时,将显示您提及的人的个人资料图片。 (-是前缀)。尽管该漫游器仅发送消息,但没有带有图片的嵌入部分。当我提到其他人时,它所做的只是在提及我而不是用户时。

这就是我所拥有的:

    if (!message.content.startsWith(prefix) || message.author.bot) return;
        if (message.content.startsWith(prefix + 'pfp')) {
            message.channel.send('Here is <@'+ message.author.id+ ">'s pfp :)")
            const avatarEmbed = new Discord.MessageEmbed()
                .setColor('#446580')
                .setAuthor('user.username')
                .setImage(message.author.displayAvatarURL());
        } else if (message.content.startsWith(prefix+ 'pfp'+ message.mentions.users)) {
            message.channel.send('Here is <@'+ message.user.id+ ">'s pfp :)")
            const avatarEmbed = new Discord.MessageEmbed()
                .setColor('#446580')
                .setAuthor('user.username')
                .setImage(message.user.displayAvatarURL());
        }
});

1 个答案:

答案 0 :(得分:1)

这里有两个部分。

首先,漫游器仅发送消息,而不发送嵌入消息,因为您只发送了消息。您需要单独的一行代码来发送嵌入内容。

message.channel.send(avatarEmbed);

第二,该机器人只会因为此message.content.startsWith(prefix + 'pfp')标记您。您在作者和其他人之间进行区分的方式意味着它将总是与第一种情况匹配,这意味着该消息始终以prefix + pfp开头,无论您是否在此之后加上标签。

现在,您有几种方法可以解决此问题,但我会这样做。

首先,您定义一个新变量,将其称为pfpMember,然后将其分配给您标记的第一人或消息的作者。

var pfpMember = message.mentions.members.first() || message.member;

现在我们有一个固定成员,该成员可以是被标记的人,也可以是作者,我们可以将displayAvatarURL函数分配给该成员。

.setImage(pfpMember.user.displayAvatarURL());

因此您的整个命令应该看起来像这样。

if (message.content.startsWith(prefix + 'pfp')) {
    var pfpMember = message.mentions.members.first() || message.member;
    // we can just put the member object into the string here, that will tag the person
    message.channel.send(`Here is ${pfpMember}'s pfp :)`);

    const avatarEmbed = new Discord.MessageEmbed()
        .setColor('#446580')
        .setAuthor(pfpMemer.user.username)
        .setImage(pfpMember.user.displayAvatarURL());
    
    message.channel.send(avatarEmbed);
}