You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord.js实现特定频道消息转Embed回复功能遇到问题求助

解决Discord机器人消息整合到Embed的问题

我看了你的代码,发现几个关键问题导致功能没达到预期,下面给你梳理问题点并提供修正后的代码:

问题分析

  • 错误使用message.reply():你在Embed的描述里写了${(message.reply())},但message.reply()是用来发送一条@用户的回复消息的,它返回的是一个Promise对象,不是用户的消息内容,这会导致Embed里显示一堆奇怪的对象字符串,你应该用message.content来获取用户发送的文本。
  • 异步操作未处理message.delete()是异步方法,虽然大部分时候不会有问题,但最好用await等待它执行完成,避免后续操作在消息还没删除时就触发。
  • 废弃事件(针对Discord.js v13+):如果你的Discord.js版本是v13或更高,message事件已经被废弃,官方推荐使用messageCreate事件,不然会出现警告甚至功能异常。
  • 多余的消息发送:最后一行message.channel.send(message.content)会重复发送用户的原始消息,这不符合你“整合到Embed”的需求,应该删掉。

修正后的代码

// 注意:如果是Discord.js v13+,用messageCreate事件替代message
client.on("messageCreate", async message => { 
  // 跳过机器人自己的消息
  if (message.author.bot) return;
  // 检查是否是目标频道
  if (message.channel.id !== `635991288971326568`) return;

  try {
    // 异步删除用户消息,等待删除完成
    await message.delete();
    // 创建Embed消息
    const newEmbed = new Discord.MessageEmbed() 
      .setColor("#ff0000") 
      .setTitle("Αποθήκη ΕΚΑΒ") 
      // 这里可以填实际的URL,如果不需要可以删掉这行
      .setURL("") 
      .setDescription(`**Doctor:** ${message.author.tag}\n**Current Date:** ${new Date().toLocaleString()}\n**Message Content:** ${message.content}`) 
      // 不需要的话可以删掉缩略图和图片的设置
      .setThumbnail("") 
      .setImage("") 
      .setFooter("Created and Developed by InNovAqua#0666 ❤️"); 
    // 发送Embed消息(v13+需要用embeds数组格式)
    await message.channel.send({ embeds: [newEmbed] });
  } catch (error) {
    // 捕获错误,避免机器人崩溃
    console.error("处理消息时出错:", error);
  }
});

额外说明

  • 我把message.author改成了message.author.tag,这样会显示用户的昵称+ID(比如InNovAqua#0666),比单纯显示用户对象更友好。
  • 加上了try/catch块来捕获可能的错误(比如没有删除消息的权限、发送Embed失败等),避免机器人因为异常崩溃。
  • 如果你的Discord.js版本是v12及以下,把messageCreate改回message,并且发送Embed的时候用message.channel.send(newEmbed)就行(v13+才需要{ embeds: [newEmbed] }的格式)。

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

火山引擎 最新活动