javascript 如何显示用户 discord.js / userinfo 命令的角色
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/53253350/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to show roles of user discord.js / userinfo command
提问by Silent Watcher
I'm trying to make a userinfocommand, and I'm currently stuck on showing roles of the user.
我正在尝试发出userinfo命令,但目前我一直在显示用户的角色。
Here is my code:
这是我的代码:
const Discord = module.require('discord.js');
const moment = require('moment');
module.exports.run = async (bot, message, args) => {
let user = message.mentions.users.first() || message.author;
const joinDiscord = moment(user.createdAt).format('llll');
const joinServer = moment(user.joinedAt).format('llll');
let embed = new Discord.RichEmbed()
.setAuthor(user.username + '#' + user.discriminator, user.displayAvatarURL)
.setDescription(`${user}`)
.setColor(`RANDOM`)
.setThumbnail(`${user.displayAvatarURL}`)
.addField('Joined at:', `${moment.utc(user.joinedAt).format('dddd, MMMM Do YYYY, HH:mm:ss')}`, true)
.addField('Status:', user.presence.status, true)
.addField('Roles:', user.roles.map(r => `${r}`).join(' | '), true)
.setFooter(`ID: ${user.id}`)
.setTimestamp();
message.channel.send({ embed: embed });
return;
}
module.exports.help = {
name: 'userinfo'
}
I'm getting this error TypeError: Cannot read property 'map' of undefinedand I don't know how to fix it?
我收到此错误TypeError: Cannot read property 'map' of undefined,但不知道如何解决?
采纳答案by Federico Grandi
User.rolesis undefinedbecause that property doesn't exist: try using GuildMember.rolesinstead:
User.roles是undefined因为该属性不存在:尝试使用GuildMember.roles:
let member = message.mentions.members.first() || message.member,
user = member.user;
let embed = new Discord.RichEmbed()
// ... all the other stuff ...
.addField('Roles:', member.roles.map(r => `${r}`).join(' | '), true)
The other properties will still use user, but .roleswill be related to the GuildMember.
其他属性仍将使用user,但.roles将与 GuildMember 相关。
回答by Youngz Luke
try adding this .addField("Roles:", member.roles.map(roles =>${roles}).join(', '), true)
尝试添加此.addField("Roles:", member.roles.map(roles =>${roles}).join(', '), true)
My whole code for this is
我的整个代码是
let user;
if (message.mentions.users.first()) {
user = message.mentions.users.first();
} else {
user = message.`enter code here`author;
}
const member = message.guild.member(user);
const embed = new Discord.RichEmbed()
.setColor("RANDOM")
.setThumbnail(message.author.avatarURL)
.addField(`${user.tag}`, `${user}`, true)
.addField("ID:", `${user.id}`, true)
.addField("Nickname:", `${member.nickname !== null ? `${member.nickname}` : 'None'}`, true)
.addField("Status:", `${user.presence.status}`, true)
.addField("In Server", message.guild.name, true)
.addField("Game:", `${user.presence.game ? user.presence.game.name : 'None'}`, true)
.addField("Bot:", `${user.bot}`, true)
.addField("Joined The Server On:", `${moment.utc(member.joinedAt).format("dddd, MMMM Do YYYY")}`, true)
.addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true)
.addField("Roles:", member.roles.map(roles => `${roles}`).join(', '), true)
.setFooter(`Replying to ${message.author.username}#${message.author.discriminator}`)
message.channel.send({embed});
回答by BDFD Tutorials - Bot Designer
this is working 100% for discord.js 12.x
这对 discord.js 12.x 工作 100%
<@&${message.guild.member(message.author)._roles.join('> <@&')}>
回答by qiAlex
TypeError: Cannot read property 'map' of undefined- this means that somewhere in your code happening a situation of execution .mapfunction of undefinedvariable.
类型错误:无法读取未定义的属性 'map'- 这意味着在您的代码中的某处发生了变量执行.map函数的情况undefined。
You have only one map. Here:
你只有一个map。这里:
.addField('Roles:', user.roles.map(r => `${r}`).join(' | '), true)
// ^^^
This line trows this error, so this means that user.rolesis undefined.
该行trows这个错误,所以这意味着user.roles是undefined。
Try to:
尝试:
let user = message.mentions.users.first() || message.author;
console.log(user.roles); // it is undefined
回答by barbsan
Propably user.rolesis undefined.
大概user.roles是undefined。
If it's ok that user has no roles, you can replace:
如果用户没有角色没问题,您可以替换:
.addField('Roles:', user.roles.map(r => `${r}`).join(' | '), true)
with:
和:
.addField('Roles:', user.roles ? user.roles.map(r => `${r}`).join(' | ') : "", true)
This will set empty string in case when there's no rolesproperty in userobject.
如果对象中没有roles属性,这将设置空字符串user。
Another option is to set user.rolesto empty array if it doesn't exist (or do something else in this if, i.e. throw error):
另一种选择是user.roles如果它不存在则设置为空数组(或在 this 中执行其他操作if,即抛出错误):
let user = /* get user*/
if (!user.roles){
user.roles = [];
}

