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




