如何获得在Discord.js中发送消息的用户的角色?

时间:2020-03-18 18:33:33

标签: javascript node.js discord discord.js

我对此很陌生,但是我有这个

const Discord = require('discord.js');
const auth = require("./auth.json");
const client = new Discord.Client();

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
    console.log(msg.guild.roles.get);
    if (msg.content === 'ping') {
        msg.reply('Pong!');
    }
});

client.login(auth.token);

但是在console.log上时,我得到undefined。如何获得刚刚发消息的用户的角色。我在网上查看了所有示例,感觉它们都在.get方法可以使用的旧API上。

2 个答案:

答案 0 :(得分:2)

您无需在线参考示例。只需阅读documentation-开发人员就花费了大量精力编写它来有效地回答这些确切的问题。

您正在寻找“刚刚发送消息的用户的角色”。您可以通过msg.authormsg.member属性获取刚刚发送消息的用户。不知道有什么更好的选择,您可以简单地在这两个属性上check the docs来查看可以从中获得的收益。在这种情况下,您需要用户的行会专用数据,因此您需要该行会的GuildMember对象-即msg.member

看着docs for GuildMember,您可以观察到所有可以访问的属性。那里有一个GuildMemberRoleManager类型的roles属性。该类型具有一个.cache属性,其中包含您的缓存角色集合。

将所有内容放在一起,您将得到:msg.member.roles.cache。这是一个集合,因此您可以通过集合支持的任何方式(for..of.forEach()等)对其进行迭代。

答案 1 :(得分:0)

const Discord = require('discord.js');
const auth = require("./auth.json");
const client = new Discord.Client();

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
    for(var role of msg.member.roles.cache) {
        console.log("id:", role[0], "name:", role[1].name);
    }
    if (msg.content === 'ping') {
        msg.reply('Pong!');
    }
});

client.login(auth.token);