Discord <@!user id> 和 <@userid>

Discord <@!userid> vs <@userid>

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

在某些服务器上,当您提及用户时,它在控制台中 returns 为 <@!userid>,而在其他服务器上它 returns 为 <@userid>。 我的机器人有一个简单的积分/等级系统,它在 JSON 文件中保存为 <@!userid>,因此在某些服务器上,当尝试通过提及用户来查看用户积分时,它们会起作用,而在其他服务器上它不会。

有人知道如何解决这个问题吗?我试图多次找到答案,但我不想让它保存两次,一次是 <@!userid>,然后是 <@userid>。如果这是解决问题的唯一方法,那么我理解。

感谢您的帮助!

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

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.)
    });

您可以直接从标签访问成员对象(如果他们在消息中标记了他们)。

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

就这样,无需任何正则表达式,您可以获得完整的成员对象并保存他们的 ID。

var memberID = member.id;