Discord机器人如何实现发送的Embed消息在指定时间后自动删除
问题原因
这一问题通常由三个常见错误导致:
- 构造
MessageEmbed实例时缺少new关键字,低版本discord.js会因实例创建异常导致后续操作失效 - discord.js v13及以上版本已经移除了
message.delete()方法的timeout配置项,原有传参方式不再生效 - discord.js v13及以上版本发送embed的参数已从单个
embed对象改为embeds数组,旧写法会导致embed发送失败,自然无法触发后续删除逻辑
可行修复方案
使用原生setTimeout实现延迟删除,同时修正实例创建和消息发送的语法,补全错误捕获方便排查权限类问题,修改后代码如下:
// 补全new关键字正确创建Embed实例 const MuteEmbed = new Discord.MessageEmbed(); MuteEmbed.setTitle("🔇 Mute"); MuteEmbed.setDescription(`<@${mentionedMember.id}> wurde gemutet. Nutzer hat ${userLog[mentionedMember.id].length} mutes.\nGrund: ${reason}`); // 修正embed传参格式为v13+兼容的数组写法 message.channel.send({ embeds: [MuteEmbed] }).then((sentMsg) => { // 用原生setTimeout实现延迟删除,兼容所有discord.js版本 setTimeout(() => { sentMsg.delete().catch(err => console.error('消息删除失败:', err)) }, 2000); }).catch(err => console.error('消息发送失败:', err));
额外注意事项
需要确保机器人拥有对应频道的管理消息权限,否则删除操作会静默失败,新增的catch代码块可以快速定位权限、参数错误类问题。
内容的提问来源于stack exchange,提问作者BvstedCrew
相关产品推荐
相关产品推荐

