如何在discord.js中记录删除消息的用户?
记录删除Discord消息的用户方案
核心问题说明
message.author只能获取发送该消息的用户,要拿到删除消息的用户,需要借助Discord的审计日志功能,同时确保机器人拥有对应权限。
Python(discord.py 示例)
- 首先确保机器人开启必要的Intents,并拥有
View Audit Log权限 - 在
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 示例)
- 开启必要的Intents,确保机器人拥有
View Audit Log权限 - 在
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
相关产品推荐
相关产品推荐

