javascript 如何在discord.js中记录谁删除了一条消息?

5f0d552i  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(280)

我才刚刚开始学习如何创建不和谐机器人,我正在努力弄清楚如何记录谁删除了一条消息。
我尝试了message.author,但当然,这将记录谁发送的消息,我不知道很多语法,所以我没有尝试其他任何东西。

5ssjco0h

5ssjco0h1#

您可以使用messageDelete事件,该事件在删除消息时触发。如果一个用户删除了另一个用户的消息,您可以检查审核日志。
首先,确保你有必要的意图:GuildsGuildMembersGuildMessages。您还需要partialsChannelMessageGuildMember可以处理机器人上线前发送的消息。
一旦消息被删除,您就可以使用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}.`);
  }
});

相关问题