如何在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
相关产品推荐
相关产品推荐

