You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人用户信息命令问题:角色显示Undefined+缩略图失效

解决Discord机器人用户信息命令的两个问题

我来帮你搞定这两个问题,咱们先拆解代码里的错误点:

问题1:setThumbnail无法显示头像

你当前代码里用了user.displayAvatarURL,但这是一个方法,不是直接的属性值,必须调用它(加上括号)才能拿到头像的真实URL。如果你的Discord.js版本是v12及以上,建议加上{ dynamic: true }参数,这样能支持GIF动态头像的正常加载。

修正后的写法:

embed.setThumbnail(user.displayAvatarURL({ dynamic: true }))

问题2:成员角色显示Undefined

这个问题有两个关键错误:

  1. 成员对象获取错误:你写的var member = message.mentions.users.first(user);完全不对——message.mentions.users拿到的是全局用户对象(不含服务器角色信息),要获取对应服务器的成员对象,得用message.mentions.members.first()。
  2. 角色集合未转换为文本: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:08:09