【问题标题】:Discord <@!userid> vs <@userid>不和谐 <@!user id> 和 <@userid>
【发布时间】:2017-12-29 09:23:54
【问题描述】:

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

在某些服务器上,当您提及用户时,它会在控制台中以&lt;@!userid&gt; 的形式返回,而在其他服务器上,它会以&lt;@userid&gt; 的形式返回。 我的机器人有一个简单的积分/等级系统,它保存在一个 JSON 文件中为&lt;@!userid&gt;,所以在某些服务器上尝试通过提及他们来查看用户积分时会起作用,而在其他服务器上则不会。

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

感谢您的帮助!

【问题讨论】:

  • 请添加一个最小的代码示例来重现您尝试解决的错误。

标签: node.js points discord userid


【解决方案1】:

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

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();

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

var memberID = member.id;

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 2021-06-18
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2012-10-19
    • 2022-11-18
    相关资源
    最近更新 更多