如何批量删除旧的私语

继续讨论 管理批量操作

我正在寻找一种方法,从所有主题中删除超过一定年龄的私密消息(whispers)。

通常我们使用私密消息来讨论潜在的版主操作,但一旦采取了行动,这些私密消息就不再那么有用,并且随着时间的推移,它们逐渐变成噪音。

我可以通过 post_type=4(whisper)来删除超过一定年龄的帖子,但这似乎可能导致数据库中出现悬空或不一致的情况,或者由于论坛密钥的限制而不被允许。

是否有安全的方法来实现这一点?

这是删除帖子的最简洁方式:

whispers = Post.where(post_type: 4).where("created_at < ?", 1.year.ago)

whispers.find_each do |w|
  PostDestroyer.new(Discourse.system_user, w, skip_staff_log: true).destroy
  putc "."
end

这实际上相当于系统用户手动点击帖子上的删除按钮来删除每个帖子。我加入了 skip_staff_log,以免污染您的员工日志,但如果您希望记录该操作,可以将其移除。

您觉得这样可以满足您的需求吗?

我觉得这看起来完美无缺——谢谢!

我会在测试实例上试一试,看看需要多长时间,因为我们可能有几千条私信!!!

所以这个任务运行良好,谢谢……但私聊消息只是被折叠了,管理员和版主在展开后仍然可以查看。

这确实让主题看起来更整洁,但我原本希望它们能被彻底删除。我曾想过是否可以将所有私聊消息移动到一个新主题中,然后将其删除或对版主隐藏,但随后我发现了这两篇帖子:Is there a way to remove all the deleted/hidden posts? 以及更近期的这篇:Why is it not possible to permanently delete topics or posts?

遗憾的是,上述内容表明无法永久删除这些数据 :frowning: