Discord机器人用户信息命令问题:角色显示Undefined+缩略图失效
解决Discord机器人用户信息命令的两个问题
我来帮你搞定这两个问题,咱们先拆解代码里的错误点:
问题1:setThumbnail无法显示头像
你当前代码里用了user.displayAvatarURL,但这是一个方法,不是直接的属性值,必须调用它(加上括号)才能拿到头像的真实URL。如果你的Discord.js版本是v12及以上,建议加上{ dynamic: true }参数,这样能支持GIF动态头像的正常加载。
修正后的写法:
embed.setThumbnail(user.displayAvatarURL({ dynamic: true }))
问题2:成员角色显示Undefined
这个问题有两个关键错误:
- 成员对象获取错误:你写的
var member = message.mentions.users.first(user);完全不对——message.mentions.users拿到的是全局用户对象(不含服务器角色信息),要获取对应服务器的成员对象,得用message.mentions.members.first()。 - 角色集合未转换为文本:
member.roles是一个集合对象,直接塞进嵌入字段里会显示[object Object]或者Undefined,你需要把它转换成可读的文本格式,比如提取所有角色名称并用逗号分隔,还可以处理无角色的边界情况。
修正后的角色字段写法:
embed.addField('User Roles', member.roles.cache.map(role => role.name).join(', ') || '无角色')
完整修正后的代码
const embed = new Discord.MessageEmbed() // 获取用户和成员对象 const user = message.mentions.users.first(); const member = message.mentions.members.first(); // 判断是否正确提及了用户 if(!user || !member) return message.reply('Apologies! Please specify a particular member!'); embed.setTitle('User Information') embed.addField('Username', user.username) embed.addField('User ID', user.id) embed.addField('User Tag', user.tag) embed.addField('User Roles', member.roles.cache.map(role => role.name).join(', ') || '无角色') embed.setColor(0x00FF93) embed.setThumbnail(user.displayAvatarURL({ dynamic: true })) embed.setFooter('Generated by Salty!') message.channel.send(embed); break;
额外小提醒:如果你的Discord.js版本是v13及以上,MessageEmbed已经迁移到Discord.EmbedBuilder了,不过旧版本用上面的代码完全没问题。
内容的提问来源于stack exchange,提问作者user13270943
相关产品推荐
相关产品推荐

