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

如何在Discord Embed中展示角色与其前后位置(±1)的角色信息?

解决Discord Embed中展示目标角色及前后位置角色的问题

你当前的代码逻辑存在明显问题:filter方法里的role.position+1||role.position||role.position-1不会起到过滤作用——这行代码会直接计算出一个非零数值(被判定为真),导致过滤出所有角色,完全不符合你要匹配目标角色±1位置的需求。

要实现目标角色和其位置±1角色的展示,按以下步骤修改:

  1. 先明确目标角色(假设你已通过交互或其他方式获取到目标角色,变量名为targetRole)
  2. 定义需要匹配的位置集合:包含目标角色的位置、位置-1、位置+1
  3. 过滤角色缓存,筛选出位置在集合内的角色
  4. 对筛选结果按位置排序,保证展示顺序符合“位置-1 → 当前角色 → 位置+1”的逻辑
  5. 将角色转换为可展示的格式(提及或名称),用=>连接

完整代码示例

// 假设已获取到目标角色 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:25:19