首页 > 解决方案 > messageDelete 事件和部分 discord.js v12

问题描述

可以说我有一个messageDelete event我想从中获取数据的东西。由于我需要触发 messageDelete 事件,因此 messageDelete 事件中的Channel返回将是部分的。Message partialsmessage object

当我尝试获取此消息时,它返回一个错误,指出获取的消息是未知的。

content那么我怎样才能从 中获取诸如此类的信息deleted message

我当前的代码:

client.on("messageDelete", async message => {
    if (message.partial) await message.fetch() // this is where the error occurs
    console.log(message.content) // will only work on non partial messages
})

有什么办法可以解决这个问题,因为从过去删除的消息中获取信息会很有用。

编辑

Toasty 建议我使用审计日志,对此我使用了以下代码

client.on("messageDelete", async message => {
    console.log(message) // seeing whats avaliable in the return
    if (message.partial) console.log("message was partial") // checking if the message was partial to compare with non partial messages
    if (message.guild) {
        const fLogs = await message.guild.fetchAuditLogs({limit:1, type:"MESSAGE_DELETE"}) //getting audit logs
        const log = fLogs.entries.first()
        let {executor, target} = log
        console.log("Message deleted by "+executor.tag+" in "+target) // responding.
    }
})

输出:

message was partial
Message deleted by CT-1409 "Echo"#0093 in 606323576714559489

所以我可以得到被删除的消息的是谁和(某种)什么。我仍然无法获取其余的消息信息,就好像我试图获取具有目标 id 的消息一样,它会再次给我 Unkown Message。但是,当我开始记录消息对象时,我注意到已经存在大量信息,这可能意味着仍然可以从部分消息中访问一些数据。我不知道多少,但也许足以满足我的需要。

标签: javascriptnode.jsdiscord.js

解决方案


您无法获得任何信息deleted message可能是因为该消息..已被删除

正如您在此处阅读的那样,这是不可能的,而且也违反了规则侵犯了用户的隐私

但...

...如果您有command删除消息的权限,您可以在删除消息之前获取消息的信息并对其进行处理

或者,您可以使用审核日志


推荐阅读