首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不一致<@!userid> vs <@userid>

不一致<@!userid> vs <@userid>
EN

Stack Overflow用户
提问于 2017-07-24 04:26:35
回答 1查看 12.3K关注 0票数 5

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

在某些服务器上,当您提到一个用户时,它在控制台中返回为<@!userid>,而在另一些服务器上返回为<@userid>。我的机器人有一个简单的点数/关卡系统,它以<@!userid>格式保存在一个JSON文件中,所以在一些服务器上,当试图通过提及用户的点数来查看它们时,它会起作用,而在另一些服务器上则不起作用。

有谁知道怎么解决这个问题吗?我已经多次尝试寻找答案,我不想让它保存两次,一次保存为<@!userid>,然后保存为<@userid>。如果这是修复它的唯一方法,那么我可以理解。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 06:03:21

<@!userID>中的感叹号表示它们在该服务器中设置了昵称。没有感叹号的情况下使用它更可靠,因为它在任何地方都可以工作。此外,您应该保存用户的id,而不是整个提到的内容( "<@userid>")。使用正则表达式解析出额外的符号。

代码语言:javascript
复制
var user = "<@!123456789>" //Just assuming that's their user id.
var userID = user.replace(/[<@!>]/g, '');

这就给了我们123456789。他们的用户id。当然,您可以通过两种方式轻松地获取user对象(您很可能会获得它们的用户名),如果它们位于您使用该命令的服务器中,您可以只需

代码语言:javascript
复制
var member = message.guild.member(userID);

如果它们不在服务器中,而您仍然想要访问它们的user对象,那么;

代码语言:javascript
复制
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.)
    });

你也可以通过直接从标签访问成员对象(如果他们在消息中加了标签的话)。

代码语言:javascript
复制
var member = message.mentions.members.first();

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

代码语言:javascript
复制
var memberID = member.id;
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45269613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档