a p*_*son 5 userid points node.js discord
所以我正在使用 Node.JS/Discord.JS 创建一个机器人,我有一个问题。
在某些服务器上,当您提到用户时,它会在控制台中<@!userid>返回为,而在其他服务器上则返回为<@userid>。我的机器人有一个简单的积分/等级系统,它保存在一个 JSON 文件中<@!userid>,所以在一些服务器上,当试图通过提及用户积分来查看用户积分时,它们会起作用,而在其他服务器上则不会。
有谁知道如何解决这个问题?我已经多次尝试找到答案,但我不想保存两次,一次<@!userid>然后<@userid>。如果这是解决它的唯一方法,那么我理解。
谢谢你的帮助!
Wri*_*ght 12
感叹号<@!userID>表示他们在该服务器中设置了昵称。不带感叹号使用它更可靠,因为它可以在任何地方工作。此外,您应该使用他们的 id 保存用户,而不是整个提及(“<@userid>”)。使用正则表达式解析出额外的符号。
var user = "<@!123456789>" //Just assuming that's their user id.
var userID = user.replace(/[<@!>]/g, '');
Run Code Online (Sandbox Code Playgroud)
这会给我们123456789。他们的用户 ID。当然,您可以通过两种方式轻松获取用户对象(您很可能会获取他们的用户名),如果他们在您使用命令的服务器中,您可以
var member = message.guild.member(userID);
Run Code Online (Sandbox Code Playgroud)
或者,如果他们不在服务器中,而您仍想访问他们的用户对象,则;
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.)
});
Run Code Online (Sandbox Code Playgroud)
您可以ALSO简单地直接从标签访问该成员对象(如果他们在邮件中标记它们)。
var member = message.mentions.members.first();
Run Code Online (Sandbox Code Playgroud)
就像那样,无需任何正则表达式,您就可以获得完整的成员对象并保存它们的 id。
var memberID = member.id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11555 次 |
| 最近记录: |