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

Discord.JS如何修改Message Embed指定字段实现圈速排行榜局部更新

Discord赛道排行榜Embed单字段更新实现方案

前置要求

使用discord.js v13及以上版本,提前存储10条赛道对应Embed消息的ID与赛道名称的映射关系,避免全量遍历频道消息。

实现步骤

  • 定位目标赛道对应的Embed消息
    通过预存的映射表直接拉取目标消息,不需要检索频道内其他消息,不会影响其他Embed内容。
  • 提取现有排行榜数据
    从目标消息的首个Embed中读取已有的3条成绩字段,转换为可排序的结构化数组:
    // 拉取目标赛道消息
    const targetTrackMsg = await yourChannel.messages.fetch(trackIdMap["Track 3 Name"]);
    const originEmbed = targetTrackMsg.embeds[0];
    // 转换为结构化成绩数组
    let lapTimeList = originEmbed.fields.map(item => ({
      username: item.name,
      seconds: Number(item.value.replace(" seconds", ""))
    }));
    
  • 插入新成绩后重排序取前三名
    直接将新成绩插入数组后按圈速升序排列,截取前3位即可自动淘汰最后一名:
    // 插入玩家新成绩
    lapTimeList.push({ username: "Clark", seconds: 38 });
    // 排序后仅保留前三名
    lapTimeList = lapTimeList.sort((a, b) => a.seconds - b.seconds).slice(0, 3);
    
  • 局部更新目标消息的Embed
    复用原有Embed的标题,仅替换字段内容后更新消息,不会改动消息其他属性,也不会影响频道内其他内容:
    const updatedEmbed = new MessageEmbed().setTitle(originEmbed.title);
    lapTimeList.forEach(item => updatedEmbed.addField(item.username, `${item.seconds} seconds`));
    await targetTrackMsg.edit({ embeds: [updatedEmbed] });
    

权限提示:机器人需要持有目标频道的「查看频道」「读取消息历史」「管理消息」「嵌入链接」权限,才能正常完成消息更新操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:15:04