如何在Discord Embed中展示角色与其前后位置(±1)的角色信息?
解决Discord Embed中展示目标角色及前后位置角色的问题
你当前的代码逻辑存在明显问题:filter方法里的role.position+1||role.position||role.position-1不会起到过滤作用——这行代码会直接计算出一个非零数值(被判定为真),导致过滤出所有角色,完全不符合你要匹配目标角色±1位置的需求。
要实现目标角色和其位置±1角色的展示,按以下步骤修改:
- 先明确目标角色(假设你已通过交互或其他方式获取到目标角色,变量名为
targetRole) - 定义需要匹配的位置集合:包含目标角色的位置、位置-1、位置+1
- 过滤角色缓存,筛选出位置在集合内的角色
- 对筛选结果按位置排序,保证展示顺序符合“位置-1 → 当前角色 → 位置+1”的逻辑
- 将角色转换为可展示的格式(提及或名称),用
=>连接
完整代码示例
// 假设已获取到目标角色 targetRole const targetPositions = [targetRole.position - 1, targetRole.position, targetRole.position + 1]; // 过滤+排序相关角色 const relatedRoles = interaction.guild.roles.cache .filter(role => targetPositions.includes(role.position)) .sort((a, b) => a.position - b.position); // 生成Embed的字段值 const positionFieldValue = relatedRoles.length ? relatedRoles.map(role => role.toString()).join(" => ") : "未找到相关角色"; // 构建Embed(以discord.js v14为例) const embed = new EmbedBuilder() .setTitle("角色位置关联") .addFields({ name: "Position", value: positionFieldValue });
补充说明
- 如果目标角色是服务器最顶层角色(无位置+1的角色),或最底层角色(无位置-1的角色),过滤结果会自动忽略不存在的位置,只显示存在的角色
- 用
role.toString()会生成Discord可点击的角色提及,若只想显示名称,替换为role.name即可 - 排序步骤不可省略,否则角色展示顺序会随机,不符合位置逻辑
内容的提问来源于stack exchange,提问作者pierrepapierciseaux Lafontaine
相关产品推荐
相关产品推荐

