P粉7093078652023-08-30 15:32:16
您可以使用messageDelete
事件,该事件在消息被删除时触发。您可以检查审核日志,以查看用户是否删除了其他用户的消息。
首先,确保您具有所需的意图:Guilds
,GuildMembers
和GuildMessages
。您还需要partials
:Channel
,Message
和GuildMember
,以处理在您的机器人上线之前发送的消息。
一旦消息被删除,您可以使用fetchAuditLogs
方法来获取被删除消息所在的服务器的审核日志。
const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages, ], partials: [ Partials.Channel, Partials.GuildMember, Partials.Message, ], }); client.on('messageDelete', async (message) => { const logs = await message.guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete, limit: 1, }); // logs.entries is a collection, so grab the first one const firstEntry = logs.entries.first(); const { executorId, target, targetId } = firstEntry; // Ensure the executor is cached const user = await client.users.fetch(executorId); if (target) { // The message object is in the cache and you can provide a detailed log here console.log(`A message by ${target.tag} was deleted by ${user.tag}.`); } else { // The message object was not cached, but you can still retrieve some information console.log(`A message with id ${targetId} was deleted by ${user.tag}.`); } });
在discord.js v14.8+中,有一个新的事件GuildAuditLogEntryCreate
。您可以在收到相应的审核日志事件(GuildAuditLogEntryCreate
)时立即找出谁删除了消息。它需要启用GuildModeration
意图。
const { AuditLogEvent, Events } = require('discord.js'); client.on(Events.GuildAuditLogEntryCreate, async (auditLog) => { // Define your variables const { action, executorId, target, targetId } = auditLog; // Check only for deleted messages if (action !== AuditLogEvent.MessageDelete) return; // Ensure the executor is cached const user = await client.users.fetch(executorId); if (target) { // The message object is in the cache and you can provide a detailed log here console.log(`A message by ${target.tag} was deleted by ${user.tag}.`); } else { // The message object was not cached, but you can still retrieve some information console.log(`A message with id ${targetId} was deleted by ${user.tag}.`); } });