我帮助了一个每小时收到约 30 条垃圾邮件帖子的网站。我们启用了 AI Spam,但这并没有解决现有帖子存在的问题。我所做的就是这个。这可能对您有用。它没有在您的网站上进行测试,因此如果您执行了任何这些操作,您应该进行备份,并确保它看起来不像是由试图摧毁您网站的 AI 编写的。
这假定您了解 rails 的工作原理以及如何运行它。如果您不了解,您可能不应该这样做。
首先,您应该将您的网站置于 Discourse 中的只读模式,这样人们就不会在您犯下可怕错误时创建内容。然后进行备份。这意味着在您关闭只读模式之前,您可以安全地恢复到您的备份。
获取最近的帖子
攻击开始于一天多前,所以我回溯了两天。您也可以执行类似 36.hours.ago 的操作,如果您想更明确的话。如果我更聪明一些,我可能会做些什么来跳过私信中的帖子,但我决定不去担心它。
posts = Post.where("created_at >= ?", 2.days.ago)
.where(deleted_at: nil)
.where("user_id > ?", 1)
对这些帖子调用 SpamScanner
我不太确定是什么导致其中一些帖子失败,但如果您遇到一些“哎呀”的情况,这可能并不值得担心。
posts.each do |post|
begin
puts "https://talk.commonmark.org/p/#{post.id}"
DiscourseAi::AiModeration::SpamScanner.perform_scan(post)
rescue
puts "oops";
end;
sleep 0.2;
end
获取现在需要审核的帖子
这会获取刚刚被标记为可审核的(可能是通过上述操作)待审核帖子。我们不想盲目地将此应用于不属于这次危险冒险的内容。
reviewables = Reviewable.where(status: "pending")
.where(potential_spam: true)
.where("created_at >= ?", 1.hour.ago)
.where("updated_at >= ?", 1.hour.ago)
盲目信任 AI
当然,您仔细查看了被隐藏的主题,它们看起来都确实是垃圾邮件,所以您就准备动手了。标题是个玩笑。您不是真的盲目信任 AI,对吧?!?!?
这将删除帖子并删除和阻止用户。这非常非常危险。
reviewables.each do |reviewable|
begin
puts "deleting https://talk.commonmark.org/t/#{reviewable.topic_id}"
if reviewable.topic.nil?
puts "already gone"
next
end
reviewable.perform(user, :delete_user_block)
rescue
puts "oops"
end
end