【问题标题】:Ignore deleted messages by the bot忽略机器人删除的消息
【发布时间】:2026-01-03 23:50:01
【问题描述】:

所以我正在处理已删除的消息日志。我让它工作,但被机器人删除的消息也被记录下来。而不是1次。我收到了 5 条相同的已删除消息。我已经尝试过if(!messageDelete.author.bot) {} 之类的方法,但在尝试后它仍然会记录机器人删除的消息,并且仍然会创建 10 条。这是我目前使用的代码:

bot.on("messageDelete", (messageDelete) => {
  if(!messageDelete.author.bot) {
    let DeleteEmbed = new Discord.RichEmbed()
    .setTitle("**DELETED MESSAGE OWO**")
    .setColor("#ed0c75")
    .addField("Author", messageDelete.author.tag, true)
    .addField("Channel", messageDelete.channel, true)
    .addField("Message", messageDelete.content)
    .setFooter(`Message ID: ${messageDelete.id} | Author ID: ${messageDelete.author.id}`, messageDelete.author.displayAvatar);

    let DeleteChannel = messageDelete.guild.channels.find(x => x.name === "mod-logs");
    DeleteChannel.send(DeleteEmbed);
}})

这是输出的屏幕截图。例如,如果我使用 purge 命令,它会记录所有已删除的消息。

screenshot

我希望有人可以帮助我。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    为此,您需要查看 Discord 中的audit logs,审核日志显示执行者和受害者(我不知道该怎么称呼它)。

    查看您使用的已删除邮件审核日志:

    let logs = await messageDelete.guild.fetchAuditLogs({
            type: 72
        });
    

    然后来看看最近的:

    let entry = logs.entries.first();
    

    然后检查机器人是否删除了一条消息以及做什么(如果没有):

    if (entry.executor.username === bot.user.username) {
            return;
        } else {
            let DeleteEmbed = new Discord.RichEmbed()
        .setTitle("**DELETED MESSAGE OWO**")
        .setColor("#ed0c75")
        .addField("Author", messageDelete.author.tag, true)
        .addField("Channel", messageDelete.channel, true)
        .addField("Message", messageDelete.content)
        .setFooter(`Message ID: ${messageDelete.id} | Author ID: ${messageDelete.author.id}`, messageDelete.author.displayAvatar);
    
        let DeleteChannel = messageDelete.guild.channels.find(x => x.name === "mod-logs");
        DeleteChannel.send(DeleteEmbed);
        };
    

    所有这些代码看起来像这样:

    let logs = await messageDelete.guild.fetchAuditLogs({
            type: 72
        });
    let entry = logs.entries.first();
    if (entry.executor.username === bot.user.username) {
            return;
        } else {
            let DeleteEmbed = new Discord.RichEmbed()
        .setTitle("**DELETED MESSAGE OWO**")
        .setColor("#ed0c75")
        .addField("Author", messageDelete.author.tag, true)
        .addField("Channel", messageDelete.channel, true)
        .addField("Message", messageDelete.content)
        .setFooter(`Message ID: ${messageDelete.id} | Author ID: ${messageDelete.author.id}`, messageDelete.author.displayAvatar);
    
        let DeleteChannel = messageDelete.guild.channels.find(x => x.name === "mod-logs");
        DeleteChannel.send(DeleteEmbed);
        };
    

    我希望这有助于回答您的问题!

    P.S - 不错的机器人名称。

    【讨论】:

      【解决方案2】:

      也许您可以尝试将!messageDelete.author.bot 替换为message.author != bot.user

      【讨论】:

      • 感谢您的帮助,它成功了,它不再记录清除命令,所以这是一件好事!不知何故,他仍在记录已删除的消息 5 次,但至少解决了 1 个问题。