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

如何在discord.js中记录删除消息的用户?

记录删除Discord消息的用户方案

核心问题说明

message.author只能获取发送该消息的用户,要拿到删除消息的用户,需要借助Discord的审计日志功能,同时确保机器人拥有对应权限。


Python(discord.py 示例)

  1. 首先确保机器人开启必要的Intents,并拥有View Audit Log权限
  2. 在on_message_delete事件中,通过审计日志匹配最近的消息删除记录:
import discord
from discord.ext import commands

# 启用必要的Intents
intents = discord.Intents.default()
intents.message_content = True
intents.guilds = True

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_message_delete(message):
    # 跳过DM消息,只处理服务器内的消息
    if not message.guild:
        return
    
    # 获取最近1条消息删除的审计日志
    audit_logs = await message.guild.audit_logs(
        action=discord.AuditLogAction.message_delete,
        limit=1
    ).flatten()
    
    if audit_logs:
        entry = audit_logs[0]
        # 匹配消息ID和发送者ID,避免误判
        if entry.extra.message_id == message.id and entry.target.id == message.author.id:
            print(f"消息删除记录:发送者 {message.author.name}#{message.author.discriminator},删除者 {entry.user.name}#{entry.user.discriminator}")
    else:
        # 无审计日志时,默认是消息作者自己删除
        print(f"消息删除记录:发送者 {message.author.name}#{message.author.discriminator},删除者 {message.author.name}#{message.author.discriminator}")

bot.run('你的机器人令牌')

JavaScript(discord.js v14 示例)

  1. 开启必要的Intents,确保机器人拥有View Audit Log权限
  2. 在messageDelete事件中获取审计日志:
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent
    ]
});

client.on('messageDelete', async (message) => {
    if (!message.guild) return;
    
    const auditLogs = await message.guild.fetchAuditLogs({
        type: 'MessageDelete',
        limit: 1
    });
    
    const entry = auditLogs.entries.first();
    if (entry && entry.extra.messageId === message.id && entry.target.id === message.author.id) {
        console.log(`消息删除记录:发送者 ${message.author.tag},删除者 ${entry.executor.tag}`);
    } else {
        // 无审计日志时默认是作者自删
        console.log(`消息删除记录:发送者 ${message.author.tag},删除者 ${message.author.tag}`);
    }
});

client.login('你的机器人令牌');

关键注意事项

  • 必须给机器人分配查看审计日志的服务器权限,否则无法获取审计日志条目
  • 审计日志存在轻微延迟,短时间内多条消息删除时,建议增加时间差判断(比如对比条目创建时间和消息删除时间)
  • 用户删除自己的消息时,部分场景下不会生成审计日志,此时默认按作者自删处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:42:28