gpt4 book ai didi

javascript - 查找谁删除了消息

转载 作者:行者123 更新时间:2023-12-02 03:26:15 26 4
gpt4 key购买 nike

我的 discord.js 机器人被编程为记录已删除的消息。我有代码设置,但我想知道是否有办法查看谁删除了它?谢谢。

代码如下:

bot.on("messageDelete", (messageDelete) => {

let DeleteEmbed = new Discord.RichEmbed()
.setTitle("**DELETED MESSAGE**")
.setColor("#fc3c3c")
.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}`);

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

谢谢!

最佳答案

正如@NintendoZaedus 正确指出的那样,没有流畅准确的方法来做到这一点。但是,我想出了一种方法,可以在某种程度上以尽可能少的错误来做到这一点。

请注意,在撰写本文时这些是不可能的,将返回“未知”:

  • 查看哪个机器人删除了一条消息,因为 Discord 不会记录机器人的消息删除
  • 查看作者是否删除了他们自己的消息(Discord 也不会记录此信息)
  • 100% 确定删除的消息是否与提取的审计日志匹配,因为 Discord 不包括审计日志中的消息 ID
// If discord.js isn't defined, add this, if it is, don't.
const Discord = require("discord.js");

bot.on("messageDelete", async (messageDelete) => {
// Add latency as audit logs aren't instantly updated, adding a higher latency will result in slower logs, but higher accuracy.
await Discord.Util.delayFor(900);

// Fetch a couple audit logs than just one as new entries could've been added right after this event was emitted.
const fetchedLogs = await messageDelete.guild.fetchAuditLogs({
limit: 6,
type: 'MESSAGE_DELETE'
}).catch(console.error);

const auditEntry = fetchedLogs.entries.find(a =>
// Small filter function to make use of the little discord provides to narrow down the correct audit entry.
a.target.id === messageDelete.author.id &&
a.extra.channel.id === messageDelete.channel.id &&
// Ignore entries that are older than 20 seconds to reduce false positives.
Date.now() - a.createdTimestamp < 20000
);

// If entry exists, grab the user that deleted the message and display username + tag, if none, display 'Unknown'.
const executor = auditEntry.executor ? auditEntry.executor.tag : 'Unknown';

// Finally, prepare the embed and send the log. (using similar code posted by thread author but improved)

// <Discord>.MessageEmbed for v12, <Discord>.RichEmbed for older.
const DeleteEmbed = new Discord.MessageEmbed()
.setTitle("DELETED MESSAGE")
.setColor("#fc3c3c")
.addField("Author", messageDelete.author.tag, true)
// New field for user which deleted the message.
.addField("Deleted By", executor, true)
.addField("Channel", messageDelete.channel, true)
// Messages can be empty too, but I won't be going over how to include embeds/attachments, just displaying 'None' instead to avoid undefined/null.
.addField("Message", messageDelete.content || "None")
.setFooter(`Message ID: ${messageDelete.id} | Author ID: ${messageDelete.author.id}`);

const DeleteChannel = messageDelete.guild.channels.find(x => x.name === "delete-log");
DeleteChannel.send(DeleteEmbed);
});

关于javascript - 查找谁删除了消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53328061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com