所以我使用Node.JS / Discord.JS创建了一个机器人,我有一个问题。
在某些服务器上,当您提及某个用户时,它会在控制台中以<@!userid>
的形式返回,而在其他服务器上则会返回<@userid>
。
我的机器人有一个简单的点/级别系统,并且它以<@!userid>
的形式保存在JSON文件中,所以在某些服务器上,当试图通过提及它们来查看用户点时,它们会起作用,而在其他服务器上它会赢得&#39;吨。
有没有人知道如何解决这个问题?我已多次尝试找到答案,但我不希望将其保存两次,一次为<@!userid>
,然后为<@userid>
。如果这是修复它的唯一方法,那么我理解。
感谢您的帮助!
答案 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;