如何在此嵌入内容中显示提及用户的信息? Discord.js

时间:2020-09-12 16:40:49

标签: node.js discord discord.js

我希望此代码可以成为您可以提及某人并获取其标签,createdAt和id的地方,但是如果您不提及某人,则仍将其保留在该位置,它仅显示您的标签,createdAt和id。

我该怎么做?

else if (message.content === `${prefix}user`) {
    
    const embed = new Discord.MessageEmbed()
    .setTitle('User Information')
    .addField('Username', message.author.tag)
    .addField('Join Date', message.author.createdAt)
    .addField('User ID', message.author.id)
    .setColor(Math.floor(Math.random() * 16777214) + 1)
    .setTimestamp()
    .setFooter("this is a footer")
    message.channel.send(embed)
    }

1 个答案:

答案 0 :(得分:1)

因此,如果我正确理解,在您当前的代码中,您要做的就是显示消息作者的信息。而且,您想要做的就是能够在有提及的情况下显示消息内容中已提及的用户的信息。

好的!首先,请注意不和谐提及的形式如下: <@!012345678901234567>,其中一堆数字是您提到的用户的ID。

我想您的命令将是以下两种方式之一:

  • ${prefix}user
  • ${prefix}user <mention>

因此,不要检查消息的确切值,而是要检查内容的开头,然后检查是否有剩余参数。

此外,如果您提到某人,则必须获取用户才能获取其信息。您可以使用所在的不和谐公会来做到这一点。

这是示例代码:

if (message.content.startsWidth(`${prefix}user`)) {
    // We create a 'user' which will either be
    // the author of the message or the mention
    let user = message.author
    // get rid of the command name to leave the mention if there is one
    const mention = message.content.slice(`${prefix}user `.length)
    
    // A simple test using regex to see if a mention is there
    if (/^<@!\d+>$/.test(mention)) {
        // get the actual id
        const userId = mention.slice(3, mention.length - 1)
        // fetch the user from the guild you're in.
        // Make sure to have MY_GUILD defined somewhere.
        // Or you can use 'message.guild' directly.
        // Also make sure to do that in an async function
        // for the await keyword to work.
        user = (await MY_GUILD.members.fetch(userId)).user
    
    // replace 'message.author' by our defined 'user' variable
    const embed = new Discord.MessageEmbed()
    .setTitle('User Information')
    .addField('Username', user.tag)
    .addField('Join Date', user.createdAt)
    .addField('User ID', user.id)
    .setColor(Math.floor(Math.random() * 0xffffff) + 1)
    .setTimestamp()
    .setFooter("this is the footer of my answer")
    message.channel.send(embed)
}

编辑

按照您的要求,这里是有关MY_GUILD和异步功能的更多信息。

基本上,discord.js中的公会代表您的不和谐服务器。例如,在您的代码中,您可以通过编写message.guild来访问所拥有消息的行会。但是你也可以通过做得到公会

bot.guilds.fetch('<id of the guild here>')

其中bot是您定义的不和谐客户端。

最后,您可以知道如何通过checking the discord.js documentationdiscord.js获取所需的对象。

现在什么是异步功能?

在Javascript中,您可以异步执行函数。 如果您有这些说明:

doSomething(); // takes 2 seconds
doSomethingElse(); // takes 3 seconds
console.log("hello");

如果功能doSomethingdoSomethingElse是同步的,它们将阻塞您的代码。您将等待2秒钟,以完成doSomething,然后再等待3秒钟,以完成doSomethingElse,然后最终将打印console.log("hello");

但是,如果它们是异步的,它们将与您的代码并行运行。因此,console.log("hello");将立即执行,然后您将等待2秒以使doSomething完成,然后再等待1秒以使doSomethingElse完成,因为它已经并行运行。

所有这些都涉及使用Promise对象。我推荐有关此主题的Fireship短片: