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

如何在discord.js中从slash command交互获取用户的所有角色?

获取Slash Command交互用户的角色(discord.js)

你之前的代码错误在于遍历了服务器的所有成员,而非触发命令的目标用户的角色。正确的做法是直接从交互对象的member属性中获取角色集合:

正确代码示例

// 先判断是否在服务器内触发命令(DM场景下无角色数据)
if (interaction.inGuild()) {
  // 获取当前交互用户的角色集合
  const userRoles = interaction.member.roles;

  // 若需转换为数组格式处理
  const rolesArray = userRoles.cache.array();

  // 遍历角色并输出示例
  userRoles.cache.forEach(role => {
    console.log(`角色名称:${role.name},角色ID:${role.id}`);
  });

  // 也可以直接回复用户的角色列表
  const roleNames = userRoles.cache.map(role => role.name).join(', ');
  interaction.reply(`你的当前角色:${roleNames}`);
} else {
  interaction.reply("该命令仅能在服务器内使用!");
}

关键说明

  • interaction.member是触发命令的用户在当前服务器的成员实例,仅当命令在服务器内触发时存在。
  • member.roles.cache是Collection类型对象,存储了该用户的所有角色,可通过map、forEach等方法遍历处理。
  • 若使用discord.js v14及更高版本,上述代码逻辑完全适用,核心API无变化。

内容的提问来源于stack exchange,提问作者anthony_curse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:32:04