Discord< @!userid> vs< @ userid>

时间:2017-07-23 20:26:35

标签: node.js points discord userid

所以我使用Node.JS / Discord.JS创建了一个机器人,我有一个问题。

在某些服务器上,当您提及某个用户时,它会在控制台中以<@!userid>的形式返回,而在其他服务器上则会返回<@userid>。 我的机器人有一个简单的点/级别系统,并且它以<@!userid>的形式保存在JSON文件中,所以在某些服务器上,当试图通过提及它们来查看用户点时,它们会起作用,而在其他服务器上它会赢得&#39;吨。

有没有人知道如何解决这个问题?我已多次尝试找到答案,但我不希望将其保存两次,一次为<@!userid>,然后为<@userid>。如果这是修复它的唯一方法,那么我理解。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

<@!userID>中的感叹号表示他们在该服务器中设置了昵称。使用它没有感叹号更可靠,因为它可以在任何地方使用。此外,您应该使用他们的ID保存用户,而不是整个提及(&#34;&lt; @ userid&gt;&#34;)。使用正则表达式解析额外的符号。

var user = "<@!123456789>" //Just assuming that's their user id.
var userID = user.replace(/[<@!>]/g, '');

哪会给我们123456789。他们的用户ID。当然,您可以通过两种方式轻松获取用户对象(您最有可能获得用户名),如果他们在您使用该命令的服务器中,则可以

var member = message.guild.member(userID);

如果他们不在服务器中,您仍然想要访问他们的用户对象,那么;

client.fetchUser(userID)
    .then(user => {
        //Do some stuff with the user object.
    }, rejection => {
        //Handle the error in case one happens (that is, it could not find the user.)
    });

您可以 ALSO 直接从标记中访问成员对象(如果他们在邮件中标记了这些对象)。

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

就这样,没有任何正则表达式,你可以获得完整的成员对象。并保存他们的身份。

var memberID = member.id;