Javascript Discord js中messageDelete的问题

Javascript Discord js中messageDelete的问题,javascript,node-modules,discord.js,Javascript,Node Modules,Discord.js,我尝试在Discord服务器上创建我的bot。想要制作一个函数,它将复制文本频道中所有已删除的消息,但是,messageDelete只听到bot启动后正在写入的已删除消息。当我删除消息,使较早的机器人启动,它不工作 { client.on ("messageDelete", messageDelete =>{ let channel = client.channels.find(channel => channel.name === 'log-deleted-message'

我尝试在Discord服务器上创建我的bot。想要制作一个函数,它将复制文本频道中所有已删除的消息,但是,
messageDelete
只听到bot启动后正在写入的已删除消息。当我删除消息,使较早的机器人启动,它不工作

{
client.on ("messageDelete", messageDelete =>{
    let channel = client.channels.find(channel => channel.name === 'log-deleted-message')
    console.log(`Deleted :${messageDelete.content}`)
    channel.send(`${messageDelete.author.username} write : ${messageDelete.content}` 
})
}

messageDelete
是在bot打开时删除消息时调用的事件。如果在打开bot之前删除了一条消息,则无法恢复该消息,这就是为什么将其称为“已删除”。要实现您想要的目标,唯一的方法就是让bot永久打开。如果需要更多信息,请阅读中的更多内容。

以上答案现已过时。 使用Discord.js V12,您现在可以在messageDelete事件上缓存消息,您需要启用。启用此选项后,您可以按如下方式提前获取消息:

if(message.partial){ 
let msg = await message.fetch()
console.log(msg.content)
}

这将记录以前未缓存消息的内容。

Nono,你不明白我的意思,很抱歉我的英语不好。MessageDelete仅查看bot工作时发送的消息。如果有人在bot启动之前发送消息,然后我启动bot并尝试删除它,messageDelete不会看到此删除message@MikhailVeretelnikov这是正确的。只有已删除的缓存消息才会发出该事件。除了让bot保持在线外,实在没有办法解决这个问题。@slothiful对于已删除的未缓存邮件,仍然会发出事件。但是,它们将是部分的,因此您需要启用部分。但是,即使使用partials,如果bot在创建邮件时不在线,并且在删除邮件之前一直保持在线,则它将不在缓存中,并且partials将只包含邮件ID,而不包含内容。内容将无法恢复。遗憾的是,删除邮件后,您将无法再获取该邮件。因此,对未缓存消息的删除将只有id,而没有其他内容。当消息被删除时,此处没有参数,OP要求的是如何获取bot脱机时发送的消息,为此,您需要启用partials,这将返回通道中消息的缓存。您是正确的,事实上,如果消息被删除,而bot处于脱机状态,则不会从缓存中获取任何信息,但是如果消息未被删除,则它们仍将位于缓存中,并且在删除到另一个频道时,如果bot处于联机状态,则可以记录并输出消息,这是用户的要求。我目前使用的正是您发布的。如果发送消息时bot处于脱机状态,则它将被取消缓存,并且获取部分内容将无法恢复。您的回答将无法恢复邮件。此外,即使bot处于联机状态,如果您已将其脱机并使其重新联机,则缓存将丢失,并且您无法恢复已删除的邮件。那么,您在此处使用我的bot时出错:-如果我的bot已脱机,我可以记录以前的邮件,然后使用partials联机购买。上面的代码并不是全部,只是一个片段,它展示了如何依赖于部分文档中链接的其他因素来完成这项工作。同样,如果此消息在bot脱机时被编辑/删除,则无法检索。bot也不是缓存的功能,因此在继续之前,我强烈建议您进一步查看他们的api。这似乎不太可能,因为您跳过了
messageDelete
代码中的部分: