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

Discord.js中如何通过其他命令修改Embed的描述

解决Discord.js中修改已发送Embed时的TypeError问题

看起来你遇到的核心问题是你尝试修改的embed变量是undefined,这是因为你从autostatus.js导入的embed并不是实际发送到频道里的那个Embed实例。下面我来拆解原因并给出解决方案:

为什么会出现这个错误?

  1. 如果你在autostatus.js里是每次执行命令时新建一个Embed(比如const embed = new Discord.MessageEmbed(...)),然后没有把这个已发送的Embed对应的消息对象保存下来,那么从其他文件导入的embed要么是未初始化的变量,要么是一个全新的Embed实例,根本不是已经发送到频道里的那个。
  2. 即使你在autostatus.js里导出了这个Embed,只要-autostatus命令还没被执行过,这个变量就会是undefined,自然调用setDescription会报错。

正确的解决方案:修改已发送的消息对象

要修改已发送的Embed,你需要操作的是发送Embed后返回的Message对象,而不是原来的Embed实例。具体步骤如下:

步骤1:在autostatus.js中保存已发送的消息对象

修改autostatus.js里发送Embed的代码,把返回的消息对象存储到机器人客户端的全局属性中(这样其他命令可以访问到):

// 假设你原来的发送代码是这样的,修改成:
message.channel.send(embed).then(sentMessage => {
  // 将发送后的消息对象存在client的全局属性里
  // 如果是多服务器场景,建议用Map按服务器ID存储,避免互相干扰
  client.autoStatusMessage = sentMessage;
  // 多服务器版本:
  // if (!client.autoStatusMessages) client.autoStatusMessages = new Map();
  // client.autoStatusMessages.set(message.guild.id, sentMessage);
});

步骤2:修改-botoff命令的代码

在botoff.js中,获取保存的消息对象,然后编辑它的Embed:

const Discord = require("discord.js")
exports.run = (client, message, args) => {
 if(message.author.id !== "276249983664128001") return;
 
 // 先检查是否存在已发送的状态消息
 if(!client.autoStatusMessage) {
   return message.reply("还没有执行过 `-autostatus` 命令生成状态消息哦!");
 }
 
 // 复制原消息中的Embed并修改描述
 const originalEmbed = client.autoStatusMessage.embeds[0];
 const updatedEmbed = new Discord.MessageEmbed(originalEmbed)
   .setDescription("Uptime: Offline Bot Status: Offline");
 
 // 编辑已发送的消息
 client.autoStatusMessage.edit({ embeds: [updatedEmbed] })
   .catch(err => {
     console.error("修改状态消息失败:", err);
     message.reply("修改状态消息时出现错误,请查看控制台日志。");
   });
}

额外注意事项

  • 多服务器兼容:如果你的机器人在多个服务器使用,不要用单个变量存储消息对象,建议用Map按服务器ID存储(上面代码里的注释部分),避免不同服务器的状态消息互相覆盖。
  • 权限检查:确保机器人拥有编辑消息的权限,否则edit方法会失败。
  • 持久化问题:如果机器人重启,client.autoStatusMessage会丢失。如果需要持久化,可以把消息ID和频道ID存储到数据库或配置文件中,重启后重新获取消息对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:12:48