所以我正在使用Node.JS / Discord.JS创建一个机器人,我有一个问题。
在某些服务器上,当您提到一个用户时,它在控制台中返回为<@!userid>,而在另一些服务器上返回为<@userid>。我的机器人有一个简单的点数/关卡系统,它以<@!userid>格式保存在一个JSON文件中,所以在一些服务器上,当试图通过提及用户的点数来查看它们时,它会起作用,而在另一些服务器上则不起作用。
有谁知道怎么解决这个问题吗?我已经多次尝试寻找答案,我不想让它保存两次,一次保存为<@!userid>,然后保存为<@userid>。如果这是修复它的唯一方法,那么我可以理解。
谢谢你的帮忙!
发布于 2017-07-24 06:03:21
<@!userID>中的感叹号表示它们在该服务器中设置了昵称。没有感叹号的情况下使用它更可靠,因为它在任何地方都可以工作。此外,您应该保存用户的id,而不是整个提到的内容( "<@userid>")。使用正则表达式解析出额外的符号。
var user = "<@!123456789>" //Just assuming that's their user id.
var userID = user.replace(/[<@!>]/g, '');这就给了我们123456789。他们的用户id。当然,您可以通过两种方式轻松地获取user对象(您很可能会获得它们的用户名),如果它们位于您使用该命令的服务器中,您可以只需
var member = message.guild.member(userID);或如果它们不在服务器中,而您仍然想要访问它们的user对象,那么;
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;https://stackoverflow.com/questions/45269613
复制相似问题