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

如何让Discord机器人发送的Embed消息5秒后自动删除?

Discord反垃圾机器人自动删除问题解决方案

一、Embed提示消息5秒后自动删除失效

常见原因及修复

  1. 未正确获取发送后的消息对象
    失效大多因为发送消息后未保存返回的消息实例,导致无法调用delete()方法。修复时通过链式调用或async/await获取发送后的消息:

    // 链式调用写法
    message.channel.send({ embeds: [antiSpamEmbed] })
      .then(sentEmbed => {
        setTimeout(() => {
          sentEmbed.delete().catch(err => console.error('删除Embed失败:', err));
        }, 5000);
      })
      .catch(err => console.error('发送Embed失败:', err));
    
    // async/await写法(需在async函数内使用)
    try {
      const sentEmbed = await message.channel.send({ embeds: [antiSpamEmbed] });
      setTimeout(() => {
        sentEmbed.delete().catch(err => console.error('删除Embed失败:', err));
      }, 5000);
    } catch (err) {
      console.error('发送Embed失败:', err);
    }
    
  2. 机器人权限不足
    确保机器人拥有Manage Messages权限,且在目标频道具备发送、删除消息的权限,可在服务器角色设置中检查开启。

二、@提及内容自动删除无效

常见原因及修复

  1. 检测逻辑错误
    在messageCreate事件中正确检测消息中的@提及,并执行删除操作:

    const { EmbedBuilder } = require('discord.js');
    
    client.on('messageCreate', async message => {
      // 跳过机器人自身消息
      if (message.author.bot) return;
    
      // 检测@everyone/@here提及
      if (message.mentions.everyone) {
        await message.delete().catch(err => console.error('删除提及消息失败:', err));
        const warnEmbed = new EmbedBuilder()
          .setColor('#ff4444')
          .setDescription('禁止提及全体成员,请遵守服务器规则!');
        const sentWarn = await message.channel.send({ embeds: [warnEmbed] });
        setTimeout(() => sentWarn.delete().catch(err => console.error('删除提示失败:', err)), 5000);
        return;
      }
    
      // 可选:检测特定角色提及
      const restrictedRoleId = '你的受限角色ID';
      if (message.mentions.roles.has(restrictedRoleId)) {
        await message.delete().catch(err => console.error('删除提及消息失败:', err));
        const roleWarnEmbed = new EmbedBuilder()
          .setColor('#ff4444')
          .setDescription('禁止提及该角色,请遵守服务器规则!');
        const sentRoleWarn = await message.channel.send({ embeds: [roleWarnEmbed] });
        setTimeout(() => sentRoleWarn.delete().catch(err => console.error('删除提示失败:', err)), 5000);
      }
    });
    
  2. 权限问题
    同样需确保机器人拥有Manage Messages权限,否则无法删除用户发送的提及消息。

额外排查点

  • 在删除操作的catch块添加日志,捕获权限不足、消息已被删除等潜在问题;
  • 若使用Discord.js v14+,需确保使用EmbedBuilder构建消息,而非旧版MessageEmbed。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:45:35