您如何定义 discord.js 中用户的颜色?

How would you define a user's color in discord.js?

我正在执行一个命令,向用户提供嵌入内的统计信息。我希望嵌入成为用户在服务器上的当前颜色(如角色指定的颜色),而不是对每个人都使用相同的颜色。有什么办法吗?

我的代码:

let embed = new Discord.RichEmbed()
    .setAuthor(message.author.username, message.author.displayAvatarURL)
    .setColor('USER COLOR HERE')
    .addField('XP:', userXp, true)
    .addField('XP Reserve:', userXpReserve, true)
    .addField('Rank:', "working on this part", false)
    .setFooter(message.author.tag)
message.channel.send(embed);

我希望.setColor('USER COLOR HERE')成为使用命令的用户的颜色

一个 GuildMember 有一个 .displayHexColor 属性,因此

.setColor(message.member.displayHexColor)

会起作用。如果您不想要没有颜色的角色(即@everyone 或不可见的管理员角色),请检查颜色是否等于 #000000。如果是这种情况,通常 .hoistRole 会有颜色。 .hoistRole 是将成员放在成员列表中的单独类别中的角色。

let color = message.member.displayHexColor;
if (color == '#000000') color = message.member.hoistRole.hexColor;
// Embed
.setColor(color)
message.member.colorRole.color

这个定义角色的颜色定义用户的颜色

2021 年我使用以下代码:

function check_color ( message ) {
  if ( message.member ) {
    var role = message.member.roles.color
    if ( ! role ) return "#ffffff"
    else return role.hexColor
  } else return = "#ffffff"
}

首先通过member是否定义来判断消息是否来自guild,如果是则获取负责color的role。 如文档所示:

GuildMemberRoleManager

.color  [READ-ONLY]
| The role of the member used to set their color
| Type: (Role)

如果没有作用,return是白色的。如果消息是 DM,也 return 白色。

编辑: 为什么不使用 GuildMember#displayColor

如果用户没有角色,它将return黑色。 检查,如果颜色是黑色,然后把它变成白色在我看来不是一个好主意,因为它会消除角色实际上有黑色的可能性