Discord js中的messageDelete问题

Posted

技术标签:

【中文标题】Discord js中的messageDelete问题【英文标题】:Problems with messageDelete in Discord js 【发布时间】:2019-09-19 02:40:45 【问题描述】:

我尝试在 Discord 服务器上制作我的机器人。想做一个功能,将所有已删除的消息复制到文本通道中,但是,messageDelete 只听到机器人启动后正在写入的已删除消息。当我删除使较早的机器人启动的消息时,它不起作用。


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` 
)

【问题讨论】:

【参考方案1】:

上面的答案现在已经过时了。 使用 Discord.js V12,您现在可以在 messageDelete 事件上缓存消息,您需要启用 Partials。启用此功能后,您可以像这样预先获取消息:

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

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

【讨论】:

不幸的是,当一条消息被删除时,您将无法再获取它。因此,对未缓存消息的删除将只有 id 而没有其他内容。 当一条消息被删除时,它被删除,没有参数,OP 要求的是如何获取机器人离线时发送的消息,为此,您需要启用部分,这将返回通道中消息的缓存。您是对的,事实上,如果消息被删除,而机器人处于离线状态,则不会从缓存中获取任何内容,但是如果它们没有被删除,那么它们仍然会在缓存中,并且能够删除到另一个频道时被记录并输出,如果机器人在线,这就是用户的要求。 我目前完全按照您发布的方式使用。如果 bot 在发送消息时处于脱机状态,则它不会被缓存并且获取部分将无法恢复它。您的回答不会恢复消息。此外,即使机器人在线,如果您之后将其离线并重新在线,该缓存也会丢失并且您无法恢复已删除的消息。 那你做错了,我的机器人在这里:github.com/Tricky-Ricky/Discmod - 如果我的机器人已经离线,我可以记录之前的消息,然后使用部分在线购买。上面的代码并不是全部,只是一个 sn-p 展示了如何做到这一点,它依赖于部分文档中链接的其他因素。同样,如果此消息在机器人离线时已被编辑/删除,则无法检索。 bot 也不是什么缓存,所以在你继续之前,我强烈建议你去看看他们的 api。 这似乎不太可能,因为您在 messageDelete 代码中跳过了部分:github.com/Tricky-Ricky/Discmod/blob/master/Events/…【参考方案2】:

messageDelete 是在机器人开启时删除消息时调用的事件。如果在打开机器人之前删除了一条消息,则无法恢复它,这就是它被称为已删除的原因。实现您想要的目标的唯一方法是让机器人永久开启。如果您想了解更多信息,请在docs 中阅读更多信息。

【讨论】:

诺诺,你不懂我,对不起我的英语不好。 MessageDelete 仅查看机器人工作时发送的消息。如果有人在机器人启动之前发送消息,然后我启动机器人并尝试删除它,则 messageDelete 看不到此删除消息 @MikhailVeretelnikov 是正确的。只有被删除的缓存消息才会发出事件。除了让机器人保持在线之外,真的没有办法解决这个问题。 @slothiful 对于被删除的未缓存消息,仍然会发出该事件。但是它们将是部分的,因此您需要启用部分。但是,即使使用部分,如果机器人在创建消息时不在线并且在消息被删除之前一直保持在线,它不会在缓存中,并且部分将只包含消息 ID 而不是内容。内容将无法恢复。

以上是关于Discord js中的messageDelete问题的主要内容,如果未能解决你的问题,请参考以下文章

Discord 错误错误 Discord.js 中的无效令牌

Discord 仅识别 discord.js 中的“ping”命令

Discord.py 中的 Discord.js 的 `user.tag` 和 `user.username`?

使用 Discord.js 使用 Discord Bot 将语音频道中的所有人静音

discord.js 中的停止循环

Discord.js 中的 MySQL 黑名单系统